class Acmesmith::ChallengeResponders::Designate
Public Class Methods
new(config)
click to toggle source
# File lib/acmesmith/challenge_responders/designate.rb, line 12 def initialize(config) @config = config config_yao(@config[:identity]) end
Public Instance Methods
cleanup(domain, challenge)
click to toggle source
# File lib/acmesmith/challenge_responders/designate.rb, line 27 def cleanup(domain, challenge) domain = canonicalize(domain) zone = find_zone(domain) name = [challenge.record_name, domain].join(?.) if record = zone.records.list.find {|r| r.name == name } zone.records.destroy(record.id) end end
respond(domain, challenge)
click to toggle source
# File lib/acmesmith/challenge_responders/designate.rb, line 17 def respond(domain, challenge) domain = canonicalize(domain) find_zone(domain).records.create( name: [challenge.record_name, domain].join(?.), type: challenge.record_type, data: challenge.record_content, ttl: @config[:ttl], ) end
support?(type)
click to toggle source
# File lib/acmesmith/challenge_responders/designate.rb, line 8 def support?(type) type == 'dns-01' end
Private Instance Methods
canonicalize(domain)
click to toggle source
# File lib/acmesmith/challenge_responders/designate.rb, line 38 def canonicalize(domain) "#{domain}.".gsub(/\.{2,}/, '.') end
config_yao(identity)
click to toggle source
# File lib/acmesmith/challenge_responders/designate.rb, line 51 def config_yao(identity) Yao.config do auth_url(identity&.dig('auth_url') || ENV['OS_AUTH_URL']) tenant_name(identity&.dig('tenant_name') || ENV['OS_TENANT_NAME']) username(identity&.dig('username') || ENV['OS_USERNAME']) password(identity&.dig('password') || ENV['OS_PASSWORD']) end end
find_zone(domain)
click to toggle source
# File lib/acmesmith/challenge_responders/designate.rb, line 46 def find_zone(domain) zones.select {|z| domain =~ /(?:\A|\.)#{Regexp.escape(z.name)}\z/ }.max_by {|z| z.name.length } or fail "Domain #{domain} is not configured in Designate" end
zones()
click to toggle source
# File lib/acmesmith/challenge_responders/designate.rb, line 42 def zones @zones ||= Yao::Domain.list end