summaryrefslogtreecommitdiff
path: root/src/login
diff options
context:
space:
mode:
Diffstat (limited to 'src/login')
-rw-r--r--src/login/app.rs13
-rw-r--r--src/login/mod.rs1
-rw-r--r--src/login/routes.rs90
-rw-r--r--src/login/routes/test/boot.rs14
-rw-r--r--src/login/routes/test/mod.rs1
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;