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