diff --git a/crates/handlers/src/oauth2/device/link.rs b/crates/handlers/src/oauth2/device/link.rs index 4525ccaf8..7d8ffc5eb 100644 --- a/crates/handlers/src/oauth2/device/link.rs +++ b/crates/handlers/src/oauth2/device/link.rs @@ -20,7 +20,8 @@ use crate::PreferredLanguage; #[derive(Serialize, Deserialize)] pub struct Params { - code: String, + #[serde(default)] + code: Option, } #[tracing::instrument(name = "handlers.oauth2.device.link.get", skip_all, err)] @@ -31,17 +32,14 @@ pub(crate) async fn get( State(templates): State, State(url_builder): State, cookie_jar: CookieJar, - Query(query): Query>, + Query(query): Query, ) -> Result { - let mut form_state = FormState::default(); + let mut form_state = FormState::from_form(&query); // If we have a code in query, find it in the database - if let Some(params) = query { - // Save the form state so that we echo back the code - form_state = FormState::from_form(¶ms); - + if let Some(code) = &query.code { // Find the code in the database - let code = params.code.to_uppercase(); + let code = code.to_uppercase(); let grant = repo .oauth2_device_code_grant() .find_by_user_code(&code) diff --git a/crates/handlers/src/views/app.rs b/crates/handlers/src/views/app.rs index 714413c17..235dee093 100644 --- a/crates/handlers/src/views/app.rs +++ b/crates/handlers/src/views/app.rs @@ -12,16 +12,23 @@ use mas_axum_utils::{cookies::CookieJar, FancyError, SessionInfoExt}; use mas_router::{PostAuthAction, UrlBuilder}; use mas_storage::{BoxClock, BoxRepository}; use mas_templates::{AppContext, TemplateContext, Templates}; +use serde::Deserialize; use crate::{BoundActivityTracker, PreferredLanguage}; +#[derive(Deserialize)] +pub struct Params { + #[serde(default, flatten)] + action: Option, +} + #[tracing::instrument(name = "handlers.views.app.get", skip_all, err)] pub async fn get( PreferredLanguage(locale): PreferredLanguage, State(templates): State, activity_tracker: BoundActivityTracker, State(url_builder): State, - Query(action): Query>, + Query(Params { action }): Query, mut repo: BoxRepository, clock: BoxClock, cookie_jar: CookieJar,