summaryrefslogtreecommitdiff
path: root/src/invite
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-10-22 19:12:34 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-10-22 19:12:34 -0400
commit6430854352745f45281021c305b4e350bc92d535 (patch)
treec6901c22a45e36415f63efe988d4d4f2a309df81 /src/invite
parent98af8ff80da919a1126ba7c6afa65e6654b5ecde (diff)
parentdb940bacd096a33a65f29759e70ea1acf6186a67 (diff)
Merge branch 'unicode-normalization'
Diffstat (limited to 'src/invite')
-rw-r--r--src/invite/app.rs7
-rw-r--r--src/invite/mod.rs4
-rw-r--r--src/invite/repo.rs3
-rw-r--r--src/invite/routes/invite/post.rs3
4 files changed, 10 insertions, 7 deletions
diff --git a/src/invite/app.rs b/src/invite/app.rs
index ee7f74f..64ba753 100644
--- a/src/invite/app.rs
+++ b/src/invite/app.rs
@@ -7,6 +7,7 @@ use crate::{
db::{Duplicate as _, NotFound as _},
event::repo::Provider as _,
login::{repo::Provider as _, Login, Password},
+ name::Name,
token::{repo::Provider as _, Secret},
};
@@ -42,7 +43,7 @@ impl<'a> Invites<'a> {
pub async fn accept(
&self,
invite: &Id,
- name: &str,
+ name: &Name,
password: &Password,
accepted_at: &DateTime,
) -> Result<(Login, Secret), AcceptError> {
@@ -68,7 +69,7 @@ impl<'a> Invites<'a> {
.logins()
.create(name, &password_hash, &created)
.await
- .duplicate(|| AcceptError::DuplicateLogin(name.into()))?;
+ .duplicate(|| AcceptError::DuplicateLogin(name.clone()))?;
let secret = tx.tokens().issue(&login, accepted_at).await?;
tx.commit().await?;
@@ -92,7 +93,7 @@ pub enum AcceptError {
#[error("invite not found: {0}")]
NotFound(Id),
#[error("name in use: {0}")]
- DuplicateLogin(String),
+ DuplicateLogin(Name),
#[error(transparent)]
Database(#[from] sqlx::Error),
#[error(transparent)]
diff --git a/src/invite/mod.rs b/src/invite/mod.rs
index abf1c3a..d59fb9c 100644
--- a/src/invite/mod.rs
+++ b/src/invite/mod.rs
@@ -3,7 +3,7 @@ mod id;
mod repo;
mod routes;
-use crate::{clock::DateTime, login};
+use crate::{clock::DateTime, login, normalize::nfc};
pub use self::{id::Id, routes::router};
@@ -17,6 +17,6 @@ pub struct Invite {
#[derive(serde::Serialize)]
pub struct Summary {
pub id: Id,
- pub issuer: String,
+ pub issuer: nfc::String,
pub issued_at: DateTime,
}
diff --git a/src/invite/repo.rs b/src/invite/repo.rs
index 643f5b7..02f4e42 100644
--- a/src/invite/repo.rs
+++ b/src/invite/repo.rs
@@ -4,6 +4,7 @@ use super::{Id, Invite, Summary};
use crate::{
clock::DateTime,
login::{self, Login},
+ normalize::nfc,
};
pub trait Provider {
@@ -70,7 +71,7 @@ impl<'c> Invites<'c> {
select
invite.id as "invite_id: Id",
issuer.id as "issuer_id: login::Id",
- issuer.name as "issuer_name",
+ issuer.display_name as "issuer_name: nfc::String",
invite.issued_at as "invite_issued_at: DateTime"
from invite
join login as issuer on (invite.issuer = issuer.id)
diff --git a/src/invite/routes/invite/post.rs b/src/invite/routes/invite/post.rs
index c072929..a41207a 100644
--- a/src/invite/routes/invite/post.rs
+++ b/src/invite/routes/invite/post.rs
@@ -10,6 +10,7 @@ use crate::{
error::{Internal, NotFound},
invite::app,
login::{Login, Password},
+ name::Name,
token::extract::IdentityToken,
};
@@ -31,7 +32,7 @@ pub async fn handler(
#[derive(serde::Deserialize)]
pub struct Request {
- pub name: String,
+ pub name: Name,
pub password: Password,
}