docserver/src/users/NO/usernotifydata.rs

67 lines
2.4 KiB
Rust

use std::collections::HashMap;
use serde_json::json;
use crate::defs::Config;
use pasetoken_lib::ConfigPaSeToken;
use crate::defs::{
CLAIM_UID,
CLAIM_AUTH,
CLAIM_APP_KEY,
};
#[derive(Debug, Default)]
pub struct UserNotifyData {
pub key: String,
pub id: String,
pub auth: String,
}
impl UserNotifyData {
pub fn data_claim(&self,_config: &Config) -> HashMap<String,String> {
HashMap::from([
(String::from(CLAIM_UID), self.id.to_owned()),
(String::from(CLAIM_AUTH), self.auth.to_owned()),
(String::from(CLAIM_APP_KEY), self.key.to_owned()),
])
}
pub fn token(&self, server_config: &Config, paseto_config: &ConfigPaSeToken, expire: bool) -> String {
paseto_config.generate_token("", &self.data_claim(server_config), expire).unwrap_or_else(|e|{
eprintln!("Error generating token: {}", e);
String::from("")
})
}
pub fn from_token(token: &str,paseto_config: &ConfigPaSeToken) -> (String,Self) {
match paseto_config.pasetoken() {
Ok(paseto) => {
match paseto.trusted(token, false) {
Ok(trusted_token) => {
// dbg!(&trusted_token.payload_claims());
if let Some(claims) = trusted_token.payload_claims() {
// dbg!(&claims);
let uid = claims.get_claim(CLAIM_UID).unwrap_or(&json!("")).to_string().replace("\"","");
(
uid.to_owned(),
Self {
key: claims.get_claim(CLAIM_APP_KEY).unwrap_or(&json!("")).to_string().replace("\"",""),
id: uid,
auth: claims.get_claim(CLAIM_AUTH).unwrap_or(&json!("")).to_string().replace("\"",""),
}
)
} else {
(String::from(""), Self::default())
}
},
Err(e) => {
println!("Token not trusted: {}",e);
(String::from(""), Self::default())
},
}
},
Err(e) => {
println!("Error collecting notify data: {}",e);
(String::from(""), Self::default())
}
}
}
}