narrowlink_types/
token.rs1use 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}
16impl 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}