koprogo_api/infrastructure/external/
signature_provider_itsme.rs1use super::signature_provider_common::{RestSignatureProvider, RetryPolicy};
8use crate::application::ports::electronic_signature_provider::{
9 ElectronicSignatureProvider, SignatureProviderError, SignatureRequest, SignatureRequestAck,
10};
11use crate::domain::plateforme::{QualifiedSignature, SignatureProviderKind};
12use async_trait::async_trait;
13
14pub struct ItsmeSignatureProvider(RestSignatureProvider);
15
16impl ItsmeSignatureProvider {
17 pub fn new(base_url: String, hmac_secret: Vec<u8>) -> Self {
18 Self(RestSignatureProvider::new(
19 SignatureProviderKind::Itsme,
20 base_url,
21 hmac_secret,
22 ))
23 }
24
25 pub fn with_retry_policy(self, retry_policy: RetryPolicy) -> Self {
27 Self(self.0.with_retry_policy(retry_policy))
28 }
29
30 pub fn with_http_timeout(self, timeout: std::time::Duration) -> Self {
32 Self(self.0.with_http_timeout(timeout))
33 }
34}
35
36#[async_trait]
37impl ElectronicSignatureProvider for ItsmeSignatureProvider {
38 fn kind(&self) -> SignatureProviderKind {
39 self.0.kind()
40 }
41
42 async fn request_signature(
43 &self,
44 request: SignatureRequest,
45 ) -> Result<SignatureRequestAck, SignatureProviderError> {
46 self.0.request_signature(request).await
47 }
48
49 async fn fetch_signature(
50 &self,
51 provider_reference: &str,
52 expected_document_hash: &str,
53 ) -> Result<QualifiedSignature, SignatureProviderError> {
54 self.0
55 .fetch_signature(provider_reference, expected_document_hash)
56 .await
57 }
58}