Admin: enable searching for a domain.
This commit is contained in:
parent
7a1e3d4755
commit
a448b68fcc
3 changed files with 55 additions and 0 deletions
|
@ -54,6 +54,29 @@ class DNSManager::Request
|
||||||
end
|
end
|
||||||
DNSManager.requests << Maintenance
|
DNSManager.requests << Maintenance
|
||||||
|
|
||||||
|
# Force the generation of a zone file.
|
||||||
|
IPC::JSON.message SearchDomain, 24 do
|
||||||
|
property domain : String
|
||||||
|
property offset : Int32?
|
||||||
|
|
||||||
|
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.search_domain @domain
|
||||||
|
end
|
||||||
|
end
|
||||||
|
DNSManager.requests << SearchDomain
|
||||||
|
|
||||||
# Generate all zone files.
|
# Generate all zone files.
|
||||||
# TODO: should conveniently skip already generated zones.
|
# TODO: should conveniently skip already generated zones.
|
||||||
IPC::JSON.message GenerateAllZoneFiles, 100 do
|
IPC::JSON.message GenerateAllZoneFiles, 100 do
|
||||||
|
|
|
@ -192,4 +192,16 @@ class DNSManager::Response
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
DNSManager.responses << OrphanDomainList
|
DNSManager.responses << OrphanDomainList
|
||||||
|
|
||||||
|
IPC::JSON.message FoundDomains, 25 do
|
||||||
|
property domains : Array(String)
|
||||||
|
def initialize(@domains)
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_s(io : IO)
|
||||||
|
super io
|
||||||
|
io << " (domains: #{@domains[0..5].join ","})"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
DNSManager.responses << FoundDomains
|
||||||
end
|
end
|
||||||
|
|
|
@ -106,6 +106,26 @@ class DNSManager::Storage
|
||||||
Response::Success.new
|
Response::Success.new
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Only an admin can access this function.
|
||||||
|
def search_domain(domain_to_search : String) : IPC::JSON
|
||||||
|
# WIP: test the request first.
|
||||||
|
unless domain_to_search =~ /^([_0-9A-Za-z-.]+)$/
|
||||||
|
return Response::Error.new "Invalid domain request"
|
||||||
|
end
|
||||||
|
|
||||||
|
Baguette::Log.info "(admin) searching for a domain: #{domain_to_search}"
|
||||||
|
|
||||||
|
pattern = Regex.new domain_to_search, Regex::Options::IGNORE_CASE
|
||||||
|
domains = Array(String).new
|
||||||
|
@domains.each do |d|
|
||||||
|
if pattern =~ d.name
|
||||||
|
domains << d.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Response::FoundDomains.new domains
|
||||||
|
end
|
||||||
|
|
||||||
# Provides the generated zone file to a user.
|
# Provides the generated zone file to a user.
|
||||||
def get_generated_zonefile(user_id : UserDataID, domain : String) : IPC::JSON
|
def get_generated_zonefile(user_id : UserDataID, domain : String) : IPC::JSON
|
||||||
zone = zone_must_exist! domain
|
zone = zone_must_exist! domain
|
||||||
|
|
Loading…
Add table
Reference in a new issue