43 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Crystal
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Crystal
		
	
	
	
	
	
require "json"
 | 
						|
require "../src/storage/zone.cr"
 | 
						|
 | 
						|
alias DSZ = DNSManager::Storage::Zone
 | 
						|
 | 
						|
#
 | 
						|
# Create a zone file.
 | 
						|
#
 | 
						|
 | 
						|
if ARGV.size < 1
 | 
						|
	puts "usage: domain"
 | 
						|
	exit 0
 | 
						|
end
 | 
						|
 | 
						|
domain = ARGV[0]
 | 
						|
zone = DSZ.new domain
 | 
						|
 | 
						|
#
 | 
						|
# Add some values.
 | 
						|
#
 | 
						|
 | 
						|
zone << DSZ::SOA.new  "#{domain}.", # name
 | 
						|
  3600.to_u32,                      # TTL
 | 
						|
  "ns0.#{domain}.",                 # Master Name Server for the zone
 | 
						|
  "dnsmaster.#{domain}.",           # admin email address
 | 
						|
  2024112500.to_u64,                # serial
 | 
						|
        3600.to_u64,                # refresh
 | 
						|
         600.to_u64,                # retry
 | 
						|
     2419200.to_u64,                # expire
 | 
						|
         600.to_u64                 # minimum TTL
 | 
						|
 | 
						|
# NS: name ttl target
 | 
						|
zone << DSZ::NS.new "#{domain}.", 3600.to_u32, "ns0.karchnu.fr."
 | 
						|
zone << DSZ::NS.new "#{domain}.", 3600.to_u32, "ns1.karchnu.fr."
 | 
						|
 | 
						|
# All default values are read-only (by default).
 | 
						|
# Still, some dedicated messages can change some of these values, but the default behavior is to protect my SANITY.
 | 
						|
# DO NOT ALLOW USERS TO MESS WITH IMPORTANT VALUES UNLESS YOU CHECK IT INTENSIVELY.
 | 
						|
zone.resources.each do |rr|
 | 
						|
	rr.readonly = true
 | 
						|
end
 | 
						|
 | 
						|
File.write("#{domain}.json", zone.to_json)
 |