diff options
| author | ojacobson <ojacobson@noreply.codeberg.org> | 2025-06-21 04:22:52 +0200 |
|---|---|---|
| committer | ojacobson <ojacobson@noreply.codeberg.org> | 2025-06-21 04:22:52 +0200 |
| commit | cd1dc0dab4b46bc5712070812192d5ce34071470 (patch) | |
| tree | c94f5a42f7e734b81892c1289a1d2b566706ba7c /src/user | |
| parent | d84ba5cd09b713fac2f193d5c05af7415ea6742d (diff) | |
| parent | 4e3d5ccac99b24934c972e088cd7eb02bb95df06 (diff) | |
Reorganize and consolidate HTTP routes.
HTTP routes are now defined in a single, unified module, pulling them out of the topical modules they were formerly part of.
This is intended to improve the navigability of the codebase. Previously, finding the handler corresponding to a specific endpoint required prior familiarity, though in practice you could usually guess from topic area. Now, all routes are defined in one place; if you know the path, you can read down the list to find the handler.
Handlers themselves live with the domain they are most appropriately "part of," generally (in this version, universally) in a `handlers` submodule. The handlers themselves have been flattened down; rather than representing a path and a method, they now represent a named operation (which is suspiciously similar to the path in most cases). This means that we no longer have constructs like `crate::ui::routes::ch::channel` - it's now `crate::ui::handlers::channel` instead.
## Disclaimer
I Solemnly Swear I Didn't Change Any Handlers.
## Prior art
I've inadvertently reinvented Django's `urls.py` convention, and I've opted to lean into that.
Merges flatter-routes-reorg into main.
Diffstat (limited to 'src/user')
| -rw-r--r-- | src/user/handlers/login/mod.rs (renamed from src/user/routes/login/post.rs) | 3 | ||||
| -rw-r--r-- | src/user/handlers/login/test.rs (renamed from src/user/routes/login/test.rs) | 21 | ||||
| -rw-r--r-- | src/user/handlers/logout/mod.rs (renamed from src/user/routes/logout/post.rs) | 3 | ||||
| -rw-r--r-- | src/user/handlers/logout/test.rs (renamed from src/user/routes/logout/test.rs) | 12 | ||||
| -rw-r--r-- | src/user/handlers/mod.rs | 7 | ||||
| -rw-r--r-- | src/user/handlers/password/mod.rs (renamed from src/user/routes/password/post.rs) | 3 | ||||
| -rw-r--r-- | src/user/handlers/password/test.rs (renamed from src/user/routes/password/test.rs) | 5 | ||||
| -rw-r--r-- | src/user/mod.rs | 6 | ||||
| -rw-r--r-- | src/user/routes/login/mod.rs | 4 | ||||
| -rw-r--r-- | src/user/routes/logout/mod.rs | 4 | ||||
| -rw-r--r-- | src/user/routes/mod.rs | 14 | ||||
| -rw-r--r-- | src/user/routes/password/mod.rs | 4 |
12 files changed, 36 insertions, 50 deletions
diff --git a/src/user/routes/login/post.rs b/src/user/handlers/login/mod.rs index 39f9eea..e80377e 100644 --- a/src/user/routes/login/post.rs +++ b/src/user/handlers/login/mod.rs @@ -13,6 +13,9 @@ use crate::{ user::{Password, User}, }; +#[cfg(test)] +mod test; + pub async fn handler( State(app): State<App>, RequestedAt(now): RequestedAt, diff --git a/src/user/routes/login/test.rs b/src/user/handlers/login/test.rs index d2e7ee2..b8f24f6 100644 --- a/src/user/routes/login/test.rs +++ b/src/user/handlers/login/test.rs @@ -1,6 +1,5 @@ use axum::extract::{Json, State}; -use super::post; use crate::{test::fixtures, token::app}; #[tokio::test] @@ -14,12 +13,12 @@ async fn correct_credentials() { let identity = fixtures::cookie::not_logged_in(); let logged_in_at = fixtures::now(); - let request = post::Request { + let request = super::Request { name: name.clone(), password, }; let (identity, Json(response)) = - post::handler(State(app.clone()), logged_in_at, identity, Json(request)) + super::handler(State(app.clone()), logged_in_at, identity, Json(request)) .await .expect("logged in with valid credentials"); @@ -53,12 +52,12 @@ async fn invalid_name() { let identity = fixtures::cookie::not_logged_in(); let logged_in_at = fixtures::now(); let (name, password) = fixtures::user::propose(); - let request = post::Request { + let request = super::Request { name: name.clone(), password, }; - let post::Error(error) = - post::handler(State(app.clone()), logged_in_at, identity, Json(request)) + let super::Error(error) = + super::handler(State(app.clone()), logged_in_at, identity, Json(request)) .await .expect_err("logged in with an incorrect password fails"); @@ -78,12 +77,12 @@ async fn incorrect_password() { let logged_in_at = fixtures::now(); let identity = fixtures::cookie::not_logged_in(); - let request = post::Request { + let request = super::Request { name: login.name, password: fixtures::user::propose_password(), }; - let post::Error(error) = - post::handler(State(app.clone()), logged_in_at, identity, Json(request)) + let super::Error(error) = + super::handler(State(app.clone()), logged_in_at, identity, Json(request)) .await .expect_err("logged in with an incorrect password"); @@ -103,8 +102,8 @@ async fn token_expires() { let logged_in_at = fixtures::ancient(); let identity = fixtures::cookie::not_logged_in(); - let request = post::Request { name, password }; - let (identity, _) = post::handler(State(app.clone()), logged_in_at, identity, Json(request)) + let request = super::Request { name, password }; + let (identity, _) = super::handler(State(app.clone()), logged_in_at, identity, Json(request)) .await .expect("logged in with valid credentials"); let secret = identity.secret().expect("logged in with valid credentials"); diff --git a/src/user/routes/logout/post.rs b/src/user/handlers/logout/mod.rs index 0ac663e..45a376a 100644 --- a/src/user/routes/logout/post.rs +++ b/src/user/handlers/logout/mod.rs @@ -11,6 +11,9 @@ use crate::{ token::{app, extract::IdentityCookie}, }; +#[cfg(test)] +mod test; + pub async fn handler( State(app): State<App>, RequestedAt(now): RequestedAt, diff --git a/src/user/routes/logout/test.rs b/src/user/handlers/logout/test.rs index ce93760..8dc4636 100644 --- a/src/user/routes/logout/test.rs +++ b/src/user/handlers/logout/test.rs @@ -3,7 +3,6 @@ use axum::{ http::StatusCode, }; -use super::post; use crate::{test::fixtures, token::app}; #[tokio::test] @@ -18,7 +17,7 @@ async fn successful() { // Call the endpoint - let (response_identity, response_status) = post::handler( + let (response_identity, response_status) = super::handler( State(app.clone()), fixtures::now(), identity.clone(), @@ -50,7 +49,7 @@ async fn no_identity() { // Call the endpoint let identity = fixtures::cookie::not_logged_in(); - let (identity, status) = post::handler(State(app), fixtures::now(), identity, Json::default()) + let (identity, status) = super::handler(State(app), fixtures::now(), identity, Json::default()) .await .expect("logged out with no token succeeds"); @@ -69,9 +68,10 @@ async fn invalid_token() { // Call the endpoint let identity = fixtures::cookie::fictitious(); - let post::Error(error) = post::handler(State(app), fixtures::now(), identity, Json::default()) - .await - .expect_err("logged out with an invalid token fails"); + let super::Error(error) = + super::handler(State(app), fixtures::now(), identity, Json::default()) + .await + .expect_err("logged out with an invalid token fails"); // Verify the return value's basic structure diff --git a/src/user/handlers/mod.rs b/src/user/handlers/mod.rs new file mode 100644 index 0000000..5cadbb5 --- /dev/null +++ b/src/user/handlers/mod.rs @@ -0,0 +1,7 @@ +mod login; +mod logout; +mod password; + +pub use login::handler as login; +pub use logout::handler as logout; +pub use password::handler as change_password; diff --git a/src/user/routes/password/post.rs b/src/user/handlers/password/mod.rs index 296f6cd..9158325 100644 --- a/src/user/routes/password/post.rs +++ b/src/user/handlers/password/mod.rs @@ -15,6 +15,9 @@ use crate::{ user::{Password, User}, }; +#[cfg(test)] +mod test; + pub async fn handler( State(app): State<App>, RequestedAt(now): RequestedAt, diff --git a/src/user/routes/password/test.rs b/src/user/handlers/password/test.rs index f977327..42e41d8 100644 --- a/src/user/routes/password/test.rs +++ b/src/user/handlers/password/test.rs @@ -1,6 +1,5 @@ use axum::extract::{Json, State}; -use super::post; use crate::{ test::fixtures, token::app::{LoginError, ValidateError}, @@ -17,11 +16,11 @@ async fn password_change() { // Call the endpoint let (name, password) = creds; let to = fixtures::user::propose_password(); - let request = post::Request { + let request = super::Request { password: password.clone(), to: to.clone(), }; - let (new_cookie, Json(response)) = post::handler( + let (new_cookie, Json(response)) = super::handler( State(app.clone()), fixtures::now(), identity.clone(), diff --git a/src/user/mod.rs b/src/user/mod.rs index f4c66ab..44e1633 100644 --- a/src/user/mod.rs +++ b/src/user/mod.rs @@ -2,14 +2,12 @@ pub mod app; pub mod create; pub mod event; +pub mod handlers; mod history; mod id; pub mod password; pub mod repo; -mod routes; mod snapshot; mod validate; -pub use self::{ - event::Event, history::History, id::Id, password::Password, routes::router, snapshot::User, -}; +pub use self::{event::Event, history::History, id::Id, password::Password, snapshot::User}; diff --git a/src/user/routes/login/mod.rs b/src/user/routes/login/mod.rs deleted file mode 100644 index 36b384e..0000000 --- a/src/user/routes/login/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod post; - -#[cfg(test)] -mod test; diff --git a/src/user/routes/logout/mod.rs b/src/user/routes/logout/mod.rs deleted file mode 100644 index 36b384e..0000000 --- a/src/user/routes/logout/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod post; - -#[cfg(test)] -mod test; diff --git a/src/user/routes/mod.rs b/src/user/routes/mod.rs deleted file mode 100644 index ade96cb..0000000 --- a/src/user/routes/mod.rs +++ /dev/null @@ -1,14 +0,0 @@ -use axum::{Router, routing::post}; - -use crate::app::App; - -mod login; -mod logout; -mod password; - -pub fn router() -> Router<App> { - Router::new() - .route("/api/password", post(password::post::handler)) - .route("/api/auth/login", post(login::post::handler)) - .route("/api/auth/logout", post(logout::post::handler)) -} diff --git a/src/user/routes/password/mod.rs b/src/user/routes/password/mod.rs deleted file mode 100644 index 36b384e..0000000 --- a/src/user/routes/password/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod post; - -#[cfg(test)] -mod test; |
