more-activities #1035
@@ -1,8 +1,8 @@
 | 
			
		||||
use std::ops::DerefMut;
 | 
			
		||||
 | 
			
		||||
use chrono::NaiveDateTime;
 | 
			
		||||
use rocket::serde::{Deserialize, Serialize};
 | 
			
		||||
use rocket::FromForm;
 | 
			
		||||
use rocket::serde::{Deserialize, Serialize};
 | 
			
		||||
use sqlx::{FromRow, Sqlite, SqlitePool, Transaction};
 | 
			
		||||
 | 
			
		||||
use crate::model::boathouse::Boathouse;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
use std::ops::DerefMut;
 | 
			
		||||
 | 
			
		||||
use serde::Serialize;
 | 
			
		||||
use sqlx::{sqlite::SqliteQueryResult, FromRow, Sqlite, SqlitePool, Transaction};
 | 
			
		||||
use sqlx::{FromRow, Sqlite, SqlitePool, Transaction, sqlite::SqliteQueryResult};
 | 
			
		||||
 | 
			
		||||
use super::user::User;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
use std::{error::Error, fs};
 | 
			
		||||
 | 
			
		||||
use lettre::{
 | 
			
		||||
    message::{header::ContentType, Attachment, MultiPart, SinglePart},
 | 
			
		||||
    transport::smtp::authentication::Credentials,
 | 
			
		||||
    Address, Message, SmtpTransport, Transport,
 | 
			
		||||
    message::{Attachment, MultiPart, SinglePart, header::ContentType},
 | 
			
		||||
    transport::smtp::authentication::Credentials,
 | 
			
		||||
};
 | 
			
		||||
use sqlx::{Sqlite, SqlitePool, Transaction};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
use super::User;
 | 
			
		||||
use crate::{
 | 
			
		||||
    model::family::Family, BOAT_STORAGE, DUAL_MEMBERSHIP, EINSCHREIBGEBUEHR, FAMILY_THREE_OR_MORE,
 | 
			
		||||
    FAMILY_TWO, FOERDERND, REGULAR, RENNRUDERBEITRAG, STUDENT_OR_PUPIL, TRIAL_ROWING,
 | 
			
		||||
    TRIAL_ROWING_REDUCED, UNTERSTUETZEND,
 | 
			
		||||
    BOAT_STORAGE, DUAL_MEMBERSHIP, EINSCHREIBGEBUEHR, FAMILY_THREE_OR_MORE, FAMILY_TWO, FOERDERND,
 | 
			
		||||
    REGULAR, RENNRUDERBEITRAG, STUDENT_OR_PUPIL, TRIAL_ROWING, TRIAL_ROWING_REDUCED,
 | 
			
		||||
    UNTERSTUETZEND, model::family::Family,
 | 
			
		||||
};
 | 
			
		||||
use chrono::{Datelike, Local, NaiveDate};
 | 
			
		||||
use serde::Serialize;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +1,21 @@
 | 
			
		||||
use std::{fmt::Display, ops::DerefMut};
 | 
			
		||||
 | 
			
		||||
use argon2::{password_hash::SaltString, Argon2, PasswordHasher};
 | 
			
		||||
use argon2::{Argon2, PasswordHasher, password_hash::SaltString};
 | 
			
		||||
use chrono::{Datelike, Local, NaiveDate};
 | 
			
		||||
use log::info;
 | 
			
		||||
use rocket::async_trait;
 | 
			
		||||
use rocket::{
 | 
			
		||||
    Request,
 | 
			
		||||
    http::{Cookie, Status},
 | 
			
		||||
    request::{FromRequest, Outcome},
 | 
			
		||||
    time::{Duration, OffsetDateTime},
 | 
			
		||||
    Request,
 | 
			
		||||
};
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
use sqlx::{FromRow, Sqlite, SqlitePool, Transaction};
 | 
			
		||||
 | 
			
		||||
use super::activity::{ActivityBuilder, ReasonAuth};
 | 
			
		||||
