Merge pull request 'fix-uppercase-non-ascii-name' (#1062) from fix-uppercase-non-ascii-name into staging
Reviewed-on: #1062
This commit was merged in pull request #1062.
	This commit is contained in:
		| @@ -1,21 +1,20 @@ | |||||||
| use std::{fmt::Display, ops::DerefMut}; | use std::{fmt::Display, ops::DerefMut}; | ||||||
|  |  | ||||||
| use argon2::{Argon2, PasswordHasher, password_hash::SaltString}; | use argon2::{password_hash::SaltString, Argon2, PasswordHasher}; | ||||||
| use chrono::{Datelike, Local, NaiveDate}; | use chrono::{Datelike, Local, NaiveDate}; | ||||||
| use log::info; | use log::info; | ||||||
| use rocket::async_trait; | use rocket::async_trait; | ||||||
| use rocket::{ | use rocket::{ | ||||||
|     Request, |  | ||||||
|     http::{Cookie, Status}, |     http::{Cookie, Status}, | ||||||
|     request::{FromRequest, Outcome}, |     request::{FromRequest, Outcome}, | ||||||
|     time::{Duration, OffsetDateTime}, |     time::{Duration, OffsetDateTime}, | ||||||
|  |     Request, | ||||||
| }; | }; | ||||||
| use serde::{Deserialize, Serialize}; | use serde::{Deserialize, Serialize}; | ||||||
| use sqlx::{FromRow, Sqlite, SqlitePool, Transaction}; | use sqlx::{FromRow, Sqlite, SqlitePool, Transaction}; | ||||||
|  |  | ||||||
| use super::activity::{ActivityBuilder, ReasonAuth}; | use super::activity::{ActivityBuilder, ReasonAuth}; | ||||||
| use super::{ | use super::{ | ||||||
|     Day, |  | ||||||
|     log::Log, |     log::Log, | ||||||
|     logbook::Logbook, |     logbook::Logbook, | ||||||
|     mail::Mail, |     mail::Mail, | ||||||
| @@ -24,6 +23,7 @@ use super::{ | |||||||
|     planned::tripdetails::TripDetails, |     planned::tripdetails::TripDetails, | ||||||
|     role::Role, |     role::Role, | ||||||
|     stat::Stat, |     stat::Stat, | ||||||
|  |     Day, | ||||||
| }; | }; | ||||||
| use crate::AMOUNT_DAYS_TO_SHOW_TRIPS_AHEAD; | use crate::AMOUNT_DAYS_TO_SHOW_TRIPS_AHEAD; | ||||||
| use scheckbuch::ScheckbuchUser; | use scheckbuch::ScheckbuchUser; | ||||||
| @@ -303,15 +303,17 @@ WHERE id like ? | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     pub async fn find_by_name(db: &SqlitePool, name: &str) -> Option<Self> { |     pub async fn find_by_name(db: &SqlitePool, name: &str) -> Option<Self> { | ||||||
|         let name = name.trim().to_lowercase(); |         let name = name.trim(); | ||||||
|  |         let lowered_name = name.to_lowercase(); | ||||||
|  |  | ||||||
|         sqlx::query_as!( |         sqlx::query_as!( | ||||||
|             Self, |             Self, | ||||||
|             " |             " | ||||||
| SELECT id, name, pw, deleted, last_access, dob, weight, sex, member_since_date, birthdate, mail, nickname, phone, address, family_id, user_token | SELECT id, name, pw, deleted, last_access, dob, weight, sex, member_since_date, birthdate, mail, nickname, phone, address, family_id, user_token | ||||||
| FROM user  | FROM user  | ||||||
| WHERE lower(name)=? | WHERE lower(name)=? OR name=? | ||||||
|         ", |         ", | ||||||
|  |             lowered_name, | ||||||
|             name |             name | ||||||
|         ) |         ) | ||||||
|         .fetch_one(db) |         .fetch_one(db) | ||||||
| @@ -502,7 +504,7 @@ ASKÖ Ruderverein Donau Linz", self.name), | |||||||
|                 .save(db) |                 .save(db) | ||||||
|                 .await; |                 .await; | ||||||
|             return Err(LoginError::InvalidAuthenticationCombo); //User existed sometime ago; has |             return Err(LoginError::InvalidAuthenticationCombo); //User existed sometime ago; has | ||||||
|             //been deleted |                                                                 //been deleted | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if let Some(user_pw) = user.pw.as_ref() { |         if let Some(user_pw) = user.pw.as_ref() { | ||||||
| @@ -605,9 +607,9 @@ ASKÖ Ruderverein Donau Linz", self.name), | |||||||
|     pub(crate) async fn amount_days_to_show(&self, db: &SqlitePool) -> i64 { |     pub(crate) async fn amount_days_to_show(&self, db: &SqlitePool) -> i64 { | ||||||
|         if self.allowed_to_steer(db).await { |         if self.allowed_to_steer(db).await { | ||||||
|             let end_of_year = NaiveDate::from_ymd_opt(Local::now().year(), 12, 31).unwrap(); //Ok, |             let end_of_year = NaiveDate::from_ymd_opt(Local::now().year(), 12, 31).unwrap(); //Ok, | ||||||
|             //december |                                                                                              //december | ||||||
|             //has 31 |                                                                                              //has 31 | ||||||
|             //days |                                                                                              //days | ||||||
|             let days_left_in_year = end_of_year |             let days_left_in_year = end_of_year | ||||||
|                 .signed_duration_since(Local::now().date_naive()) |                 .signed_duration_since(Local::now().date_naive()) | ||||||
|                 .num_days() |                 .num_days() | ||||||
| @@ -616,9 +618,9 @@ ASKÖ Ruderverein Donau Linz", self.name), | |||||||
|             if days_left_in_year <= 31 { |             if days_left_in_year <= 31 { | ||||||
|                 let end_of_next_year = |                 let end_of_next_year = | ||||||
|                     NaiveDate::from_ymd_opt(Local::now().year() + 1, 12, 31).unwrap(); //Ok, |                     NaiveDate::from_ymd_opt(Local::now().year() + 1, 12, 31).unwrap(); //Ok, | ||||||
|                 //december |                                                                                        //december | ||||||
|                 //has 31 |                                                                                        //has 31 | ||||||
|                 //days |                                                                                        //days | ||||||
|                 end_of_next_year |                 end_of_next_year | ||||||
|                     .signed_duration_since(Local::now().date_naive()) |                     .signed_duration_since(Local::now().date_naive()) | ||||||
|                     .num_days() |                     .num_days() | ||||||
| @@ -850,8 +852,8 @@ special_user!(SteeringUser, +"cox", +"Bootsführer"); | |||||||
| special_user!(AdminUser, +"admin"); | special_user!(AdminUser, +"admin"); | ||||||
| special_user!(AllowedForPlannedTripsUser, +"Donau Linz", +"scheckbuch", +"Förderndes Mitglied"); | special_user!(AllowedForPlannedTripsUser, +"Donau Linz", +"scheckbuch", +"Förderndes Mitglied"); | ||||||
| special_user!(DonauLinzUser, +"Donau Linz", -"Unterstützend", -"Förderndes Mitglied"); // TODO: | special_user!(DonauLinzUser, +"Donau Linz", -"Unterstützend", -"Förderndes Mitglied"); // TODO: | ||||||
| // remove -> |                                                                                        // remove -> | ||||||
| // RegularUser |                                                                                        // RegularUser | ||||||
| special_user!(SchnupperBetreuerUser, +"schnupper-betreuer"); | special_user!(SchnupperBetreuerUser, +"schnupper-betreuer"); | ||||||
| special_user!(VorstandUser, +"admin", +"Vorstand"); | special_user!(VorstandUser, +"admin", +"Vorstand"); | ||||||
| special_user!(EventUser, +"manage_events"); | special_user!(EventUser, +"manage_events"); | ||||||
| @@ -965,21 +967,17 @@ mod test { | |||||||
|     #[sqlx::test] |     #[sqlx::test] | ||||||
|     fn wrong_pw() { |     fn wrong_pw() { | ||||||
|         let pool = testdb!(); |         let pool = testdb!(); | ||||||
|         assert!( |         assert!(User::login(&pool, "admin".into(), "admi".into()) | ||||||
|             User::login(&pool, "admin".into(), "admi".into()) |             .await | ||||||
|                 .await |             .is_err()); | ||||||
|                 .is_err() |  | ||||||
|         ); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     #[sqlx::test] |     #[sqlx::test] | ||||||
|     fn wrong_username() { |     fn wrong_username() { | ||||||
|         let pool = testdb!(); |         let pool = testdb!(); | ||||||
|         assert!( |         assert!(User::login(&pool, "admi".into(), "admin".into()) | ||||||
|             User::login(&pool, "admi".into(), "admin".into()) |             .await | ||||||
|                 .await |             .is_err()); | ||||||
|                 .is_err() |  | ||||||
|         ); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     #[sqlx::test] |     #[sqlx::test] | ||||||
| @@ -999,11 +997,9 @@ mod test { | |||||||
|         let pool = testdb!(); |         let pool = testdb!(); | ||||||
|         let user = User::find_by_id(&pool, 1).await.unwrap(); |         let user = User::find_by_id(&pool, 1).await.unwrap(); | ||||||
|  |  | ||||||
|         assert!( |         assert!(User::login(&pool, "admin".into(), "abc".into()) | ||||||
|             User::login(&pool, "admin".into(), "abc".into()) |             .await | ||||||
|                 .await |             .is_err()); | ||||||
|                 .is_err() |  | ||||||
|         ); |  | ||||||
|  |  | ||||||
|         user.update_pw(&pool, "abc".into()).await; |         user.update_pw(&pool, "abc".into()).await; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user