fix: make usernames and community titles case insensitive

This commit is contained in:
trisua 2025-03-30 22:33:07 -04:00
parent f5b75382e5
commit e7e9b49195
4 changed files with 15 additions and 4 deletions

View file

@ -101,7 +101,7 @@ pub async fn feed_request(
let data = data.read().await;
let user = get_user_from_token!(jar, data.0);
let community = match data.0.get_community_by_title(&title).await {
let community = match data.0.get_community_by_title(&title.to_lowercase()).await {
Ok(ua) => ua,
Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)),
};

View file

@ -84,6 +84,11 @@ impl DataManager {
return Err(Error::DataTooShort("password".to_string()));
}
// make sure username isn't taken
if self.get_user_by_username(&data.username).await.is_ok() {
return Err(Error::MiscError("Username in use".to_string()));
}
// ...
let conn = match self.connect().await {
Ok(c) => c,
@ -96,7 +101,7 @@ impl DataManager {
&[
&data.id.to_string().as_str(),
&data.created.to_string().as_str(),
&data.username.as_str(),
&data.username.to_lowercase().as_str(),
&data.password.as_str(),
&data.salt.as_str(),
&serde_json::to_string(&data.settings).unwrap().as_str(),

View file

@ -98,6 +98,8 @@ macro_rules! auto_method {
($name:ident($selector_t:ty)@$select_fn:ident -> $query:literal --name=$name_:literal --returns=$returns_:tt --cache-key-tmpl=$cache_key_tmpl:literal) => {
pub async fn $name(&self, selector: $selector_t) -> Result<$returns_> {
let selector = selector.to_string().to_lowercase();
if let Some(cached) = self.2.get(format!($cache_key_tmpl, selector)).await {
return Ok(serde_json::from_str(&cached).unwrap());
}

View file

@ -61,7 +61,11 @@ impl DataManager {
}
// make sure community doesn't already exist with title
if self.get_community_by_title(&data.title).await.is_ok() {
if self
.get_community_by_title(&data.title.to_lowercase())
.await
.is_ok()
{
return Err(Error::MiscError("Title already in use".to_string()));
}
@ -77,7 +81,7 @@ impl DataManager {
&[
&data.id.to_string().as_str(),
&data.created.to_string().as_str(),
&data.title.as_str(),
&data.title.to_lowercase().as_str(),
&serde_json::to_string(&data.context).unwrap().as_str(),
&data.owner.to_string().as_str(),
&serde_json::to_string(&data.read_access).unwrap().as_str(),