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_data = dnsmanagerd.storage.ensure_user_data response.user.uid return Response::Error.new "invalid user" unless user_data accepted_domains = dnsmanagerd.configuration.accepted_domains.not_nil! user_domains = user_data.domains Response::Logged.new accepted_domains, user_domains 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 end