From 4a091f616bcc1484a7ffbe5f39b90e31780d1cc1 Mon Sep 17 00:00:00 2001 From: Fu Zi Xiang Date: Wed, 22 Nov 2023 13:53:52 +0800 Subject: [PATCH] fix: add scheme to email confirmation redirect url --- admin_frontend/src/web_api.rs | 52 +++++++++++++++++------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/admin_frontend/src/web_api.rs b/admin_frontend/src/web_api.rs index 4fe9a14e..71bbed5c 100644 --- a/admin_frontend/src/web_api.rs +++ b/admin_frontend/src/web_api.rs @@ -103,10 +103,7 @@ pub async fn post_oauth_login_handler( header_map: HeaderMap, Path(provider): Path, ) -> Result, WebApiError<'static>> { - let scheme = get_header_value_or_default(&header_map, "x-scheme", "http"); - let host = get_header_value_or_default(&header_map, "host", "localhost"); - - let base_url = format!("{}://{}", scheme, host); + let base_url = get_base_url(&header_map); let redirect_uri = format!("{}/web/oauth_login_redirect", base_url); let oauth_url = format!( @@ -116,23 +113,6 @@ pub async fn post_oauth_login_handler( Ok(oauth_url.into()) } -fn get_header_value_or_default<'a>( - header_map: &'a HeaderMap, - header_name: &str, - default: &'a str, -) -> &'a str { - match header_map.get(header_name) { - Some(v) => match v.to_str() { - Ok(v) => v, - Err(e) => { - tracing::error!("failed to get header value {}: {}, {:?}", header_name, e, v); - default - }, - }, - None => default, - } -} - pub async fn admin_update_user_handler( State(state): State, session: UserSession, @@ -264,11 +244,7 @@ pub async fn login_handler( .sign_up_with_referrer( ¶m.email, ¶m.password, - Some(get_header_value_or_default( - &header_map, - "host", - "localhost", - )), + Some(&get_base_url(&header_map)), ) .await; @@ -347,3 +323,27 @@ async fn session_login( ().into(), )) } + +fn get_base_url(header_map: &HeaderMap) -> String { + let scheme = get_header_value_or_default(header_map, "x-scheme", "http"); + let host = get_header_value_or_default(header_map, "host", "localhost"); + + format!("{}://{}", scheme, host) +} + +fn get_header_value_or_default<'a>( + header_map: &'a HeaderMap, + header_name: &str, + default: &'a str, +) -> &'a str { + match header_map.get(header_name) { + Some(v) => match v.to_str() { + Ok(v) => v, + Err(e) => { + tracing::error!("failed to get header value {}: {}, {:?}", header_name, e, v); + default + }, + }, + None => default, + } +}