class AuthD::Request IPC::JSON.message AddUser, 9 do property login : String property password : String property admin : Bool = false property email : String? = nil property profile : Hash(String, JSON::Any)? = nil def initialize(@login, @password, @admin, @email, @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.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 end