class AuthD::Request IPC::JSON.message AddUser, 1 do property login : String property password : String property admin : Bool = false property email : String? = nil property phone : String? = nil property profile : Hash(String, JSON::Any)? = nil def initialize(@login, @password, @admin, @email, @phone, @profile) end def handle(authd : AuthD::Service, fd : Int32) logged_user = authd.get_logged_user_full? fd return Response::Error.new "you must be logged" if logged_user.nil? logged_user.assert_permission("authd", "*", User::PermissionLevel::Admin) if authd.users_per_login.get? @login return Response::Error.new "login already used" end # No verification of the user's informations when an admin adds it. # No mail address verification. if authd.configuration.require_email && @email.nil? return Response::Error.new "email required" end password_hash = authd.hash_password @password uid = authd.new_uid user = User.new uid, @login, password_hash user.contact.email = @email unless @email.nil? user.contact.phone = @phone unless @phone.nil? user.admin = @admin @profile.try do |profile| user.profile = profile end # We consider adding the user as a registration. user.date_registration = Time.local authd.users << user authd.new_uid_commit uid Response::UserAdded.new user.to_public end end AuthD.requests << AddUser IPC::JSON.message ModUser, 5 do property user : UserID property admin : Bool = false property password : String? = nil property email : String? = nil property phone : String? = nil def initialize(@user, @admin, @password, @email, @phone) end def handle(authd : AuthD::Service, fd : Int32) logged_user = authd.get_logged_user_full? fd return Response::Error.new "you must be logged" if logged_user.nil? user = authd.user? @user return Response::Error.new "user not found" if user.nil? # Only an admin can uprank someone. if @admin logged_user.assert_permission("authd", "*", User::PermissionLevel::Admin) else logged_user.assert_permission("authd", "*", User::PermissionLevel::Edit) end @password.try do |s| user.password_hash = authd.hash_password s end @email.try do |email| user.contact.email = email end @phone.try do |phone| user.contact.phone = phone end authd.users_per_uid.update user.uid.to_s, user Response::UserEdited.new user.uid end end AuthD.requests << ModUser end