wrapper_jsonwebtoken/
wrapper.rs

1use chrono::Utc;
2use darth_rust::DarthRust;
3use jsonwebtoken::{decode, encode, DecodingKey, EncodingKey, Header, Validation};
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7#[derive(Serialize, Deserialize, PartialEq, Debug, DarthRust, Clone)]
8pub struct Token {
9    pub items: Value,
10    pub exp: usize,
11}
12
13#[derive(Serialize, Deserialize, PartialEq, Debug, DarthRust, Clone)]
14pub struct WrapperJWT {
15    pub token: String,
16    pub secret: String,
17    pub items: Option<Value>,
18    pub exp: usize,
19}
20
21pub trait JsonwebtokenTrait {
22    fn hs256_decode(&self) -> Result<Token, jsonwebtoken::errors::Error>;
23    fn hs384_decode(&self) -> Result<Token, jsonwebtoken::errors::Error>;
24    fn hs512_decode(&self) -> Result<Token, jsonwebtoken::errors::Error>;
25    fn hs256_encode(&self) -> Result<String, jsonwebtoken::errors::Error>;
26    fn hs384_encode(&self) -> Result<String, jsonwebtoken::errors::Error>;
27    fn hs512_encode(&self) -> Result<String, jsonwebtoken::errors::Error>;
28}
29
30impl JsonwebtokenTrait for WrapperJWT {
31    fn hs256_decode(&self) -> Result<Token, jsonwebtoken::errors::Error> {
32        let token = &self.token;
33        let secret = &self.secret;
34        let res = decode::<Token>(
35            token,
36            &DecodingKey::from_secret(secret.as_ref()),
37            &Validation::new(jsonwebtoken::Algorithm::HS256),
38        )?;
39        Ok(res.claims)
40    }
41    fn hs384_decode(&self) -> Result<Token, jsonwebtoken::errors::Error> {
42        let token = &self.token;
43        let secret = &self.secret;
44        let res = decode::<Token>(
45            token,
46            &DecodingKey::from_secret(secret.as_ref()),
47            &Validation::new(jsonwebtoken::Algorithm::HS384),
48        )?;
49        Ok(res.claims)
50    }
51    fn hs512_decode(&self) -> Result<Token, jsonwebtoken::errors::Error> {
52        let token = &self.token;
53        let secret = &self.secret;
54        let res = decode::<Token>(
55            token,
56            &DecodingKey::from_secret(secret.as_ref()),
57            &Validation::new(jsonwebtoken::Algorithm::HS512),
58        )?;
59        Ok(res.claims)
60    }
61    fn hs256_encode(&self) -> Result<String, jsonwebtoken::errors::Error> {
62        let secret = &self.secret;
63        let exp = &self.exp;
64        let items = self.items.as_ref().expect("items must be provided");
65        let now = Utc::now().timestamp() as usize;
66        let exp = now + exp;
67        let my_claims = Token::new(items.clone(), exp);
68        let header = Header::new(jsonwebtoken::Algorithm::HS256);
69        encode(&header, &my_claims, &EncodingKey::from_secret(secret.as_ref()))
70    }
71    fn hs384_encode(&self) -> Result<String, jsonwebtoken::errors::Error> {
72        let secret = &self.secret;
73        let exp = &self.exp;
74        let items = self.items.as_ref().expect("items must be provided");
75        let now = Utc::now().timestamp() as usize;
76        let exp = now + exp;
77        let my_claims = Token::new(items.clone(), exp);
78        let header = Header::new(jsonwebtoken::Algorithm::HS384);
79        encode(&header, &my_claims, &EncodingKey::from_secret(secret.as_ref()))
80    }
81    fn hs512_encode(&self) -> Result<String, jsonwebtoken::errors::Error> {
82        let secret = &self.secret;
83        let exp = &self.exp;
84        let items = self.items.as_ref().expect("items must be provided");
85        let now = Utc::now().timestamp() as usize;
86        let exp = now + exp;
87        let my_claims = Token::new(items.clone(), exp);
88        let header = Header::new(jsonwebtoken::Algorithm::HS512);
89        encode(&header, &my_claims, &EncodingKey::from_secret(secret.as_ref()))
90    }
91}