actix_web_security/authentication/scheme/
header_extractor.rs1use actix_web::http::{HeaderMap, HeaderValue};
4use async_trait::async_trait;
5
6use crate::authentication::error::error_type::AuthenticationError;
7use crate::authentication::scheme::authentication::Authentication;
8
9#[async_trait]
12pub trait AuthorizationHeaderExtractor: Send + Sync {
13 async fn extract_token(
14 &self,
15 request: &HeaderMap,
16 ) -> Result<Box<dyn Authentication>, AuthenticationError>;
17}
18
19pub fn extract_auth_header(
22 header: &HeaderValue,
23 auth_scheme: &str,
24 header_length: usize,
25) -> Result<String, AuthenticationError> {
26 if header.len() < header_length {
27 return Err(AuthenticationError::InvalidAuthorizationHeader);
28 }
29
30 let token: &str;
32 if let Ok(header_str) = header.to_str() {
33 let mut parts = header_str.splitn(2, ' ');
34 match parts.next() {
35 Some(scheme) if scheme == auth_scheme => (),
36 _ => return Err(AuthenticationError::InvalidAuthorizationHeader),
37 }
38 token = parts
39 .next()
40 .ok_or(AuthenticationError::InvalidAuthorizationHeader)?
41 } else {
42 return Err(AuthenticationError::InvalidAuthorizationHeader);
43 }
44 Ok(token.to_string())
45}