easy_auth/prelude/token/
jwt_token_service.rs

1use std::fmt::Debug;
2
3use jsonwebtoken::{decode, DecodingKey, EncodingKey, Header, Validation};
4use serde::{Deserialize, Serialize};
5use serde::de::DeserializeOwned;
6
7use crate::core::token::errors::DecodeError;
8use crate::core::token::token_service::TokenService;
9
10pub struct JwtTokenService {
11    secret: String
12}
13
14impl JwtTokenService {
15    pub fn new(secret: String) -> Self {
16        Self {
17            secret
18        }
19    }
20}
21
22impl TokenService for JwtTokenService {
23    fn encode<'a, CLAIMS: Debug + Serialize + Deserialize<'a>>(&self, claims: CLAIMS) -> String {
24        let secret_key = EncodingKey::from_secret(self.secret.as_bytes());
25        let header = Header::new(jsonwebtoken::Algorithm::HS256);
26        jsonwebtoken::encode(&header, &claims, &secret_key).unwrap()
27    }
28
29    fn decode<CLAIMS: Debug + Serialize + DeserializeOwned>(&self, token: &str) -> Result<CLAIMS, DecodeError> {
30        decode::<CLAIMS>(token, &DecodingKey::from_secret(self.secret.as_bytes()), &Validation::default())
31            .map(|token_data| token_data.claims)
32            .map_err(|err| DecodeError::new(err.to_string()))
33    }
34}