From fd16e78fb1da2f7e23909721c208b174fd7d9d2c Mon Sep 17 00:00:00 2001
From: Philippe Loctaux
Date: Fri, 17 Mar 2023 23:30:12 +0100
Subject: [PATCH] ezidam: oauth: split in multiple mods
---
crates/ezidam/src/routes/oauth.rs | 182 ++------------------
crates/ezidam/src/routes/oauth/authorize.rs | 167 ++++++++++++++++++
2 files changed, 179 insertions(+), 170 deletions(-)
create mode 100644 crates/ezidam/src/routes/oauth/authorize.rs
diff --git a/crates/ezidam/src/routes/oauth.rs b/crates/ezidam/src/routes/oauth.rs
index 4d4f8f9..991c038 100644
--- a/crates/ezidam/src/routes/oauth.rs
+++ b/crates/ezidam/src/routes/oauth.rs
@@ -1,13 +1,17 @@
-use super::prelude::*;
-use apps::App;
-use authorization_codes::AuthorizationCodes;
-use hash::SecretString;
-use rocket::{get, post};
-use settings::Settings;
-use users::User;
+use authorize::*;
+use redirect::*;
+use rocket::{routes, Route};
+
+mod authorize;
+mod redirect;
pub fn routes() -> Vec {
- routes![authorize_page, authorize, authorize_ezidam]
+ routes![
+ authorize_page,
+ authorize_form,
+ authorize_ezidam,
+ redirect_page
+ ]
}
pub mod content {
@@ -21,165 +25,3 @@ pub mod content {
pub business_name: String,
}
}
-
-// TODO: When already signed in, pass Result in existing routes directly
-
-#[get("/oauth/authorize?", rank = 2)]
-async fn authorize_page(
- mut db: Connection,
- flash: Option>,
- auth_request: AuthenticationRequest<'_>,
-) -> Result {
- let mut transaction = db.begin().await?;
-
- // Get app info
- let app = App::get_valid_app(
- &mut transaction,
- auth_request.response_type,
- auth_request.scope,
- auth_request.client_id,
- auth_request.redirect_uri,
- )
- .await?;
-
- let settings = Settings::get(&mut transaction).await?;
-
- transaction.commit().await?;
-
- // Define content
- let content = content::Authorize {
- app_name: app.label().into(),
- business_name: settings.business_name().into(),
- };
-
- Ok(flash
- .map(|flash| Page::with_flash(Page::Authorize(content.clone()), flash))
- .unwrap_or_else(|| Page::Authorize(content).into()))
-}
-
-#[get("/oauth/authorize", rank = 3)]
-async fn authorize_ezidam(mut db: Connection) -> Result {
- let mut transaction = db.begin().await?;
-
- // Get ezidam app info
- let app_id = "ezidam";
- let app = App::get_one_by_id(&mut transaction, app_id)
- .await?
- .ok_or_else(|| Error::not_found(app_id))?;
-
- transaction.commit().await?;
-
- let request = AuthenticationRequest {
- response_type: openid::CoreResponseType::Code.as_ref(),
- response_mode: ResponseMode::Query,
- scope: &openid::SupportedScopes::url_format(),
- client_id: app.id().as_ref(),
- redirect_uri: app.redirect_uri(),
- state: "TODO",
- };
- Ok(Redirect::to(uri!(authorize_page(auth_request = request))))
-}
-
-#[derive(Debug, FromForm)]
-struct Authorize<'r> {
- pub login: &'r str,
- pub password: &'r str,
-}
-
-fn flash(message: String, request: AuthenticationRequest) -> Flash {
- Flash::new(
- Redirect::to(uri!(authorize_page(auth_request = request))),
- FlashKind::Danger,
- message,
- )
-}
-
-fn invalid_form(request: AuthenticationRequest) -> Flash {
- flash("Please fill out the form".to_string(), request)
-}
-
-fn invalid_credentials(login: &str, request: AuthenticationRequest) -> Flash {
- flash(format!("Invalid credentials for {login}"), request)
-}
-
-fn user_archived(login: &str, request: AuthenticationRequest) -> Flash {
- flash(format!("User {login} is archived"), request)
-}
-
-#[post("/oauth/authorize?", data = "