class DNSManager::Request # Periodic actions to perform as an administrator. IPC::JSON.message GetOrphanDomains, 6 do def initialize() end def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event) : IPC::JSON user = dnsmanagerd.get_logged_user event return Response::ErrorUserNotLogged.new unless user dnsmanagerd.storage.get_orphan_domains user.uid end end DNSManager.requests << GetOrphanDomains # Periodic actions to perform as an administrator. IPC::JSON.message Maintenance, 7 do enum Subject Verbosity # Change the verbosity of dnsmanagerd. SanityCheck # Perform various verifications, including: # - TODO: debug print and removal of domains not linked to existing users # - TODO: check that at least an admin exists end property subject : Subject property int : Int32? = nil property string : String? = nil def initialize(@subject) end def to_s(io : IO) super io io << " (subject: #{@subject}, int: #{@int}, string: #{@string})" end def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event) : IPC::JSON user = dnsmanagerd.get_logged_user event return Response::ErrorUserNotLogged.new unless user return Response::InsufficientRights.new unless user.admin case @subject when Subject::Verbosity if verbosity = @int Baguette::Context.verbosity = verbosity end Response::Success.new when Subject::SanityCheck Baguette::Log.info "TODO: sanity check" Response::Error.new "not implemented" else Response::Error.new "not implemented" end end end DNSManager.requests << Maintenance # Generate all zone files. # TODO: should conveniently skip already generated zones. IPC::JSON.message GenerateAllZoneFiles, 100 do def initialize() end def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event) : IPC::JSON user = dnsmanagerd.get_logged_user event return Response::ErrorUserNotLogged.new unless user dnsmanagerd.storage.user_must_be_admin! user.uid dnsmanagerd.storage.generate_all_zonefiles end end DNSManager.requests << GenerateAllZoneFiles # Force the generation of a zone file. IPC::JSON.message GenerateZoneFile, 101 do property domain : String def initialize(@domain) end def to_s(io : IO) super io io << " (domain: #{@domain})" end def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event) : IPC::JSON user = dnsmanagerd.get_logged_user event return Response::ErrorUserNotLogged.new unless user dnsmanagerd.storage.user_must_be_admin! user.uid dnsmanagerd.storage.generate_zonefile @domain end end DNSManager.requests << GenerateZoneFile IPC::JSON.message Exit, 248 do def initialize end def to_s(io : IO) super io end def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event) : IPC::JSON user = dnsmanagerd.get_logged_user event return Response::ErrorUserNotLogged.new unless user dnsmanagerd.storage.user_must_be_admin! user.uid Baguette::Log.warning "exit requested, bye" exit 0 end end DNSManager.requests << Exit end