use super::{
 | 
			
		||||
    Day,
 | 
			
		||||
    log::Log,
 | 
			
		||||
    logbook::Logbook,
 | 
			
		||||
    mail::Mail,
 | 
			
		||||
@@ -23,7 +24,6 @@ use super::{
 | 
			
		||||
    role::Role,
 | 
			
		||||
    stat::Stat,
 | 
			
		||||
    tripdetails::TripDetails,
 | 
			
		||||
    Day,
 | 
			
		||||
};
 | 
			
		||||
use crate::AMOUNT_DAYS_TO_SHOW_TRIPS_AHEAD;
 | 
			
		||||
use scheckbuch::ScheckbuchUser;
 | 
			
		||||
@@ -835,8 +835,8 @@ special_user!(SteeringUser, +"cox", +"Bootsführer");
 | 
			
		||||
special_user!(AdminUser, +"admin");
 | 
			
		||||
special_user!(AllowedForPlannedTripsUser, +"Donau Linz", +"scheckbuch", +"Förderndes Mitglied");
 | 
			
		||||
special_user!(DonauLinzUser, +"Donau Linz", -"Unterstützend", -"Förderndes Mitglied"); // TODO:
 | 
			
		||||
                                                                                       // remove ->
 | 
			
		||||
                                                                                       // RegularUser
 | 
			
		||||
// remove ->
 | 
			
		||||
// RegularUser
 | 
			
		||||
special_user!(SchnupperBetreuerUser, +"schnupper-betreuer");
 | 
			
		||||
special_user!(VorstandUser, +"admin", +"Vorstand");
 | 
			
		||||
special_user!(EventUser, +"manage_events");
 | 
			
		||||
@@ -950,17 +950,21 @@ mod test {
 | 
			
		||||
    #[sqlx::test]
 | 
			
		||||
    fn wrong_pw() {
 | 
			
		||||
        let pool = testdb!();
 | 
			
		||||
        assert!(User::login(&pool, "admin".into(), "admi".into())
 | 
			
		||||
        assert!(
 | 
			
		||||
            User::login(&pool, "admin".into(), "admi".into())
 | 
			
		||||
                .await
 | 
			
		||||
            .is_err());
 | 
			
		||||
                .is_err()
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[sqlx::test]
 | 
			
		||||
    fn wrong_username() {
 | 
			
		||||
        let pool = testdb!();
 | 
			
		||||
        assert!(User::login(&pool, "admi".into(), "admin".into())
 | 
			
		||||
        assert!(
 | 
			
		||||
            User::login(&pool, "admi".into(), "admin".into())
 | 
			
		||||
                .await
 | 
			
		||||
            .is_err());
 | 
			
		||||
                .is_err()
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[sqlx::test]
 | 
			
		||||
@@ -980,9 +984,11 @@ mod test {
 | 
			
		||||
        let pool = testdb!();
 | 
			
		||||
        let user = User::find_by_id(&pool, 1).await.unwrap();
 | 
			
		||||
 | 
			
		||||
        assert!(User::login(&pool, "admin".into(), "abc".into())
 | 
			
		||||
        assert!(
 | 
			
		||||
            User::login(&pool, "admin".into(), "abc".into())
 | 
			
		||||
                .await
 | 
			
		||||
            .is_err());
 | 
			
		||||
                .is_err()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        user.update_pw(&pool, "abc".into()).await;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
use super::{ManageUserUser, User};
 | 
			
		||||
use crate::{
 | 
			
		||||
    NonEmptyString,
 | 
			
		||||
    model::{activity::ActivityBuilder, mail::Mail, notification::Notification, role::Role},
 | 
			
		||||
    special_user, NonEmptyString,
 | 
			
		||||
    special_user,
 | 
			
		||||
};
 | 
			
		||||
use chrono::NaiveDate;
 | 
			
		||||
use rocket::{async_trait, fs::TempFile, tokio::io::AsyncReadExt};
 | 
			
		||||
 
 | 
			
		||||
@@ -2,12 +2,13 @@ use super::foerdernd::FoerderndUser;
 | 
			
		||||
use super::regular::RegularUser;
 | 
			
		||||
use super::unterstuetzend::UnterstuetzendUser;
 | 
			
		||||
use super::{ManageUserUser, User};
 | 
			
		||||
use crate::NonEmptyString;
 | 
			
		||||
use crate::model::activity::ActivityBuilder;
 | 
			
		||||
use crate::model::role::Role;
 | 
			
		||||
use crate::NonEmptyString;
 | 
			
		||||
use crate::{
 | 
			
		||||
    SCHECKBUCH,
 | 
			
		||||
    model::{mail::Mail, notification::Notification},
 | 
			
		||||
    special_user, SCHECKBUCH,
 | 
			
		||||
    special_user,
 | 
			
		||||
};
 | 
			
		||||
use chrono::NaiveDate;
 | 
			
		||||
use rocket::async_trait;
 | 
			
		||||
 
 | 
			
		||||
@@ -4,9 +4,9 @@ use super::scheckbuch::ScheckbuchUser;
 | 
			
		||||
use super::schnupperinterest::SchnupperInterestUser;
 | 
			
		||||
use super::unterstuetzend::UnterstuetzendUser;
 | 
			
		||||
use super::{ManageUserUser, User};
 | 
			
		||||
use crate::NonEmptyString;
 | 
			
		||||
use crate::model::activity::ActivityBuilder;
 | 
			
		||||
use crate::model::role::Role;
 | 
			
		||||
use crate::NonEmptyString;
 | 
			
		||||
use crate::{
 | 
			
		||||
    model::{mail::Mail, notification::Notification},
 | 
			
		||||
    special_user,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
use csv::ReaderBuilder;
 | 
			
		||||
use rocket::{form::Form, get, post, routes, FromForm, Route, State};
 | 
			
		||||
use rocket_dyn_templates::{context, Template};
 | 
			
		||||
use rocket::{FromForm, Route, State, form::Form, get, post, routes};
 | 
			
		||||
use rocket_dyn_templates::{Template, context};
 | 
			
		||||
use sqlx::SqlitePool;
 | 
			
		||||
 | 
			
		||||
use crate::model::{activity::Activity, role::Role, user::AdminUser};
 | 
			
		||||
 
 | 
			
		||||
@@ -7,11 +7,11 @@ use crate::{
 | 
			
		||||
        mail::valid_mails,
 | 
			
		||||
        role::Role,
 | 
			
		||||
        user::{
 | 
			
		||||
            AdminUser, AllowedToEditPaymentStatusUser, ManageUserUser, User, UserWithDetails,
 | 
			
		||||
            UserWithMembershipPdf, UserWithRolesAndMembershipPdf, VorstandUser,
 | 
			
		||||
            clubmember::ClubMemberUser, foerdernd::FoerderndUser, member::Member,
 | 
			
		||||
            regular::RegularUser, scheckbuch::ScheckbuchUser, schnupperant::SchnupperantUser,
 | 
			
		||||
            schnupperinterest::SchnupperInterestUser, unterstuetzend::UnterstuetzendUser,
 | 
			
		||||
            AdminUser, AllowedToEditPaymentStatusUser, ManageUserUser, User, UserWithDetails,
 | 
			
		||||
            UserWithMembershipPdf, UserWithRolesAndMembershipPdf, VorstandUser,
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    tera::Config,
 | 
			
		||||
@@ -19,6 +19,7 @@ use crate::{
 | 
			
		||||
use chrono::NaiveDate;
 | 
			
		||||
use futures::future::join_all;
 | 
			
		||||
use rocket::{
 | 
			
		||||
    FromForm, Request, Route, State,
 | 
			
		||||
    form::Form,
 | 
			
		||||
    fs::TempFile,
 | 
			
		||||
    get,
 | 
			
		||||
@@ -26,9 +27,9 @@ use rocket::{
 | 
			
		||||
    post,
 | 
			
		||||
    request::{FlashMessage, FromRequest, Outcome},
 | 
			
		||||
    response::{Flash, Redirect},
 | 
			
		||||
    routes, FromForm, Request, Route, State,
 | 
			
		||||
    routes,
 | 
			
		||||
};
 | 
			
		||||
use rocket_dyn_templates::{tera::Context, Template};
 | 
			
		||||
use rocket_dyn_templates::{Template, tera::Context};
 | 
			
		||||
use sqlx::SqlitePool;
 | 
			
		||||
 | 
			
		||||
// Custom request guard to extract the Referer header
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
use rocket::{
 | 
			
		||||
    FromForm, Request, Route, State,
 | 
			
		||||
    form::Form,
 | 
			
		||||
    get,
 | 
			
		||||
    http::{Cookie, CookieJar},
 | 
			
		||||
@@ -8,9 +9,8 @@ use rocket::{
 | 
			
		||||
    response::{Flash, Redirect},
 | 
			
		||||
    routes,
 | 
			
		||||
    time::{Duration, OffsetDateTime},
 | 
			
		||||
    FromForm, Request, Route, State,
 | 
			
		||||
};
 | 
			
		||||
use rocket_dyn_templates::{context, tera, Template};
 | 
			
		||||
use rocket_dyn_templates::{Template, context, tera};
 | 
			
		||||
use sqlx::SqlitePool;
 | 
			
		||||
 | 
			
		||||
use crate::model::{
 | 
			
		||||
 
 | 
			
		||||
@@ -412,9 +412,7 @@
 | 
			
		||||
                            {% for activity in activities %}
 | 
			
		||||
                                <li>
 | 
			
		||||
                                    <strong>{{ activity.created_at | date(format="%d. %m. %Y") }}:</strong> <small>{{ activity.text }}
 | 
			
		||||
                                    {% if activity.keep_until_days %}
 | 
			
		||||
                                      (⏳ {{ activity.keep_until_days }} Tage)
 | 
			
		||||
                                      {% endif %}
 | 
			
		||||
                                        {% if activity.keep_until_days %}(⏳ {{ activity.keep_until_days }} Tage){% endif %}
 | 
			
		||||
                                    </small>
 | 
			
		||||
                                </li>
 | 
			
		||||
                            {% else %}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user