dswt/
manager.rs

1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::{Algorithm, Token, VERSION};
6
7/// A struct that manages the creation and validation of tokens created with a given key and algorithm
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default, Eq)]
9pub struct TokenManager {
10
11    #[doc(hidden)]
12    pub version: u8,
13
14    /// Algorithm used to hash the payload
15    pub algorithm: Algorithm,
16
17    key: String,
18}
19
20
21impl TokenManager {
22
23    /// Function to create a new TokenManager
24
25    pub fn new(alg: Algorithm, key: &str) -> TokenManager {
26        TokenManager {
27            version: VERSION,
28            key: key.to_string(),
29            algorithm: alg,
30        }
31    }
32
33    /// Create a new token``
34    pub fn create_token(&self, payload: HashMap<String, String>) -> Token {
35        Token::new(
36            self.algorithm.clone(), 
37            payload, 
38            &self.key
39        )
40    }
41
42    /// Validate a token
43    pub fn validate_token(&self, token: &Token) -> bool {
44        token.hash == token.get_hash(&self.key)
45    }
46}