2023-06-13 02:32:15 +02:00
|
|
|
class AuthD::Request
|
2023-06-13 03:15:08 +02:00
|
|
|
IPC::JSON.message ModUser, 6 do
|
2023-06-13 18:37:58 +02:00
|
|
|
property user : UserID? = nil
|
2023-06-13 02:32:15 +02:00
|
|
|
property admin : Bool? = nil
|
|
|
|
property password : String? = nil
|
|
|
|
property email : String? = nil
|
|
|
|
|
|
|
|
def initialize(@user, @admin, @password, @email)
|
|
|
|
end
|
|
|
|
|
|
|
|
def handle(authd : AuthD::Service, fd : Int32)
|
|
|
|
logged_user = authd.get_logged_user_full? fd
|
2023-06-14 01:46:38 +02:00
|
|
|
return Response::ErrorMustBeAuthenticated.new if logged_user.nil?
|
2023-06-13 02:32:15 +02:00
|
|
|
|
|
|
|
user = if u = @user
|
|
|
|
logged_user.assert_permission("authd", "*", User::PermissionLevel::Edit)
|
|
|
|
authd.user? u
|
|
|
|
else
|
|
|
|
logged_user
|
|
|
|
end
|
2023-06-14 01:46:38 +02:00
|
|
|
return Response::ErrorUserNotFound.new if user.nil?
|
2023-06-13 02:32:15 +02:00
|
|
|
|
|
|
|
# Only an admin can uprank or downrank someone.
|
|
|
|
if admin = @admin
|
|
|
|
logged_user.assert_permission("authd", "*", User::PermissionLevel::Admin)
|
|
|
|
user.admin = admin
|
|
|
|
end
|
|
|
|
|
|
|
|
@password.try do |s|
|
|
|
|
user.password_hash = authd.hash_password s
|
|
|
|
end
|
|
|
|
|
|
|
|
@email.try do |email|
|
|
|
|
user.contact.email = email
|
|
|
|
end
|
|
|
|
|
|
|
|
authd.users_per_uid.update user.uid.to_s, user
|
|
|
|
|
|
|
|
Response::UserEdited.new user.uid
|
|
|
|
end
|
|
|
|
end
|
|
|
|
AuthD.requests << ModUser
|
|
|
|
end
|