Skip to main content

everymap_core/auth/
header.rs

1use crate::auth::provider::AuthProvider;
2use crate::error::EveryMapResult;
3use async_trait::async_trait;
4use reqwest::header::{HeaderValue, AUTHORIZATION};
5use reqwest::RequestBuilder;
6use zeroize::Zeroize;
7
8/// Provider for header-based authentication (e.g., Radar's `Authorization` header).
9///
10/// The key value is zeroized on drop to prevent lingering sensitive data in memory.
11#[derive(Zeroize)]
12#[zeroize(drop)]
13pub struct HeaderAuthProvider {
14    value: String,
15}
16
17impl HeaderAuthProvider {
18    /// Create a new header auth provider with the raw header value.
19    ///
20    /// The value is set as the `Authorization` header. For Radar, this is
21    /// the API key directly (e.g., `prj_live_pk_...`).
22    pub fn new(value: String) -> Self {
23        Self { value }
24    }
25}
26
27#[async_trait]
28impl AuthProvider for HeaderAuthProvider {
29    async fn apply(&self, request: RequestBuilder) -> EveryMapResult<RequestBuilder> {
30        let header_value = HeaderValue::from_str(&self.value).map_err(|e| {
31            crate::error::EveryMapError::AuthError {
32                provider: "unknown".to_string(),
33                message: format!("Invalid auth header value: {}", e),
34            }
35        })?;
36        Ok(request.header(AUTHORIZATION, header_value))
37    }
38}