Skip to main content

oci_api/auth/providers/
api_key.rs

1use async_trait::async_trait;
2
3use crate::auth::providers::{OciAuthProvider, SignRequest, SignedHeaders};
4use crate::client::signer::OciSigner;
5use crate::error::Result;
6
7#[derive(Clone)]
8pub struct ApiKeyAuthProvider {
9    signer: OciSigner,
10}
11
12impl ApiKeyAuthProvider {
13    pub fn new(signer: OciSigner) -> Self {
14        Self { signer }
15    }
16
17    pub fn signer(&self) -> &OciSigner {
18        &self.signer
19    }
20}
21
22#[async_trait]
23impl OciAuthProvider for ApiKeyAuthProvider {
24    async fn sign(&self, request: &SignRequest<'_>) -> Result<SignedHeaders> {
25        let signed = self.signer.sign_request_headers(
26            request.method,
27            request.path,
28            request.host,
29            request.body,
30            request.content_type,
31            None,
32        )?;
33
34        Ok(SignedHeaders {
35            date: signed.date,
36            authorization: signed.authorization,
37            content_type: signed.content_type,
38            content_length: signed.content_length,
39            x_content_sha256: signed.x_content_sha256,
40            extra_headers: Vec::new(),
41        })
42    }
43}