feat: Add axum-extra dependency and implement typed headers

feat: Define unique index on users table for email and fix minor syntax error

refactor: Update permissions_guard to use claims from JWT and improve user retrieval

refactor: Modify user-related service methods to accept user details directly

fix: Update token generation functions to include user ID and permissions

test: Update Google OAuth flow tests to reflect changes in token generation
This commit is contained in:
MythEclipse
2025-08-14 22:46:42 +07:00
parent 89ef48a57e
commit 199d0c885e
17 changed files with 305 additions and 234 deletions
+10 -8
View File
@@ -11,16 +11,18 @@ pub struct Claims {
pub exp: usize,
pub iat: usize,
pub sub: String,
pub user_id: String,
pub permissions: Vec<String>,
}
pub fn encode_access_token(sub: String) -> Result<String, StatusCode> {
pub fn encode_access_token(sub: String, user_id: String, permissions: Vec<String>) -> Result<String, StatusCode> {
let env = &ENV;
let secret: String = env.access_token_secret.clone();
let now = Utc::now();
let expire: TimeDelta = Duration::minutes(15);
let exp: usize = (now + expire).timestamp() as usize;
let iat: usize = now.timestamp() as usize;
let claim = Claims { iat, exp, sub };
let claim = Claims { iat, exp, sub, user_id, permissions };
encode(
&Header::default(),
&claim,
@@ -29,14 +31,14 @@ pub fn encode_access_token(sub: String) -> Result<String, StatusCode> {
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)
}
pub fn encode_reset_password_token(sub: String) -> Result<String, StatusCode> {
pub fn encode_reset_password_token(sub: String, user_id: String, permissions: Vec<String>) -> Result<String, StatusCode> {
let env = &ENV;
let secret: String = env.access_token_secret.clone();
let now = Utc::now();
let expire: TimeDelta = Duration::minutes(5);
let exp: usize = (now + expire).timestamp() as usize;
let iat: usize = now.timestamp() as usize;
let claim = Claims { iat, exp, sub };
let claim = Claims { iat, exp, sub, user_id, permissions };
encode(
&Header::default(),
&claim,
@@ -59,14 +61,14 @@ pub fn decode_access_token(
result
}
pub fn encode_refresh_token(sub: String) -> Result<String, StatusCode> {
pub fn encode_refresh_token(sub: String, user_id: String, permissions: Vec<String>) -> Result<String, StatusCode> {
let env = &ENV;
let secret: String = env.refresh_token_secret.clone();
let now = Utc::now();
let expire: TimeDelta = Duration::days(1);
let exp: usize = (now + expire).timestamp() as usize;
let iat: usize = now.timestamp() as usize;
let claim = Claims { iat, exp, sub };
let claim = Claims { iat, exp, sub, user_id, permissions };
encode(
&Header::default(),
&claim,
@@ -89,6 +91,6 @@ pub fn decode_refresh_token(
result // Explicitly return result
}
pub fn generate_jwt(user_id: &str) -> Result<String, StatusCode> {
encode_access_token(user_id.to_string())
pub fn generate_jwt(user_id: &str, permissions: Vec<String>) -> Result<String, StatusCode> {
encode_access_token(user_id.to_string(), user_id.to_string(), permissions)
}