summaryrefslogtreecommitdiff
path: root/src/login/app.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/login/app.rs')
-rw-r--r--src/login/app.rs12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/login/app.rs b/src/login/app.rs
index 2f5896f..c1bfe6e 100644
--- a/src/login/app.rs
+++ b/src/login/app.rs
@@ -3,7 +3,7 @@ use sqlx::sqlite::SqlitePool;
use super::repo::Provider as _;
#[cfg(test)]
-use super::{Login, Password};
+use super::{validate, Login, Password};
#[cfg(test)]
use crate::{
clock::DateTime,
@@ -35,6 +35,10 @@ impl<'a> Logins<'a> {
password: &Password,
created_at: &DateTime,
) -> Result<Login, CreateError> {
+ if !validate::name(name) {
+ return Err(CreateError::InvalidName(name.clone()));
+ }
+
let password_hash = password.hash()?;
let mut tx = self.db.begin().await?;
@@ -57,9 +61,13 @@ impl<'a> Logins<'a> {
}
}
+#[cfg(test)]
#[derive(Debug, thiserror::Error)]
-#[error(transparent)]
pub enum CreateError {
+ #[error("invalid login name: {0}")]
+ InvalidName(Name),
+ #[error(transparent)]
Database(#[from] sqlx::Error),
+ #[error(transparent)]
PasswordHash(#[from] password_hash::Error),
}