diff --git a/src/responses/zone.cr b/src/responses/zone.cr index 825c60e..487f540 100644 --- a/src/responses/zone.cr +++ b/src/responses/zone.cr @@ -78,5 +78,13 @@ class DNSManager::Response end end DNSManager.responses << RRAdded + + IPC::JSON.message InvalidRR, 20 do + # For now, Error is just an alias on String. + property errors : Array(Storage::Zone::Error) + def initialize(@errors) + end + end + DNSManager.responses << InvalidRR end diff --git a/src/storage.cr b/src/storage.cr index f967690..3dc4271 100644 --- a/src/storage.cr +++ b/src/storage.cr @@ -164,7 +164,7 @@ class DNSManager::Storage rr.get_errors.tap do |errors| unless errors.empty? Baguette::Log.warning "add RR with errors: #{errors}" - return Response::InvalidZone.new errors + return Response::InvalidRR.new errors end end @@ -201,7 +201,7 @@ class DNSManager::Storage rr.get_errors.tap do |errors| unless errors.empty? Baguette::Log.warning "update RR with errors: #{errors}" - return Response::InvalidZone.new errors + return Response::InvalidRR.new errors end end @@ -233,9 +233,7 @@ class DNSManager::Storage # Zone must exist. zone = zones_by_domain.get? domain - unless zone - return Response::InvalidZone.new ["Domain not found."] - end + return Response::DomainNotFound.new unless zone # User must own the zone. unless user_data.domains.includes?(domain) || user_data.admin diff --git a/src/storage/zone.cr b/src/storage/zone.cr index b012cbb..4e7f1c9 100644 --- a/src/storage/zone.cr +++ b/src/storage/zone.cr @@ -332,7 +332,7 @@ class DNSManager::Storage::Zone # This regex only is "good enough for now". def self.is_domain_valid?(domain) : Bool - if domain =~ /^(((?!-))(xn--|_{1,1})?[a-z0-9-]{0,61}[a-z0-9]{1,1}\.)*((xn--)?[a-z0-9][a-z0-9\-]{0,60}[a-z0-9]|(xn--)?[a-z0-9]{1,60})\.[a-z]{2,}$/ + if domain =~ /^(((?!-))(xn--|_{1,1})?[a-z0-9-]{0,61}[a-z0-9]{1,1}\.)*((xn--)?[a-z0-9][a-z0-9\-]{0,60}[a-z0-9]|(xn--)?[a-z0-9]{1,60})\.[a-z]{2,}\.?$/ true else false