Skip to main content

everymap_core/auth/
api_key.rs

1use crate::auth::provider::AuthProvider;
2use crate::error::EveryMapResult;
3use async_trait::async_trait;
4use reqwest::RequestBuilder;
5use zeroize::Zeroize;
6
7/// Provider for API Key based authentication.
8///
9/// Keys are zeroized on drop to prevent lingering sensitive data in memory.
10#[derive(Zeroize)]
11#[zeroize(drop)]
12pub struct ApiKeyProvider {
13    key: String,
14    #[zeroize(skip)]
15    param_name: String,
16}
17
18impl ApiKeyProvider {
19    pub fn new(key: String, param_name: String) -> Self {
20        Self { key, param_name }
21    }
22}
23
24#[async_trait]
25impl AuthProvider for ApiKeyProvider {
26    async fn apply(&self, request: RequestBuilder) -> EveryMapResult<RequestBuilder> {
27        Ok(request.query(&[(&self.param_name, &self.key)]))
28    }
29}