diff options
author | Kjetil Orbekk <kj@orbekk.com> | 2022-10-07 21:31:21 -0400 |
---|---|---|
committer | Kjetil Orbekk <kj@orbekk.com> | 2022-10-07 21:31:21 -0400 |
commit | ba57f14611b3a35bc08f01050779f1b4c9fc6090 (patch) | |
tree | 78fd8eda7686210d58c26054408e94279a5a08a0 /server/src/main.rs | |
parent | 262471eeed510e36026b17e0ff1b070d88753417 (diff) |
Add url encoded cookie
Diffstat (limited to 'server/src/main.rs')
-rw-r--r-- | server/src/main.rs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/server/src/main.rs b/server/src/main.rs index faa895c..d948586 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,11 +1,12 @@ -use std::{env, sync::Arc, collections::HashMap}; +use std::{collections::HashMap, env, sync::Arc}; use axum::{ body::Body, extract::{Extension, FromRequest, Query}, http::{request::Parts, Request}, + response::Redirect, routing::get, - Json, Router, response::Redirect, + Json, Router, }; use openidconnect::{ core::{CoreClient, CoreProviderMetadata, CoreResponseType}, @@ -17,10 +18,10 @@ use openidconnect::{ use protocol::UserInfo; use tower_cookies::{Cookie, CookieManagerLayer, Cookies}; use tower_http::trace::TraceLayer; -use tracing::{info, trace}; +use tracing::{debug, info, trace}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; mod auth; -use crate::auth::Authenticator; +use crate::auth::{Authenticator, EndUserId}; struct ServerContext { pub app_url: String, @@ -89,17 +90,24 @@ async fn user_info() -> Json<Option<UserInfo>> { async fn login_callback( cookies: Cookies, Query(params): Query<HashMap<String, String>>, + extension: ContextExtension, ) -> () { + let cookie = cookies.get("user-id").unwrap(); + let user_id: EndUserId = + serde_json::from_str(&urlencoding::decode(cookie.value()).unwrap()).unwrap(); + info!("cookie: {cookie:?}"); info!("params: {params:?}"); + extension.authenticator.authenticate(user_id, params).await; () } async fn login(cookies: Cookies, extension: ContextExtension) -> Redirect { let (user_id, auth_url) = extension.authenticator.get_login_url().await; - trace!("Creating auth url for {user_id:?}"); + info!("Creating auth url for {user_id:?}"); + let user_id = serde_json::to_string(&user_id).unwrap(); cookies.add(Cookie::new( "user-id", - serde_json::to_string(&user_id).unwrap(), + urlencoding::encode(&user_id).to_string(), )); Redirect::temporary(auth_url.as_str()) } |