use jsonwebtoken::{encode, EncodingKey, Header};
use serde::{Deserialize, Serialize};
use crate::{errors::Error, utils::Snowflake};
pub fn generate_token(id: &Snowflake, email: String, jwt_key: &str) -> String {
let claims = Claims::new(&email, id);
build_token(&claims, jwt_key).unwrap()
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Claims {
pub exp: i64,
pub iat: i64,
pub email: String,
pub id: String,
}
impl Claims {
pub fn new(user: &str, id: &Snowflake) -> Self {
let unix = chrono::Utc::now().timestamp();
Self {
exp: unix + (60 * 60 * 24),
id: id.to_string(),
iat: unix,
email: user.to_string(),
}
}
}
pub fn build_token(claims: &Claims, jwt_key: &str) -> Result<String, jsonwebtoken::errors::Error> {
encode(
&Header::default(),
claims,
&EncodingKey::from_secret(jwt_key.as_bytes()),
)
}