Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c09fa36b15 | ||
|
|
8317f41e3c |
Generated
+1
-1
@@ -522,7 +522,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "textsender_models"
|
name = "textsender_models"
|
||||||
version = "0.3.1"
|
version = "0.3.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"const_format",
|
"const_format",
|
||||||
"dotenvy",
|
"dotenvy",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "textsender_models"
|
name = "textsender_models"
|
||||||
version = "0.3.1"
|
version = "0.3.3"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.95"
|
rust-version = "1.95"
|
||||||
description = "Models used for the textsender project"
|
description = "Models used for the textsender project"
|
||||||
|
|||||||
+28
-5
@@ -3,15 +3,37 @@ use serde::{Deserialize, Serialize};
|
|||||||
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
||||||
pub struct Claims {
|
pub struct Claims {
|
||||||
pub user_id: uuid::Uuid,
|
pub user_id: uuid::Uuid,
|
||||||
pub role: String,
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub role: Option<String>,
|
||||||
#[serde(alias = "iss")]
|
#[serde(alias = "iss")]
|
||||||
pub issued: String,
|
pub issued: String,
|
||||||
#[serde(alias = "exp")]
|
#[serde(alias = "exp")]
|
||||||
|
#[serde(deserialize_with = "deserialize_i64_from_f64")]
|
||||||
pub expired: i64,
|
pub expired: i64,
|
||||||
#[serde(alias = "iat")]
|
#[serde(alias = "iat")]
|
||||||
|
#[serde(deserialize_with = "deserialize_i64_from_f64")]
|
||||||
pub issued_at: i64,
|
pub issued_at: i64,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn deserialize_i64_from_f64<'de, D>(deserializer: D) -> Result<i64, D::Error>
|
||||||
|
where
|
||||||
|
D: serde::Deserializer<'de>,
|
||||||
|
{
|
||||||
|
let val = f64::deserialize(deserializer)?;
|
||||||
|
// Handle NaN and infinity cases
|
||||||
|
if val.is_nan() || val.is_infinite() {
|
||||||
|
return Err(serde::de::Error::custom("invalid float value"));
|
||||||
|
}
|
||||||
|
// Round to nearest integer and convert
|
||||||
|
let rounded = val.round();
|
||||||
|
// Check if the rounded value can fit in i64
|
||||||
|
if rounded < (i64::MIN as f64) || rounded > (i64::MAX as f64) {
|
||||||
|
Err(serde::de::Error::custom("float out of i64 range"))
|
||||||
|
} else {
|
||||||
|
Ok(rounded as i64)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default, Deserialize, Serialize, utoipa::ToSchema)]
|
#[derive(Clone, Debug, Default, Deserialize, Serialize, utoipa::ToSchema)]
|
||||||
pub struct LoginResult {
|
pub struct LoginResult {
|
||||||
pub user_id: uuid::Uuid,
|
pub user_id: uuid::Uuid,
|
||||||
@@ -21,7 +43,7 @@ pub struct LoginResult {
|
|||||||
pub issued_at: i64,
|
pub issued_at: i64,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Alias for LoginResult
|
/// Alias for LoginResult
|
||||||
pub type Login = LoginResult;
|
pub type Login = LoginResult;
|
||||||
|
|
||||||
pub fn get_issued() -> time::Result<time::OffsetDateTime> {
|
pub fn get_issued() -> time::Result<time::OffsetDateTime> {
|
||||||
@@ -42,9 +64,10 @@ pub struct TokenResource {
|
|||||||
pub message: String,
|
pub message: String,
|
||||||
pub issuer: String,
|
pub issuer: String,
|
||||||
pub audiences: Vec<String>,
|
pub audiences: Vec<String>,
|
||||||
pub id: uuid::Uuid,
|
pub user_id: uuid::Uuid,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Token type
|
||||||
pub const TOKEN_TYPE: &str = "JWT";
|
pub const TOKEN_TYPE: &str = "JWT";
|
||||||
|
|
||||||
pub fn create_token(
|
pub fn create_token(
|
||||||
@@ -62,8 +85,8 @@ pub fn create_token(
|
|||||||
payload.set_subject(message);
|
payload.set_subject(message);
|
||||||
payload.set_issuer(issuer);
|
payload.set_issuer(issuer);
|
||||||
payload.set_audience(audiences.clone());
|
payload.set_audience(audiences.clone());
|
||||||
if !token_resource.id.is_nil() {
|
if !token_resource.user_id.is_nil() {
|
||||||
match payload.set_claim("id", Some(serde_json::json!(token_resource.id))) {
|
match payload.set_claim("user_id", Some(serde_json::json!(token_resource.user_id))) {
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
return Err(err);
|
return Err(err);
|
||||||
|
|||||||
Reference in New Issue
Block a user