class AuthD::Request IPC::JSON.message ModUser, 6 do property user : UserID? = nil 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 return Response::ErrorMustBeAuthenticated.new if logged_user.nil? user = if u = @user logged_user.assert_permission("authd", "*", User::PermissionLevel::Edit) authd.user? u else logged_user end return Response::ErrorUserNotFound.new if user.nil? # 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