framework_cqrs_lib/cqrs/infra/token/services/
jwt_hmac.rs1use 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}