use rocket::{form::Form, response::Redirect, Route, State}; use rocket_dyn_templates::{context, Template}; use sea_orm::{ActiveModelTrait, DatabaseConnection, EntityTrait, Set}; use sha3::{Digest, Sha3_256}; use crate::models::user; #[get("/")] async fn index(db: &State, user: user::AdminUser) -> Template { let users = user::Entity::find().all(db.inner()).await.unwrap(); Template::render("user/index", context! {user, users}) } #[derive(FromForm)] struct UserEditForm { pw: Option, is_cox: bool, add_different_user: bool, is_admin: bool, } #[put("/", data = "")] async fn update( db: &State, id: i32, data: Form, _user: user::AdminUser, ) -> Redirect { let mut new_user = user::ActiveModel { id: Set(id), is_cox: Set(data.is_cox), is_admin: Set(data.is_admin), add_different_user: Set(data.add_different_user), ..Default::default() }; if let Some(pw) = &data.pw { if !pw.is_empty() { let mut hasher = Sha3_256::new(); hasher.update(pw); let entered_pw = hasher.finalize(); let pw = hex::encode(entered_pw); new_user.pw = Set(Some(pw)); } } new_user.update(db.inner()).await.unwrap(); Redirect::to("/user") } pub fn routes() -> Vec { routes![index, update] }