Get a zone.
This commit is contained in:
parent
1df35ad4c3
commit
9449ba336f
@ -46,6 +46,13 @@ class DNSManager::Client < IPC
|
||||
parse_message [ Response::Success ], read
|
||||
end
|
||||
|
||||
# Get a zone.
|
||||
def user_zone_get(domain : String)
|
||||
request = DNSManager::Request::GetZone.new domain
|
||||
send_now request
|
||||
parse_message [ Response::Zone ], read
|
||||
end
|
||||
|
||||
# Get user domain list.
|
||||
def user_domain_list()
|
||||
request = DNSManager::Request::UserDomains.new
|
||||
|
@ -37,8 +37,10 @@ class Actions
|
||||
|
||||
# Maintenance
|
||||
@the_call["admin-maintenance"] = ->admin_maintenance
|
||||
|
||||
@the_call["user-zone-add"] = ->user_zone_add
|
||||
@the_call["user-zone-del"] = ->user_zone_del
|
||||
@the_call["user-zone-get"] = ->user_zone_get
|
||||
@the_call["user-domain-list"] = ->user_domain_list
|
||||
end
|
||||
|
||||
@ -93,6 +95,18 @@ class Actions
|
||||
end
|
||||
end
|
||||
|
||||
def user_zone_get
|
||||
domains = Context.args.not_nil!
|
||||
domains.each do |domain|
|
||||
begin
|
||||
pp! domain
|
||||
pp! @dnsmanagerd.user_zone_get domain
|
||||
rescue e
|
||||
puts "error for user_zone_get: #{e.message}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def user_domain_list
|
||||
response = @dnsmanagerd.user_domain_list
|
||||
case response
|
||||
|
@ -128,6 +128,13 @@ def parsing_cli(authd_config : Baguette::Configuration::Auth)
|
||||
unrecognized_args_to_context_args.call parser, nil, 1
|
||||
end
|
||||
|
||||
parser.on("get", "Get a zone.") do
|
||||
Baguette::Log.info "get zone."
|
||||
Context.command = "user-zone-get"
|
||||
parser.banner = "COMMAND: user zone get domain [domain...]"
|
||||
unrecognized_args_to_context_args.call parser, nil, 1
|
||||
end
|
||||
|
||||
parser.on("list", "List all domains.") do
|
||||
Baguette::Log.info "List domains."
|
||||
Context.command = "user-domain-list"
|
||||
|
@ -31,7 +31,21 @@ class DNSManager::Request
|
||||
end
|
||||
DNSManager.requests << DeleteZone
|
||||
|
||||
IPC::JSON.message UserDomains, 12 do
|
||||
IPC::JSON.message GetZone, 12 do
|
||||
property domain : String
|
||||
|
||||
def initialize(@domain)
|
||||
end
|
||||
|
||||
def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event) : IPC::JSON
|
||||
user = dnsmanagerd.get_logged_user event
|
||||
raise NotLoggedException.new if user.nil?
|
||||
dnsmanagerd.storage.get_zone user.uid, @domain
|
||||
end
|
||||
end
|
||||
DNSManager.requests << GetZone
|
||||
|
||||
IPC::JSON.message UserDomains, 13 do
|
||||
def initialize()
|
||||
end
|
||||
|
||||
|
@ -15,7 +15,20 @@ class DNSManager::Response
|
||||
end
|
||||
DNSManager.responses << DomainChanged
|
||||
|
||||
IPC::JSON.message DomainList, 12 do
|
||||
IPC::JSON.message Zone, 12 do
|
||||
property zone : Storage::Zone
|
||||
def initialize(@zone)
|
||||
end
|
||||
end
|
||||
DNSManager.responses << Zone
|
||||
|
||||
IPC::JSON.message UnknownZone, 13 do
|
||||
def initialize()
|
||||
end
|
||||
end
|
||||
DNSManager.responses << UnknownZone
|
||||
|
||||
IPC::JSON.message DomainList, 14 do
|
||||
property domains : Array(String)
|
||||
def initialize(@domains)
|
||||
end
|
||||
|
@ -121,6 +121,31 @@ class DNSManager::Storage
|
||||
Response::Error.new "error while deleting the domain #{domain}"
|
||||
end
|
||||
|
||||
def get_zone(user_id : Int32, domain : String) : IPC::JSON
|
||||
# User must exist.
|
||||
user_data = user_data_by_uid.get? user_id.to_s
|
||||
unless user_data
|
||||
Baguette::Log.warning "unknown user #{user_id} tries to get zone #{domain}"
|
||||
return Response::UnknownUser.new
|
||||
end
|
||||
|
||||
# User must own the domain.
|
||||
unless user_data.domains.includes? domain
|
||||
Baguette::Log.warning "user #{user_id} tries to get zone #{domain} but doesn't own it"
|
||||
return Response::NoOwnership.new
|
||||
end
|
||||
|
||||
zone = zones_by_domain.get? domain
|
||||
unless zone
|
||||
return Response::UnknownZone.new
|
||||
end
|
||||
|
||||
Response::Zone.new zone
|
||||
rescue e
|
||||
Baguette::Log.error "trying to get a zone #{domain}: #{e}"
|
||||
Response::Error.new "error while accessing a zone #{domain}"
|
||||
end
|
||||
|
||||
def user_domains(user_id : Int32) : IPC::JSON
|
||||
# User must exist.
|
||||
user_data = user_data_by_uid.get? user_id.to_s
|
||||
|
Loading…
Reference in New Issue
Block a user