use crate::cqrs::core::token::CanEncodeToken;
use jsonwebtoken::{EncodingKey, Header};
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
pub struct JwtHMACEncoderTokenService {
secret: String,
}
impl JwtHMACEncoderTokenService {
pub fn new(secret: String) -> Self {
Self {
secret
}
}
}
impl CanEncodeToken for JwtHMACEncoderTokenService {
fn encode<'a, CLAIMS: Debug + Serialize + Deserialize<'a>>(&self, claims: CLAIMS) -> String {
let secret_key = EncodingKey::from_secret(self.secret.as_bytes());
let header = Header::new(jsonwebtoken::Algorithm::HS256);
jsonwebtoken::encode(&header, &claims, &secret_key).unwrap()
}
}