easy_auth/prelude/token/
jwt_token_service.rs1use 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}