diff options
Diffstat (limited to 'src/login')
| -rw-r--r-- | src/login/app.rs | 13 | ||||
| -rw-r--r-- | src/login/mod.rs | 1 | ||||
| -rw-r--r-- | src/login/routes.rs | 90 | ||||
| -rw-r--r-- | src/login/routes/test/boot.rs | 14 | ||||
| -rw-r--r-- | src/login/routes/test/mod.rs | 1 |
5 files changed, 3 insertions, 116 deletions
diff --git a/src/login/app.rs b/src/login/app.rs index 15adb31..4f60b89 100644 --- a/src/login/app.rs +++ b/src/login/app.rs @@ -1,8 +1,5 @@ use sqlx::sqlite::SqlitePool; -use crate::event::{repo::Provider as _, Sequence}; - -#[cfg(test)] use super::{repo::Provider as _, Login, Password}; pub struct Logins<'a> { @@ -14,15 +11,6 @@ impl<'a> Logins<'a> { Self { db } } - pub async fn boot_point(&self) -> Result<Sequence, sqlx::Error> { - let mut tx = self.db.begin().await?; - let sequence = tx.sequence().current().await?; - tx.commit().await?; - - Ok(sequence) - } - - #[cfg(test)] pub async fn create(&self, name: &str, password: &Password) -> Result<Login, CreateError> { let password_hash = password.hash()?; @@ -34,7 +22,6 @@ impl<'a> Logins<'a> { } } -#[cfg(test)] #[derive(Debug, thiserror::Error)] #[error(transparent)] pub enum CreateError { diff --git a/src/login/mod.rs b/src/login/mod.rs index 65e3ada..f272f80 100644 --- a/src/login/mod.rs +++ b/src/login/mod.rs @@ -1,3 +1,4 @@ +#[cfg(test)] pub mod app; pub mod extract; mod id; diff --git a/src/login/routes.rs b/src/login/routes.rs index b0e3fee..6579ae6 100644 --- a/src/login/routes.rs +++ b/src/login/routes.rs @@ -2,19 +2,15 @@ use axum::{ extract::{Json, State}, http::StatusCode, response::{IntoResponse, Response}, - routing::{get, post}, + routing::post, Router, }; -use futures::stream::{self, StreamExt as _, TryStreamExt as _}; use crate::{ app::App, - channel::Channel, clock::RequestedAt, error::{Internal, Unauthorized}, - event::Instant, - login::{Login, Password}, - message::{self, Message}, + login::Password, token::{app, extract::IdentityToken}, }; @@ -23,92 +19,10 @@ mod test; pub fn router() -> Router<App> { Router::new() - .route("/api/boot", get(boot)) .route("/api/auth/login", post(on_login)) .route("/api/auth/logout", post(on_logout)) } -async fn boot(State(app): State<App>, login: Login) -> Result<Boot, Internal> { - let resume_point = app.logins().boot_point().await?; - let channels = app.channels().all(resume_point.into()).await?; - let channels = stream::iter(channels) - .then(|channel| async { - app.messages() - .in_channel(&channel.id, resume_point.into()) - .await - .map(|messages| BootChannel::new(channel, messages)) - }) - .try_collect() - .await?; - - Ok(Boot { - login, - resume_point: resume_point.to_string(), - channels, - }) -} - -#[derive(serde::Serialize)] -struct Boot { - login: Login, - resume_point: String, - channels: Vec<BootChannel>, -} - -#[derive(serde::Serialize)] -struct BootChannel { - #[serde(flatten)] - channel: Channel, - messages: Vec<BootMessage>, -} - -impl BootChannel { - fn new(channel: Channel, messages: impl IntoIterator<Item = Message>) -> Self { - Self { - channel, - messages: messages.into_iter().map(BootMessage::from).collect(), - } - } -} - -#[derive(serde::Serialize)] -struct BootMessage { - #[serde(flatten)] - sent: Instant, - sender: Login, - message: BootMessageBody, -} - -impl From<Message> for BootMessage { - fn from(message: Message) -> Self { - let Message { - sent, - channel: _, - sender, - id, - body, - } = message; - - Self { - sent, - sender, - message: BootMessageBody { id, body }, - } - } -} - -#[derive(serde::Serialize)] -struct BootMessageBody { - id: message::Id, - body: String, -} - -impl IntoResponse for Boot { - fn into_response(self) -> Response { - Json(self).into_response() - } -} - #[derive(serde::Deserialize)] struct LoginRequest { name: String, diff --git a/src/login/routes/test/boot.rs b/src/login/routes/test/boot.rs deleted file mode 100644 index 9655354..0000000 --- a/src/login/routes/test/boot.rs +++ /dev/null @@ -1,14 +0,0 @@ -use axum::extract::State; - -use crate::{login::routes, test::fixtures}; - -#[tokio::test] -async fn returns_identity() { - let app = fixtures::scratch_app().await; - let login = fixtures::login::fictitious(); - let response = routes::boot(State(app), login.clone()) - .await - .expect("boot always succeeds"); - - assert_eq!(login, response.login); -} diff --git a/src/login/routes/test/mod.rs b/src/login/routes/test/mod.rs index 7693755..90522c4 100644 --- a/src/login/routes/test/mod.rs +++ b/src/login/routes/test/mod.rs @@ -1,3 +1,2 @@ -mod boot; mod login; mod logout; |
