Skip to main content

framework_cqrs_lib/cqrs/infra/token/services/
jwt_hmac.rs

1use std::fmt::Debug;
2
3use async_trait::async_trait;
4use jsonwebtoken::{decode, DecodingKey, Validation};
5use serde::de::DeserializeOwned;
6use serde::Serialize;
7
8use crate::cqrs::core::token::TokenService;
9use crate::cqrs::models::errors::{Error, ResultErr};
10
11pub struct JwtHMACTokenService {
12    secret: String,
13}
14
15impl JwtHMACTokenService {
16    pub fn new(secret: String) -> Self {
17        Self {
18            secret
19        }
20    }
21}
22
23#[async_trait]
24impl TokenService for JwtHMACTokenService {
25    async fn decode<CLAIMS: Debug + Serialize + DeserializeOwned>(&self, token: &str) -> ResultErr<CLAIMS> {
26        decode::<CLAIMS>(token, &DecodingKey::from_secret(self.secret.as_bytes()), &Validation::default())
27            .map(|token_data| token_data.claims)
28            .map_err(|err| Error::Simple(err.to_string()))
29    }
30}