use crate::auth::Authorizer;
#[derive(Clone, Copy)]
pub enum Service {
UploadPack,
ReceivePack,
}
impl Service {
pub fn git_arg(self) -> &'static str {
match self {
Service::UploadPack => "upload-pack",
Service::ReceivePack => "receive-pack",
}
}
pub fn allow(self, auth: &dyn Authorizer, repo: &str) -> bool {
match self {
Service::UploadPack => auth.allow_pull(repo),
Service::ReceivePack => auth.allow_push(repo),
}
}
pub fn from_http_param(s: &str) -> Option<Service> {
match s {
"upload-pack" => Some(Service::UploadPack),
"receive-pack" => Some(Service::ReceivePack),
_ => None,
}
}
pub fn from_ssh_verb(s: &str) -> Option<Service> {
match s {
"git-upload-pack" => Some(Service::UploadPack),
"git-receive-pack" => Some(Service::ReceivePack),
_ => None,
}
}
}