wrapper_jsonwebtoken/
wrapper.rs1use 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}