summaryrefslogtreecommitdiffstats
path: root/src/admin/user_creation.rs
diff options
context:
space:
mode:
authorJokler <github@jokler.xyz>2026-10-05 16:07:20 +0200
committerJokler <github@jokler.xyz>2026-10-05 22:25:43 +0200
commit625ea9193202f678ab2799283ddfe2b282ba1e90 (patch)
treeccb98fdfca95b0787b730d5e9a3d3c9146eabf9a /src/admin/user_creation.rs
parent0fed68e150b028b9ad62e75e0472a34224042501 (diff)
downloadjoklerpoints-625ea9193202f678ab2799283ddfe2b282ba1e90.tar.gz
joklerpoints-625ea9193202f678ab2799283ddfe2b282ba1e90.zip
Add user creation
Diffstat (limited to 'src/admin/user_creation.rs')
-rw-r--r--src/admin/user_creation.rs42
1 files changed, 36 insertions, 6 deletions
diff --git a/src/admin/user_creation.rs b/src/admin/user_creation.rs
index 563b660..d54b063 100644
--- a/src/admin/user_creation.rs
+++ b/src/admin/user_creation.rs
@@ -4,15 +4,15 @@ use diesel::MysqlConnection;
use diesel::{
dsl::sql,
types::{Bigint, Unsigned},
- RunQueryDsl,
+ ExpressionMethods, QueryDsl, RunQueryDsl,
};
use crate::error::ServiceError;
-use crate::model::{DbExecutor, NewPassword, NewUser};
-use crate::schema::passwords::dsl::passwords;
-use crate::schema::users::dsl::users;
+use crate::model::{DbExecutor, NewPassword, NewUser, User};
+use crate::schema::passwords::{columns as password_columns, dsl::passwords};
+use crate::schema::users::{columns as user_columns, dsl::users};
-static LAST_ID_SQL: &'static str = "SELECT LAST_INSERT_ID()";
+static LAST_ID_SQL: &str = "SELECT LAST_INSERT_ID()";
pub struct PassHashExecutor(pub Hasher<'static>);
@@ -74,7 +74,7 @@ impl Handler<SaveUserRequest> for DbExecutor {
let id = sql::<Unsigned<Bigint>>(LAST_ID_SQL).get_result(conn)?;
let new_pass = NewPassword {
- id: id,
+ id,
hash: &msg.pass_hash,
};
@@ -85,3 +85,33 @@ impl Handler<SaveUserRequest> for DbExecutor {
Ok(())
}
}
+
+pub struct ChangePasswordRequest(pub String, pub String);
+
+impl Message for ChangePasswordRequest {
+ type Result = Result<(), ServiceError>;
+}
+
+impl Handler<ChangePasswordRequest> for DbExecutor {
+ type Result = Result<(), ServiceError>;
+
+ fn handle(&mut self, req: ChangePasswordRequest, _: &mut Self::Context) -> Self::Result {
+ let conn: &MysqlConnection = &self.0.get().unwrap();
+ let (name, hash) = (req.0, req.1);
+
+ let user = users
+ .filter(user_columns::name.eq(name))
+ .first::<User>(conn)
+ .map_err(|_| ServiceError::NotFound)?;
+
+ if user.power_level == 9001 {
+ return Err(ServiceError::Unauthorized);
+ }
+
+ diesel::update(passwords.filter(password_columns::id.eq(user.id)))
+ .set(password_columns::hash.eq(hash))
+ .execute(conn)?;
+
+ Ok(())
+ }
+}