class DNSManager::Request IPC::JSON.message Login, 0 do property token : String def initialize(@token) end def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event) 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 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 else Response::ErrorInvalidToken.new end rescue e # FIXME: Should those be logged? Baguette::Log.error "Error: #{e}" 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 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