summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-08-24 15:35:39 -0400
committerOwen Jacobson <owen@grimoire.ca>2025-08-26 01:06:48 -0400
commit218d6dbb56727721d19019c8514f5e4395596e98 (patch)
tree9790c8433e169c7345717538ac7a54d187579b0b /src
parentc52e24f17ed615b2e2dd55a285eb272014a2ccbf (diff)
Split the `user` table into an authentication portion and a chat portion.
We'll be building separate entities around this in future commits, to better separate the authentication data (non-synchronized and indeed "not public") from the chat data (synchronized and public).
Diffstat (limited to 'src')
-rw-r--r--src/invite/repo.rs3
-rw-r--r--src/token/repo/auth.rs28
-rw-r--r--src/token/repo/token.rs17
-rw-r--r--src/user/repo.rs47
4 files changed, 55 insertions, 40 deletions
diff --git a/src/invite/repo.rs b/src/invite/repo.rs
index 7cfa18e..934b0ce 100644
--- a/src/invite/repo.rs
+++ b/src/invite/repo.rs
@@ -71,10 +71,11 @@ impl Invites<'_> {
select
invite.id as "invite_id: Id",
issuer.id as "issuer_id: user::Id",
- issuer.display_name as "issuer_name: nfc::String",
+ issuer_login.display_name as "issuer_name: nfc::String",
invite.issued_at as "invite_issued_at: DateTime"
from invite
join user as issuer on (invite.issuer = issuer.id)
+ join login as issuer_login on (issuer.id = issuer_login.id)
where invite.id = $1
"#,
invite,
diff --git a/src/token/repo/auth.rs b/src/token/repo/auth.rs
index 600855d..a42fa1a 100644
--- a/src/token/repo/auth.rs
+++ b/src/token/repo/auth.rs
@@ -28,13 +28,14 @@ impl Auth<'_> {
r#"
select
id as "id: user::Id",
- display_name as "display_name: String",
- canonical_name as "canonical_name: String",
- created_sequence as "created_sequence: Sequence",
- created_at as "created_at: DateTime",
- password_hash as "password_hash: StoredHash"
+ login.display_name as "display_name: String",
+ login.canonical_name as "canonical_name: String",
+ user.created_sequence as "created_sequence: Sequence",
+ user.created_at as "created_at: DateTime",
+ login.password as "password: StoredHash"
from user
- where canonical_name = $1
+ join login using (id)
+ where login.canonical_name = $1
"#,
name,
)
@@ -49,7 +50,7 @@ impl Auth<'_> {
created: Instant::new(row.created_at, row.created_sequence),
};
- Ok((login, row.password_hash))
+ Ok((login, row.password))
}
pub async fn for_user(&mut self, user: &User) -> Result<(History, StoredHash), LoadError> {
@@ -57,12 +58,13 @@ impl Auth<'_> {
r#"
select
id as "id: user::Id",
- display_name as "display_name: String",
- canonical_name as "canonical_name: String",
- created_sequence as "created_sequence: Sequence",
- created_at as "created_at: DateTime",
- password_hash as "password_hash: StoredHash"
+ login.display_name as "display_name: String",
+ login.canonical_name as "canonical_name: String",
+ user.created_sequence as "created_sequence: Sequence",
+ user.created_at as "created_at: DateTime",
+ login.password as "password: StoredHash"
from user
+ join login using (id)
where id = $1
"#,
user.id,
@@ -78,7 +80,7 @@ impl Auth<'_> {
created: Instant::new(row.created_at, row.created_sequence),
};
- Ok((user, row.password_hash))
+ Ok((user, row.password))
}
}
diff --git a/src/token/repo/token.rs b/src/token/repo/token.rs
index 7ac4ac5..5368fee 100644
--- a/src/token/repo/token.rs
+++ b/src/token/repo/token.rs
@@ -37,7 +37,7 @@ impl Tokens<'_> {
let secret = sqlx::query_scalar!(
r#"
insert
- into token (id, secret, user, issued_at, last_used_at)
+ into token (id, secret, login, issued_at, last_used_at)
values ($1, $2, $3, $4, $4)
returning secret as "secret!: Secret"
"#,
@@ -91,7 +91,7 @@ impl Tokens<'_> {
r#"
delete
from token
- where user = $1
+ where login = $1
returning id as "id: Id"
"#,
user,
@@ -139,12 +139,12 @@ impl Tokens<'_> {
where secret = $2
returning
id as "token: Id",
- user as "user: user::Id"
+ login as "login: user::Id"
"#,
used_at,
secret,
)
- .map(|row| (row.token, row.user))
+ .map(|row| (row.token, row.login))
.fetch_one(&mut *self.0)
.await?;
@@ -152,11 +152,12 @@ impl Tokens<'_> {
r#"
select
id as "id: user::Id",
- display_name as "display_name: String",
- canonical_name as "canonical_name: String",
- created_sequence as "created_sequence: Sequence",
- created_at as "created_at: DateTime"
+ login.display_name as "display_name: String",
+ login.canonical_name as "canonical_name: String",
+ user.created_sequence as "created_sequence: Sequence",
+ user.created_at as "created_at: DateTime"
from user
+ join login using (id)
where id = $1
"#,
user,
diff --git a/src/user/repo.rs b/src/user/repo.rs
index 0f67e9a..bfb603d 100644
--- a/src/user/repo.rs
+++ b/src/user/repo.rs
@@ -25,7 +25,7 @@ impl Users<'_> {
pub async fn create(
&mut self,
name: &Name,
- password_hash: &StoredHash,
+ password: &StoredHash,
created: &Instant,
) -> Result<History, sqlx::Error> {
let id = Id::generate();
@@ -34,14 +34,23 @@ impl Users<'_> {
sqlx::query!(
r#"
- insert
- into user (id, display_name, canonical_name, password_hash, created_sequence, created_at)
- values ($1, $2, $3, $4, $5, $6)
+ insert into login (id, display_name, canonical_name, password)
+ values ($1, $2, $3, $4)
"#,
id,
display_name,
canonical_name,
- password_hash,
+ password,
+ )
+ .execute(&mut *self.0)
+ .await?;
+
+ sqlx::query!(
+ r#"
+ insert into user (id, created_sequence, created_at)
+ values ($1, $2, $3)
+ "#,
+ id,
created.sequence,
created.at,
)
@@ -68,8 +77,8 @@ impl Users<'_> {
sqlx::query_scalar!(
r#"
- update user
- set password_hash = $1
+ update login
+ set password = $1
where id = $2
returning id as "id: Id"
"#,
@@ -87,13 +96,14 @@ impl Users<'_> {
r#"
select
id as "id: Id",
- display_name as "display_name: String",
- canonical_name as "canonical_name: String",
- created_sequence as "created_sequence: Sequence",
- created_at as "created_at: DateTime"
+ login.display_name as "display_name: String",
+ login.canonical_name as "canonical_name: String",
+ user.created_sequence as "created_sequence: Sequence",
+ user.created_at as "created_at: DateTime"
from user
- where created_sequence <= $1
- order by canonical_name
+ join login using (id)
+ where user.created_sequence <= $1
+ order by canonical_name
"#,
resume_at,
)
@@ -119,12 +129,13 @@ impl Users<'_> {
r#"
select
id as "id: Id",
- display_name as "display_name: String",
- canonical_name as "canonical_name: String",
- created_sequence as "created_sequence: Sequence",
- created_at as "created_at: DateTime"
+ login.display_name as "display_name: String",
+ login.canonical_name as "canonical_name: String",
+ user.created_sequence as "created_sequence: Sequence",
+ user.created_at as "created_at: DateTime"
from user
- where created_sequence > $1
+ join login using (id)
+ where user.created_sequence > $1
"#,
resume_at,
)