Compare commits

..
Author SHA1 Message Date
phoenix e7834093a6 Adding more features
textsender_models PR / Rustfmt (pull_request) Successful in 48s
textsender_models PR / Clippy (pull_request) Successful in 55s
Release Tagging / release (pull_request) Successful in 36s
textsender_models PR / Check (pull_request) Successful in 1m48s
2026-06-14 17:25:59 -04:00
phoenix bea9489c8e Added features
textsender_models PR / Rustfmt (pull_request) Successful in 58s
textsender_models PR / Clippy (pull_request) Successful in 59s
textsender_models PR / Check (pull_request) Successful in 1m8s
Release Tagging / release (pull_request) Successful in 28s
2026-06-14 17:19:39 -04:00
phoenix bb3f2f3af5 Adding pr workflow
textsender_models PR / Rustfmt (pull_request) Successful in 56s
textsender_models PR / Check (pull_request) Successful in 1m0s
textsender_models PR / Clippy (pull_request) Successful in 1m16s
Release Tagging / release (pull_request) Successful in 29s
2026-06-14 17:09:57 -04:00
phoenix 8622b8c720 Limiting workflows ran in pr
Release Tagging / release (pull_request) Failing after 29s
2026-06-14 17:09:07 -04:00
phoenix c09fa36b15 Claim fix (#27)
Release Tagging / release (push) Successful in 35s
Rust Build / Rustfmt (push) Successful in 39s
Rust Build / Test Suite (push) Successful in 1m13s
Rust Build / Check (push) Successful in 1m30s
Rust Build / build (push) Successful in 47s
Rust Build / Clippy (push) Successful in 1m23s
Reviewed-on: phoenix/textsender_models#27
2026-06-13 19:00:22 -04:00
phoenix 8317f41e3c Claim update (#26)
Release Tagging / release (push) Successful in 47s
Rust Build / Check (push) Successful in 56s
Rust Build / Rustfmt (push) Successful in 27s
Rust Build / Test Suite (push) Successful in 1m34s
Rust Build / Clippy (push) Successful in 50s
Rust Build / build (push) Successful in 40s
Release Tagging / release (pull_request) Successful in 46s
Rust Build / Rustfmt (pull_request) Successful in 28s
Rust Build / Check (pull_request) Successful in 1m15s
Rust Build / Test Suite (pull_request) Successful in 1m20s
Rust Build / Clippy (pull_request) Successful in 43s
Rust Build / build (pull_request) Successful in 1m2s
Reviewed-on: phoenix/textsender_models#26
2026-06-13 18:02:25 -04:00
5 changed files with 82 additions and 10 deletions
+42
View File
@@ -0,0 +1,42 @@
name: textsender_models PR
on:
pull_request:
branches:
- main
jobs:
check:
name: Check
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v5
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: 1.95
- uses: Swatinem/rust-cache@v2
- run: cargo check
fmt:
name: Rustfmt
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v5
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: 1.95
- uses: Swatinem/rust-cache@v2
- run: rustup component add rustfmt
- run: cargo fmt --all -- --check
clippy:
name: Clippy
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v5
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: 1.95
- uses: Swatinem/rust-cache@v2
- run: rustup component add clippy
- run: cargo clippy -- -D warnings
-3
View File
@@ -4,9 +4,6 @@ on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
check:
Generated
+1 -1
View File
@@ -522,7 +522,7 @@ dependencies = [
[[package]]
name = "textsender_models"
version = "0.3.1"
version = "0.3.4"
dependencies = [
"const_format",
"dotenvy",
+11 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "textsender_models"
version = "0.3.1"
version = "0.3.4"
edition = "2024"
rust-version = "1.95"
description = "Models used for the textsender project"
@@ -15,4 +15,14 @@ const_format = { version = "0.2.36" }
josekit = { version = "0.10.3" }
utoipa = { version = "5.4.0", features = ["uuid", "time"] }
[features]
default = ["full"]
full = ["user", "message", "contact", "config", "envy", "token"]
user = []
message = []
contact = []
config = []
envy = []
token = []
[dev-dependencies]
+28 -5
View File
@@ -3,15 +3,37 @@ use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct Claims {
pub user_id: uuid::Uuid,
pub role: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[serde(alias = "iss")]
pub issued: String,
#[serde(alias = "exp")]
#[serde(deserialize_with = "deserialize_i64_from_f64")]
pub expired: i64,
#[serde(alias = "iat")]
#[serde(deserialize_with = "deserialize_i64_from_f64")]
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)]
pub struct LoginResult {
pub user_id: uuid::Uuid,
@@ -21,7 +43,7 @@ pub struct LoginResult {
pub issued_at: i64,
}
// Alias for LoginResult
/// Alias for LoginResult
pub type Login = LoginResult;
pub fn get_issued() -> time::Result<time::OffsetDateTime> {
@@ -42,9 +64,10 @@ pub struct TokenResource {
pub message: String,
pub issuer: String,
pub audiences: Vec<String>,
pub id: uuid::Uuid,
pub user_id: uuid::Uuid,
}
/// Token type
pub const TOKEN_TYPE: &str = "JWT";
pub fn create_token(
@@ -62,8 +85,8 @@ pub fn create_token(
payload.set_subject(message);
payload.set_issuer(issuer);
payload.set_audience(audiences.clone());
if !token_resource.id.is_nil() {
match payload.set_claim("id", Some(serde_json::json!(token_resource.id))) {
if !token_resource.user_id.is_nil() {
match payload.set_claim("user_id", Some(serde_json::json!(token_resource.user_id))) {
Ok(_) => {}
Err(err) => {
return Err(err);