aboutsummaryrefslogtreecommitdiffstats
path: root/src/server/routes
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/routes')
-rw-r--r--src/server/routes/auth/discord.rs11
-rw-r--r--src/server/routes/auth/mod.rs59
-rw-r--r--src/server/routes/mod.rs49
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!(&params);
+ 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);
+ }
+}