summaryrefslogtreecommitdiff
path: root/src/channel/app.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-10-29 20:44:03 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-10-29 20:44:03 -0400
commit9010c7feeca8f4e7e501ad474911deaaf7a1a367 (patch)
treee2fb736e7923c0d084ee3ebffe03752dc237edfb /src/channel/app.rs
parent15311c7bd816a83d0641de6b6bb3c41bb67079db (diff)
Restrict channel names, too.
Thankfully, channel creation only happens in one place, so we don't need a state machine for this.
Diffstat (limited to 'src/channel/app.rs')
-rw-r--r--src/channel/app.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/channel/app.rs b/src/channel/app.rs
index 8359277..9a19b16 100644
--- a/src/channel/app.rs
+++ b/src/channel/app.rs
@@ -4,7 +4,7 @@ use sqlx::sqlite::SqlitePool;
use super::{
repo::{LoadError, Provider as _},
- Channel, Id,
+ validate, Channel, Id,
};
use crate::{
clock::DateTime,
@@ -25,6 +25,10 @@ impl<'a> Channels<'a> {
}
pub async fn create(&self, name: &Name, created_at: &DateTime) -> Result<Channel, CreateError> {
+ if !validate::name(name) {
+ return Err(CreateError::InvalidName(name.clone()));
+ }
+
let mut tx = self.db.begin().await?;
let created = tx.sequence().next(created_at).await?;
let channel = tx
@@ -149,6 +153,8 @@ impl<'a> Channels<'a> {
pub enum CreateError {
#[error("channel named {0} already exists")]
DuplicateName(Name),
+ #[error("invalid channel name: {0}")]
+ InvalidName(Name),
#[error(transparent)]
Database(#[from] sqlx::Error),
#[error(transparent)]