From b047a3fd6f3fd553904e79b921524c65c2ccc904 Mon Sep 17 00:00:00 2001 From: Philippe Pittoli Date: Wed, 14 Jun 2023 02:07:03 +0200 Subject: [PATCH] All explicit errors in requests are now dedicated errors. --- src/requests/admin.cr | 2 +- src/requests/password.cr | 2 +- src/requests/profile.cr | 7 ++++++- src/requests/register.cr | 6 ++---- src/requests/users.cr | 4 ++-- src/responses/errors.cr | 37 +++++++++++++++++++++++++++++++++++++ 6 files changed, 49 insertions(+), 9 deletions(-) diff --git a/src/requests/admin.cr b/src/requests/admin.cr index 57a49f0..54701ba 100644 --- a/src/requests/admin.cr +++ b/src/requests/admin.cr @@ -59,7 +59,7 @@ class AuthD::Request def handle(authd : AuthD::Service, fd : Int32) # Check if there already is a registered user. if authd.users.to_a.size > 0 - return Response::Error.new "already users in the database" + return Response::ErrorAlreadyUsersInDB.new end password_hash = authd.hash_password @password diff --git a/src/requests/password.cr b/src/requests/password.cr index bccff42..40c3a20 100644 --- a/src/requests/password.cr +++ b/src/requests/password.cr @@ -63,7 +63,7 @@ class AuthD::Request if user.password_renew_key == @password_renew_key user.password_hash = authd.hash_password @new_password else - return Response::Error.new "renew key not valid" + return Response::ErrorInvalidRenewKey.new end user.password_renew_key = nil diff --git a/src/requests/profile.cr b/src/requests/profile.cr index 579a81f..d8c5bcc 100644 --- a/src/requests/profile.cr +++ b/src/requests/profile.cr @@ -22,14 +22,19 @@ class AuthD::Request new_profile_entries = user.profile || Hash(String, JSON::Any).new + invalid_profile_keys = Array(String).new unless logged_user.admin authd.configuration.read_only_profile_keys.each do |key| if @new_profile_entries.has_key? key - return Response::Error.new "tried to edit read only key" + invalid_profile_keys << key end end end + if invalid_profile_keys.size > 0 + return Response::ErrorReadOnlyProfileKeys.new invalid_profile_keys + end + @new_profile_entries.each do |key, value| new_profile_entries[key] = value end diff --git a/src/requests/register.cr b/src/requests/register.cr index 94aff82..3b6eae7 100644 --- a/src/requests/register.cr +++ b/src/requests/register.cr @@ -31,9 +31,7 @@ class AuthD::Request result = grok.parse @email.not_nil! email = result["email"]? - if email.nil? - return Response::ErrorInvalidEmailFormat.new - end + return Response::ErrorInvalidEmailFormat.new if email.nil? end # In this case we should not accept its registration. @@ -72,7 +70,7 @@ class AuthD::Request end rescue e Baguette::Log.error "mailer: #{e}" - return Response::Error.new "cannot contact the user (not registered)" + return Response::ErrorCannotContactUser.new end # add the user only if we were able to send the confirmation mail diff --git a/src/requests/users.cr b/src/requests/users.cr index c2fb417..83bc00e 100644 --- a/src/requests/users.cr +++ b/src/requests/users.cr @@ -13,14 +13,14 @@ class AuthD::Request return Response::ErrorUserNotFound.new if user.nil? if user.contact.activation_key.nil? - return Response::Error.new "user already validated" + return Response::ErrorUserAlreadyValidated.new end # Remove the user contact activation key: the email is validated. if user.contact.activation_key == @activation_key user.contact.activation_key = nil else - return Response::Error.new "wrong activation key" + return Response::ErrorInvalidActivationKey.new end authd.users_per_uid.update user.uid.to_s, user diff --git a/src/responses/errors.cr b/src/responses/errors.cr index bc7cdfc..db8e335 100644 --- a/src/responses/errors.cr +++ b/src/responses/errors.cr @@ -65,4 +65,41 @@ class AuthD::Response end end AuthD.responses << ErrorInvalidCredentials + + IPC::JSON.message ErrorReadOnlyProfileKeys, 30 do + property read_only_keys : Array(String) + def initialize(@read_only_keys) + end + end + AuthD.responses << ErrorReadOnlyProfileKeys + + IPC::JSON.message ErrorInvalidActivationKey, 31 do + def initialize() + end + end + AuthD.responses << ErrorInvalidActivationKey + + IPC::JSON.message ErrorUserAlreadyValidated, 32 do + def initialize() + end + end + AuthD.responses << ErrorUserAlreadyValidated + + IPC::JSON.message ErrorCannotContactUser, 33 do + def initialize() + end + end + AuthD.responses << ErrorCannotContactUser + + IPC::JSON.message ErrorInvalidRenewKey, 34 do + def initialize() + end + end + AuthD.responses << ErrorInvalidRenewKey + + IPC::JSON.message ErrorAlreadyUsersInDB, 35 do + def initialize() + end + end + AuthD.responses << ErrorAlreadyUsersInDB end