2020-12-09 19:00:18 +01:00
|
|
|
class DNSManager::Request
|
|
|
|
IPC::JSON.message Login, 0 do
|
|
|
|
property token : String
|
|
|
|
|
|
|
|
def initialize(@token)
|
|
|
|
end
|
|
|
|
|
2023-02-15 19:21:49 +01:00
|
|
|
def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event)
|
2023-06-15 14:11:13 +02:00
|
|
|
response = dnsmanagerd.decode_token token
|
|
|
|
case response
|
|
|
|
when AuthD::Response::User
|
|
|
|
dnsmanagerd.logged_users[event.fd] = response.user
|
|
|
|
# In case we want to log their last connection.
|
|
|
|
#dnsmanagerd.auth.edit_profile_content user.uid, {
|
|
|
|
# "dnsmanager-last-connection" => JSON::Any.new Time.utc.to_s
|
|
|
|
#}
|
2024-04-27 17:32:22 +02:00
|
|
|
user_id = response.user.uid
|
2023-07-01 16:04:38 +02:00
|
|
|
|
|
|
|
accepted_domains = dnsmanagerd.configuration.accepted_domains.not_nil!
|
2024-04-28 17:16:06 +02:00
|
|
|
|
|
|
|
# Limit the number of domains in this message.
|
|
|
|
# Pagination will be required beyond a hundred domains.
|
|
|
|
user_domains = dnsmanagerd.storage.user_domains(user_id).[0..100]
|
2024-05-07 12:48:52 +02:00
|
|
|
is_admin = dnsmanagerd.is_admin? user_id
|
2024-05-07 01:32:37 +02:00
|
|
|
|
2024-05-07 12:48:52 +02:00
|
|
|
Response::Logged.new is_admin, accepted_domains, user_domains
|
|
|
|
when AuthD::Response::ErrorUserNotFound
|
|
|
|
Baguette::Log.error "Trying to authenticate an unknown user."
|
|
|
|
Response::ErrorInvalidToken.new
|
2023-06-15 14:11:13 +02:00
|
|
|
else
|
|
|
|
Response::ErrorInvalidToken.new
|
|
|
|
end
|
2020-12-09 19:00:18 +01:00
|
|
|
rescue e
|
|
|
|
# FIXME: Should those be logged?
|
2023-06-18 02:36:30 +02:00
|
|
|
Baguette::Log.error "Error: #{e}"
|
2023-05-07 18:32:32 +02:00
|
|
|
Response::Error.new "unauthorized"
|
2020-12-09 19:00:18 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
DNSManager.requests << Login
|
2024-03-16 07:03:04 +01:00
|
|
|
|
|
|
|
IPC::JSON.message DeleteUser, 1 do
|
|
|
|
property user_id : UserDataID? = nil
|
|
|
|
|
|
|
|
def initialize(@user_id = nil)
|
|
|
|
end
|
|
|
|
|
2024-12-13 18:15:16 +01:00
|
|
|
def to_s(io : IO)
|
|
|
|
super io
|
|
|
|
io << " (user_id: #{@user_id})"
|
|
|
|
end
|
|
|
|
|
2024-03-16 07:03:04 +01:00
|
|
|
def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event)
|
|
|
|
user = dnsmanagerd.get_logged_user event
|
|
|
|
return Response::ErrorUserNotLogged.new unless user
|
|
|
|
|
2024-04-27 17:32:22 +02:00
|
|
|
dnsmanagerd.storage.delete_user_data user.uid, user_id
|
2024-03-16 07:03:04 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
DNSManager.requests << DeleteUser
|
2020-12-09 19:00:18 +01:00
|
|
|
end
|