From 436511846130ae5d8a058e031d9c8ad0bcb002aa Mon Sep 17 00:00:00 2001 From: mrw1593 Date: Mon, 29 May 2023 15:56:27 -0400 Subject: Create stubbed endpoints for authorization --- src/api/mod.rs | 9 ++++++--- src/api/oauth.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++------------ src/api/ops.rs | 13 +----------- 3 files changed, 55 insertions(+), 27 deletions(-) (limited to 'src/api') diff --git a/src/api/mod.rs b/src/api/mod.rs index 3d74be8..0ab4037 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -1,10 +1,13 @@ +mod clients; mod liveops; +mod oauth; mod ops; mod users; -mod oauth; -mod clients; +pub use clients::service as clients; pub use liveops::service as liveops; +pub use oauth::service as oauth; pub use ops::service as ops; pub use users::service as users; -pub use clients::service as clients; + +pub use oauth::AuthorizationParameters; diff --git a/src/api/oauth.rs b/src/api/oauth.rs index 9e0e5c6..9916053 100644 --- a/src/api/oauth.rs +++ b/src/api/oauth.rs @@ -1,24 +1,60 @@ -use std::collections::HashMap; +use std::str::FromStr; -use actix_web::{web, HttpResponse}; -use serde::Deserialize; +use actix_web::{get, post, web, HttpResponse, Scope}; +use serde::{Deserialize, Serialize}; +use sqlx::MySqlPool; +use tera::Tera; +use unic_langid::subtags::Language; use url::Url; -use uuid::Uuid; -#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)] +use crate::resources::{languages, templates}; +use crate::services::db; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] enum ResponseType { Code, Token, } -#[derive(Debug, Clone, Deserialize)] -struct AuthorizationParameters { +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct AuthorizationParameters { response_type: ResponseType, - client_id: Uuid, - redirect_uri: Url, - state: Box, + redirect_uri: Option, +} + +#[derive(Debug, Clone, Deserialize)] +struct AuthorizeCredentials { + username: Box, + password: Box, +} + +#[post("/authorize")] +async fn authorize( + query: web::Query, + credentials: web::Form, +) -> HttpResponse { + // TODO check that the URI is valid + todo!() +} + +#[get("/authorize")] +async fn authorize_page( + db: web::Data, + tera: web::Data, + translations: web::Data, + query: web::Query, +) -> HttpResponse { + // TODO find a better way of doing languages + // TODO check that the URI is valid + let language = Language::from_str("en").unwrap(); + let page = + templates::login_page(&tera, &query, language, translations.get_ref().clone()).unwrap(); + HttpResponse::Ok().content_type("text/html").body(page) +} - #[serde(flatten)] - additional_parameters: HashMap, Box>, +pub fn service() -> Scope { + web::scope("/oauth") + .service(authorize_page) + .service(authorize) } diff --git a/src/api/ops.rs b/src/api/ops.rs index d947e64..555bb1b 100644 --- a/src/api/ops.rs +++ b/src/api/ops.rs @@ -65,17 +65,6 @@ async fn login( Ok(response) } -#[get("/login")] -async fn login_page( - tera: web::Data, - translations: web::Data, -) -> HttpResponse { - // TODO find a better way of doing this - let language = Language::from_str("en").unwrap(); - let page = templates::login_page(&tera, language, translations.get_ref().clone()).unwrap(); - HttpResponse::Ok().content_type("text/html").body(page) -} - pub fn service() -> Scope { - web::scope("").service(login).service(login_page) + web::scope("").service(login) } -- cgit v1.2.3