113 lines
3.1 KiB
Crystal
113 lines
3.1 KiB
Crystal
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
|