Merge branch 'staging' into 'main'

scheckbuch can't see logbuch

See merge request PhilippHofer/rot!43
This commit is contained in:
PhilippHofer 2023-10-24 08:30:58 +00:00
commit 83394a2284
3 changed files with 38 additions and 2 deletions

View File

@ -59,6 +59,7 @@ pub enum LoginError {
NotAnAdmin, NotAnAdmin,
NotACox, NotACox,
NotATech, NotATech,
GuestNotAllowed,
NoPasswordSet(User), NoPasswordSet(User),
DeserializationError, DeserializationError,
} }
@ -464,6 +465,39 @@ impl<'r> FromRequest<'r> for AdminUser {
} }
} }
#[derive(Debug, Serialize, Deserialize)]
pub struct NonGuestUser {
pub(crate) user: User,
}
impl TryFrom<User> for NonGuestUser {
type Error = LoginError;
fn try_from(user: User) -> Result<Self, Self::Error> {
if user.is_guest {
Err(LoginError::GuestNotAllowed)
} else {
Ok(NonGuestUser { user })
}
}
}
#[async_trait]
impl<'r> FromRequest<'r> for NonGuestUser {
type Error = LoginError;
async fn from_request(req: &'r Request<'_>) -> request::Outcome<Self, Self::Error> {
match User::from_request(req).await {
Outcome::Success(user) => match user.try_into() {
Ok(user) => Outcome::Success(user),
Err(_) => Outcome::Failure((Status::Unauthorized, LoginError::NotAnAdmin)),
},
Outcome::Failure(f) => Outcome::Failure(f),
Outcome::Forward(f) => Outcome::Forward(f),
}
}
}
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use crate::testdb; use crate::testdb;

View File

@ -23,7 +23,7 @@ use crate::model::{
LogbookUpdateError, LogbookUpdateError,
}, },
logtype::LogType, logtype::LogType,
user::{User, UserWithWaterStatus}, user::{NonGuestUser, User, UserWithWaterStatus},
}; };
pub struct KioskCookie(String); pub struct KioskCookie(String);
@ -80,7 +80,7 @@ async fn index(db: &State<SqlitePool>, flash: Option<FlashMessage<'_>>, user: Us
} }
#[get("/show", rank = 2)] #[get("/show", rank = 2)]
async fn show(db: &State<SqlitePool>, user: User) -> Template { async fn show(db: &State<SqlitePool>, user: NonGuestUser) -> Template {
let logs = Logbook::completed(db).await; let logs = Logbook::completed(db).await;
Template::render("log.completed", context!(logs, loggedin_user: &user)) Template::render("log.completed", context!(logs, loggedin_user: &user))

View File

@ -23,9 +23,11 @@
<a href="/log" class="block w-100 py-2 hover:text-primary-600"> <a href="/log" class="block w-100 py-2 hover:text-primary-600">
Ausfahrt eintragen Ausfahrt eintragen
</a> </a>
{% if not loggedin_user.is_guest %}
<a href="/log/show" class="block w-100 py-2 hover:text-primary-600 border-t"> <a href="/log/show" class="block w-100 py-2 hover:text-primary-600 border-t">
Logbuch Logbuch
</a> </a>
{% endif %}
<a href="/stat" class="block w-100 py-2 hover:text-primary-600 border-t"> <a href="/stat" class="block w-100 py-2 hover:text-primary-600 border-t">
Statistik Statistik
</a> </a>