diff options
| author | rtkay123 <dev@kanjala.com> | 2026-02-02 13:05:49 +0200 |
|---|---|---|
| committer | rtkay123 <dev@kanjala.com> | 2026-02-02 13:05:49 +0200 |
| commit | e06094f23ca861ea5ae4864d11fa8ce8b7d7aa2c (patch) | |
| tree | 27bbff5fd21711f99aaf579a76b1a0aca7869003 /src/server/routes | |
| parent | 78f61ccdf66572d7432b5b627994038479103653 (diff) | |
| download | sellershut-e06094f23ca861ea5ae4864d11fa8ce8b7d7aa2c.tar.bz2 sellershut-e06094f23ca861ea5ae4864d11fa8ce8b7d7aa2c.zip | |
feat: oauth route
Diffstat (limited to 'src/server/routes')
| -rw-r--r-- | src/server/routes/auth/discord.rs | 11 | ||||
| -rw-r--r-- | src/server/routes/auth/mod.rs | 59 | ||||
| -rw-r--r-- | src/server/routes/mod.rs | 49 |
3 files changed, 119 insertions, 0 deletions
diff --git a/src/server/routes/auth/discord.rs b/src/server/routes/auth/discord.rs new file mode 100644 index 0000000..036a35a --- /dev/null +++ b/src/server/routes/auth/discord.rs @@ -0,0 +1,11 @@ +use std::sync::Arc; + +use axum::{extract::State, response::IntoResponse}; + +use crate::server::{driver::SellershutDriver, error::AppError}; + +async fn auth( + State(client): State<Arc<dyn SellershutDriver>>, +) -> Result<impl IntoResponse, AppError> { + Ok(()) +} diff --git a/src/server/routes/auth/mod.rs b/src/server/routes/auth/mod.rs new file mode 100644 index 0000000..b80c565 --- /dev/null +++ b/src/server/routes/auth/mod.rs @@ -0,0 +1,59 @@ +use activitypub_federation::config::Data; + +use serde::Deserialize; + +#[cfg(feature = "oauth-discord")] +pub mod discord; + +#[derive(Deserialize, Debug, Clone, Copy, ToSchema)] +#[serde(rename_all = "lowercase")] +pub enum OauthProvider { + /// Discord + #[cfg(feature = "oauth-discord")] + Discord, +} + +#[derive(Deserialize, Debug, Clone, Copy, IntoParams)] +#[into_params(parameter_in = Query)] +pub struct Params { + /// Set OAuth provider name + provider: OauthProvider, +} + +use axum::{extract::Query, response::IntoResponse}; +use utoipa::{IntoParams, OpenApi, ToSchema}; + +use crate::server::{error::AppError, state::AppState}; + +pub const AUTH: &str = "AUTH"; + +#[derive(OpenApi)] +#[openapi( + tags( + (name = AUTH, description = "OAuth integration") + ), + components( + schemas(OauthProvider) + ) +)] +pub struct OAuthDoc; + +#[utoipa::path( + method(get), + path = "/auth", + params( + Params + ), + tag = AUTH, + responses( + (status = OK, description = "Routes to oauth provider for login", body = str, content_type = "text/plain") + ) +)] +#[axum::debug_handler] +pub async fn auth( + Query(params): Query<Params>, + data: Data<AppState>, +) -> Result<impl IntoResponse, AppError> { + dbg!(¶ms); + Ok(String::default()) +} diff --git a/src/server/routes/mod.rs b/src/server/routes/mod.rs new file mode 100644 index 0000000..edd6fdf --- /dev/null +++ b/src/server/routes/mod.rs @@ -0,0 +1,49 @@ +#[cfg(feature = "oauth")] +pub mod auth; + +pub(super) const HEALTH: &str = "HEALTH"; + +#[utoipa::path( + method(get), + path = "/", + tag = HEALTH, + responses( + (status = OK, description = "Checks if the server is running", body = str, content_type = "text/plain") + ) +)] +pub async fn health_check() -> impl axum::response::IntoResponse { + let name = env!("CARGO_PKG_NAME"); + let version = env!("CARGO_PKG_VERSION"); + + format!("{name} v{version} is live") +} + +#[cfg(test)] +mod tests { + use crate::{ + config::Config, + server::{self, bootstrap::TestDriver, state::AppState}, + }; + + use axum::{ + body::Body, + http::{Request, StatusCode}, + }; + use tower::ServiceExt; + + #[tokio::test] + async fn health_check() { + let config = Config::default(); + let driver = TestDriver::default(); + let state = AppState::new(&config, driver).await.unwrap(); + + let app = server::router(&config, state).await.unwrap(); + + let response = app + .oneshot(Request::builder().uri("/").body(Body::empty()).unwrap()) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + } +} |
