Private
Public Access
1
0

fix: cast auth_provider text to enum type in SSO callback SQL queries
All checks were successful
CI Pipeline / Rust Format Check (push) Successful in 4s
CI Pipeline / Clippy Lints (push) Successful in 52s
CI Pipeline / Rust Unit Tests (push) Successful in 1m12s
CI Pipeline / Security Audit (push) Successful in 4s
CI Pipeline / Frontend Lint & Type Check (push) Successful in 13s
CI Pipeline / Build .deb & Release (push) Has been skipped

This commit is contained in:
2026-05-13 19:16:49 +00:00
parent 83a0c29f3d
commit 31cdeda724

View File

@ -419,7 +419,7 @@ async fn sso_callback(
// First try exact match: email AND auth_provider // First try exact match: email AND auth_provider
let user_opt: Option<DbUserForSso> = match sqlx::query_as( let user_opt: Option<DbUserForSso> = match sqlx::query_as(
r#"SELECT id, username, display_name, role, is_active, mfa_enabled r#"SELECT id, username, display_name, role, is_active, mfa_enabled
FROM users WHERE email = $1 AND auth_provider = $2"#, FROM users WHERE email = $1 AND auth_provider = $2::auth_provider"#,
) )
.bind(&email) .bind(&email)
.bind(auth_provider) .bind(auth_provider)
@ -463,7 +463,7 @@ async fn sso_callback(
// Link existing local user to SSO provider // Link existing local user to SSO provider
tracing::info!(user_id = %existing.id, "Linking existing user to SSO provider"); tracing::info!(user_id = %existing.id, "Linking existing user to SSO provider");
if let Err(e) = sqlx::query( if let Err(e) = sqlx::query(
"UPDATE users SET auth_provider = $1, azure_oid = COALESCE(azure_oid, $2), oidc_sub = COALESCE(oidc_sub, $3) WHERE id = $4", "UPDATE users SET auth_provider = $1::auth_provider, azure_oid = COALESCE(azure_oid, $2), oidc_sub = COALESCE(oidc_sub, $3) WHERE id = $4",
) )
.bind(auth_provider) .bind(auth_provider)
.bind(if azure_oid.is_empty() { None } else { Some(azure_oid.as_str()) }) .bind(if azure_oid.is_empty() { None } else { Some(azure_oid.as_str()) })
@ -505,7 +505,7 @@ async fn sso_callback(
// No existing user - create new one // No existing user - create new one
let id: Uuid = match sqlx::query_scalar( let id: Uuid = match sqlx::query_scalar(
r#"INSERT INTO users (username, display_name, email, role, auth_provider, azure_oid, oidc_sub) r#"INSERT INTO users (username, display_name, email, role, auth_provider, azure_oid, oidc_sub)
VALUES ($1, $2, $3, 'operator', $4, $5, $6) VALUES ($1, $2, $3, 'operator', $4::auth_provider, $5, $6)
RETURNING id"#, RETURNING id"#,
) )
.bind(&preferred_username) .bind(&preferred_username)