From 91a0deb21e755620845ed9ef1e6cb763cd6a9d78 Mon Sep 17 00:00:00 2001 From: Alex Martens Date: Sat, 8 Feb 2025 16:30:39 -0800 Subject: [PATCH] Tolerate missing username --- src/views.rs | 14 +++++--------- templates/index.html | 4 ++-- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/views.rs b/src/views.rs index dc82eaa..09a0e58 100644 --- a/src/views.rs +++ b/src/views.rs @@ -21,7 +21,7 @@ use url::Url; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct User { - preferred_username: String, + username: Option, roles: Vec, } @@ -408,11 +408,10 @@ async fn fallible_callback( ) .context("Failed to validate access token")?; - let preferred_username: String = claims + let username: Option = claims .preferred_username() - .map(|username| username.as_str()) - .context("OIDC server did not provide preferred_username")? - .to_string(); + .map(|username| username.to_string()) + .or_else(|| claims.email().map(|email| email.to_string())); let maybe_roles_at: Option<&serde_json::Value> = value_at_path(&access_token.claims, &state.roles_path); @@ -439,10 +438,7 @@ async fn fallible_callback( maybe_roles_at.and_then(to_string_array).unwrap_or_default() }; - let user: User = User { - preferred_username, - roles, - }; + let user: User = User { username, roles }; session .insert(USER_KEY, user.clone()) diff --git a/templates/index.html b/templates/index.html index 2d2882e..8f01624 100644 --- a/templates/index.html +++ b/templates/index.html @@ -21,9 +21,9 @@

{{ title }}

{% else %}

No pages to display

+ {% endif %} {% if let Some(username) = user.username %} +

You are signed in as {{ username }}.

{% endif %} - -

You are signed in as {{ user.preferred_username }}.

Logout {% else %} Login to view documents...