narrowlink_types/
token.rs

1use jsonwebtoken::{Algorithm, DecodingKey, EncodingKey, Header, Validation};
2use serde::{Deserialize, Serialize};
3use uuid::Uuid;
4
5use crate::{error::MessageError, policy::Policy, publish::PublishHost};
6
7#[derive(Debug, Serialize, Deserialize)]
8pub struct ClientToken {
9    pub uid: Uuid,
10    pub name: String,
11    pub exp: usize,
12    #[serde(skip_serializing_if = "<[_]>::is_empty")]
13    #[serde(default = "Vec::new")]
14    pub policies: Vec<u32>,
15}
16//Todo: replace to from/into if possible//Todo: replace to from/into if possible
17impl ClientToken {
18    pub fn from_str(s: &str, token: &[u8]) -> Result<ClientToken, MessageError> {
19        Ok(jsonwebtoken::decode::<ClientToken>(
20            s,
21            &DecodingKey::from_secret(token),
22            &Validation::new(Algorithm::default()),
23        )?
24        .claims)
25    }
26
27    pub fn to_string(&self, token: &[u8]) -> Result<String, MessageError> {
28        Ok(jsonwebtoken::encode(
29            &Header::new(Algorithm::default()),
30            self,
31            &EncodingKey::from_secret(token),
32        )?)
33    }
34}
35#[derive(Debug, Serialize, Deserialize)]
36pub struct PolicyToken {
37    pub uid: Uuid,
38    pub name: String,
39    pub exp: usize,
40    pub pid: u32,
41    pub policy: Policy,
42}
43
44impl PolicyToken {
45    pub fn from_str(s: &str, token: &[u8]) -> Result<Self, MessageError> {
46        Ok(jsonwebtoken::decode::<PolicyToken>(
47            s,
48            &DecodingKey::from_secret(token),
49            &Validation::new(Algorithm::default()),
50        )?
51        .claims)
52    }
53
54    pub fn to_string(&self, token: &[u8]) -> Result<String, MessageError> {
55        Ok(jsonwebtoken::encode(
56            &Header::new(Algorithm::default()),
57            self,
58            &EncodingKey::from_secret(token),
59        )?)
60    }
61}
62
63#[derive(Debug, Serialize, Deserialize)]
64pub struct AgentToken {
65    pub uid: Uuid,
66    pub name: String,
67    pub exp: usize,
68}
69
70impl AgentToken {
71    pub fn from_str(s: &str, token: &[u8]) -> Result<AgentToken, MessageError> {
72        Ok(jsonwebtoken::decode::<AgentToken>(
73            s,
74            &DecodingKey::from_secret(token),
75            &Validation::new(Algorithm::default()),
76        )?
77        .claims)
78    }
79
80    pub fn to_string(&self, token: &[u8]) -> Result<String, MessageError> {
81        Ok(jsonwebtoken::encode(
82            &Header::new(Algorithm::default()),
83            self,
84            &EncodingKey::from_secret(token),
85        )?)
86    }
87}
88
89#[derive(Debug, Serialize, Deserialize)]
90pub struct AgentPublishToken {
91    pub uid: Uuid,
92    pub name: String,
93    pub exp: usize,
94    pub publish_hosts: Vec<PublishHost>,
95}
96
97impl AgentPublishToken {
98    pub fn from_str(s: &str, token: &[u8]) -> Result<AgentPublishToken, MessageError> {
99        Ok(jsonwebtoken::decode::<AgentPublishToken>(
100            s,
101            &DecodingKey::from_secret(token),
102            &Validation::new(Algorithm::default()),
103        )?
104        .claims)
105    }
106
107    pub fn to_string(&self, token: &[u8]) -> Result<String, MessageError> {
108        Ok(jsonwebtoken::encode(
109            &Header::new(Algorithm::default()),
110            self,
111            &EncodingKey::from_secret(token),
112        )?)
113    }
114}