oci_api/auth/providers/
api_key.rs1use 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}