Add DynDNS.com compatible responder

This commit is contained in:
cn 2013-04-27 14:30:41 +02:00
parent 3a39f4fa0a
commit 315e460c28
2 changed files with 21 additions and 1 deletions

View File

@ -8,6 +8,7 @@ require 'rack'
require 'dyndnsd/generator/bind'
require 'dyndnsd/updater/command_with_bind_zone'
require 'dyndnsd/responder/dyndns_style'
require 'dyndnsd/responder/rest_style'
require 'dyndnsd/database'
require 'dyndnsd/version'
@ -110,7 +111,7 @@ module Dyndnsd
db = Database.new(config['db'])
updater = Updater::CommandWithBindZone.new(config['updater']['params']) if config['updater']['name'] == 'command_with_bind_zone'
responder = Responder::RestStyle.new
responder = Responder::DynDNSStyle.new
app = Daemon.new(config, db, updater, responder)
app = Rack::Auth::Basic.new(app, "DynDNS") do |user,pass|

View File

@ -0,0 +1,19 @@
module Dyndnsd
module Responder
class DynDNSStyle
def response_for(state, ip = nil)
# general http errors
return [405, {"Content-Type" => "text/plain"}, ["Method Not Allowed"]] if state == :method_forbidden
return [404, {"Content-Type" => "text/plain"}, ["Not Found"]] if state == :not_found
# specific errors
return [200, {"Content-Type" => "text/plain"}, ["notfqdn"]] if state == :hostname_missing
return [200, {"Content-Type" => "text/plain"}, ["nohost"]] if state == :host_forbidden
return [200, {"Content-Type" => "text/plain"}, ["notfqdn"]] if state == :hostname_malformed
# OKs
return [200, {"Content-Type" => "text/plain"}, ["good #{ip}"]] if state == :good
return [200, {"Content-Type" => "text/plain"}, ["nochg #{ip}"]] if state == :nochg
end
end
end
end