an http based roguelike rpg about jelqing
Blame: src/game/credentials.rs
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 1 | #[derive(Clone, Copy)] |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 2 | pub enum Scheme { |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 3 | Basic, |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 4 | Bearer, |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 5 | Excuse, |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 6 | Ruler, |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 7 | } |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 8 | |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 9 | impl Scheme { |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 10 | fn name(self) -> &'static str { |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 11 | match self { |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 12 | Self::Basic => "basic", |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 13 | Self::Bearer => "bearer", |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 14 | Self::Excuse => "excuse", |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 15 | Self::Ruler => "ruler", |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 16 | } |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 17 | } |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 18 | } |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 19 | |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 20 | pub fn parse_credentials(authorization: &str, scheme: Scheme) -> Option<&str> { |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 21 | let (given, rest) = authorization.trim().split_once(' ')?; |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 22 | given |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 23 | .eq_ignore_ascii_case(scheme.name()) |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 24 | .then(|| rest.trim().trim_matches('"')) |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 25 | } |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 26 | |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 27 | pub fn etag_matches(condition: &str, etag: &str) -> bool { |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 28 | condition |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 29 | .split(',') |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 30 | .map(str::trim) |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 31 | .any(|tag| tag == "*" || tag.trim_start_matches("W/") == etag) |
8b8e83329a1d | atagen | 2026-10-12 12:01 UTC | 32 | } |