atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0
a8269407e054211fed82e710616e72cfa4f72961
1
ssh://brewery@pls.lobotomise.me:33/atagen/jelq.git

Blame: src/game/credentials.rs

8b8e83329a1datagen2026-10-12 12:01 UTC1
#[derive(Clone, Copy)]
8b8e83329a1datagen2026-10-12 12:01 UTC2
pub enum Scheme {
8b8e83329a1datagen2026-10-12 12:01 UTC3
    Basic,
8b8e83329a1datagen2026-10-12 12:01 UTC4
    Bearer,
8b8e83329a1datagen2026-10-12 12:01 UTC5
    Excuse,
8b8e83329a1datagen2026-10-12 12:01 UTC6
    Ruler,
8b8e83329a1datagen2026-10-12 12:01 UTC7
}
8b8e83329a1datagen2026-10-12 12:01 UTC8
8b8e83329a1datagen2026-10-12 12:01 UTC9
impl Scheme {
8b8e83329a1datagen2026-10-12 12:01 UTC10
    fn name(self) -> &'static str {
8b8e83329a1datagen2026-10-12 12:01 UTC11
        match self {
8b8e83329a1datagen2026-10-12 12:01 UTC12
            Self::Basic => "basic",
8b8e83329a1datagen2026-10-12 12:01 UTC13
            Self::Bearer => "bearer",
8b8e83329a1datagen2026-10-12 12:01 UTC14
            Self::Excuse => "excuse",
8b8e83329a1datagen2026-10-12 12:01 UTC15
            Self::Ruler => "ruler",
8b8e83329a1datagen2026-10-12 12:01 UTC16
        }
8b8e83329a1datagen2026-10-12 12:01 UTC17
    }
8b8e83329a1datagen2026-10-12 12:01 UTC18
}
8b8e83329a1datagen2026-10-12 12:01 UTC19
8b8e83329a1datagen2026-10-12 12:01 UTC20
pub fn parse_credentials(authorization: &str, scheme: Scheme) -> Option<&str> {
8b8e83329a1datagen2026-10-12 12:01 UTC21
    let (given, rest) = authorization.trim().split_once(' ')?;
8b8e83329a1datagen2026-10-12 12:01 UTC22
    given
8b8e83329a1datagen2026-10-12 12:01 UTC23
        .eq_ignore_ascii_case(scheme.name())
8b8e83329a1datagen2026-10-12 12:01 UTC24
        .then(|| rest.trim().trim_matches('"'))
8b8e83329a1datagen2026-10-12 12:01 UTC25
}
8b8e83329a1datagen2026-10-12 12:01 UTC26
8b8e83329a1datagen2026-10-12 12:01 UTC27
pub fn etag_matches(condition: &str, etag: &str) -> bool {
8b8e83329a1datagen2026-10-12 12:01 UTC28
    condition
8b8e83329a1datagen2026-10-12 12:01 UTC29
        .split(',')
8b8e83329a1datagen2026-10-12 12:01 UTC30
        .map(str::trim)
8b8e83329a1datagen2026-10-12 12:01 UTC31
        .any(|tag| tag == "*" || tag.trim_start_matches("W/") == etag)
8b8e83329a1datagen2026-10-12 12:01 UTC32
}