Fix urlencoding for openidconnect with dioxus 0.4

This commit is contained in:
traxys 2023-08-07 20:52:54 +02:00
parent 0d900024cb
commit ccd1c8c15e
2 changed files with 17 additions and 8 deletions

View file

@ -534,17 +534,26 @@ struct OidcQuery {
#[derive(PartialEq, Props)] #[derive(PartialEq, Props)]
struct OidcProps { struct OidcProps {
token: String, info: String,
username: String,
} }
fn OidcRedirect(cx: Scope<OidcProps>) -> Element { fn OidcRedirect(cx: Scope<OidcProps>) -> Element {
let (username, token) = cx
.props
.info
.split("---")
.collect_tuple()
.expect("invalid token kind");
cx.render({ cx.render({
match LocalStorage::set( match LocalStorage::set(
"token", "token",
LoginInfo { LoginInfo {
token: cx.props.token.clone(), token: urlencoding::decode(token)
name: cx.props.username.clone(), .expect("token urldecode")
.to_string(),
name: urlencoding::decode(username)
.expect("username urldecode")
.to_string(),
}, },
) { ) {
Ok(_) => { Ok(_) => {
@ -564,8 +573,8 @@ use recipe::{RecipeCreator, RecipeList, RecipeView};
enum Route { enum Route {
#[route("/login")] #[route("/login")]
Login, Login,
#[route("/login/oidc?:token?:username")] #[route("/login/oidc/:info")]
OidcRedirect { token: String, username: String }, OidcRedirect { info: String, },
#[layout(LoginRedirect)] #[layout(LoginRedirect)]
#[route("/household_selection")] #[route("/household_selection")]

View file

@ -239,10 +239,10 @@ async fn oidc_login_finish(
let token = state.jwt_secret.0.authenticate(claims)?; let token = state.jwt_secret.0.authenticate(claims)?;
let redirect = format!( let redirect = format!(
"{}?token={}&username={}", "{}/{}---{}",
account.source_url, account.source_url,
urlencoding::encode(&token),
urlencoding::encode(&user.name), urlencoding::encode(&user.name),
urlencoding::encode(&token),
); );
Ok(Redirect::to(&redirect)) Ok(Redirect::to(&redirect))