dnsmanager/src/requests/user.cr

61 lines
1.7 KiB
Crystal
Raw Normal View History

class DNSManager::Request
IPC::JSON.message Login, 0 do
property token : String
def initialize(@token)
end
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
#}
user_id = response.user.uid
accepted_domains = dnsmanagerd.configuration.accepted_domains.not_nil!
# 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]
is_admin = dnsmanagerd.is_admin? user_id
2024-05-07 01:32:37 +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
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"
end
end
DNSManager.requests << Login
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
def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event)
user = dnsmanagerd.get_logged_user event
return Response::ErrorUserNotLogged.new unless user
dnsmanagerd.storage.delete_user_data user.uid, user_id
end
end
DNSManager.requests << DeleteUser
end