Deletion: WIP

This commit is contained in:
Karchnu 2020-10-13 05:33:49 +02:00
parent c3d5aef951
commit 90ccd50c80
3 changed files with 62 additions and 9 deletions

View File

@ -344,6 +344,19 @@ class AuthD::Request
property phone : String?
end
class Delete < Request
# Deletion can be triggered by either an admin or the user.
property shared_key : String?
property login : String?
property password : String?
property user : String | Int32
initialize :user, :login, :password
initialize :user, :shared_key
end
# This creates a Request::Type enumeration. One entry for each request type.
{% begin %}
enum Type
@ -608,6 +621,23 @@ module AuthD
raise Exception.new "unexpected response"
end
end
def delete(user : Int32 | String, key : String)
send Request::Delete.new user, key
delete_
end
def delete(user : Int32 | String, login : String, pass : String)
send Request::Delete.new user, login, pass
delete_
end
def delete_
response = Response.from_ipc read
case response
when Response::Error
raise Exception.new response.reason
end
response
end
end
end

View File

@ -79,15 +79,8 @@ class Actions
# For all functions: the number of arguments is already tested.
#
def user_registration
# pp! authd.register login, password.not_nil!, email, phone, profile: profile
rescue e : AuthD::Exception
puts "error: #{e.message}"
end
def user_deletion
end
def user_add
puts "User add!!!"
args = Context.args.not_nil!
login, email, phone = args[0..2]
profile = Context.user_profile
@ -100,6 +93,20 @@ class Actions
puts "error: #{e.message}"
end
def user_registration
args = Context.args.not_nil!
login, email, phone = args[0..2]
profile = Context.user_profile
password = Actions.ask_password
exit 1 unless password
res = authd.register login, password.not_nil!, email, phone, profile: profile
puts res
rescue e : AuthD::Exception
puts "error: #{e.message}"
end
# TODO
def user_mod
args = Context.args.not_nil!
@ -127,6 +134,20 @@ class Actions
# puts res
end
def user_deletion
args = Context.args.not_nil!
userid = args[0]
# Check if the request comes from an admin or the user.
res = if Context.shared_key.nil?
authd.delete userid, Context.authd_login, Context.authd_pass
else
authd.delete userid, Context.shared_key
end
puts res
end
# TODO
def validate
# pp! r = authd.validate_user login.not_nil!, activation_key.not_nil!

View File

@ -111,13 +111,15 @@ parser = OptionParser.new do |parser|
end
parser.on "delete", "Remove user." do
parser.banner = "Usage: user delete -u userid [opt]"
parser.banner = "Usage: user delete userid [opt]"
Baguette::Log.info "Remove user."
Context.command = "delete"
# You can either be the owner of the account, or an admin.
opt_authd_login.call parser
opt_authd_admin.call parser
opt_help.call parser
# userid
unrecognized_args_to_context_args.call parser, 1
end
# Do not require to be admin.