Sha256: 1a0508d26eca982e7674d7b70cfb095873e3a8e902dd06946e394b81fae774c4
Contents?: true
Size: 1.67 KB
Versions: 3
Compression:
Stored size: 1.67 KB
Contents
module Dyndnsd module Responder class DynDNSStyle def initialize(app) @app = app end def call(env) @app.call(env).tap do |status_code, headers, body| if headers.key?('X-DynDNS-Response') return decorate_dyndnsd_response(status_code, headers, body) else return decorate_other_response(status_code, headers, body) end end end private def decorate_dyndnsd_response(status_code, headers, body) if status_code == 200 [200, {'Content-Type' => 'text/plain'}, [get_success_body(body[0], body[1])]] elsif status_code == 422 error_response_map[headers['X-DynDNS-Response']] end end def decorate_other_response(status_code, headers, _body) if status_code == 400 [status_code, headers, ['Bad Request']] elsif status_code == 401 [status_code, headers, ['badauth']] end end def get_success_body(changes, myips) changes.map { |change| "#{change} #{myips.join(' ')}" }.join("\n") end def error_response_map { # general http errors 'method_forbidden' => [405, {'Content-Type' => 'text/plain'}, ['Method Not Allowed']], 'not_found' => [404, {'Content-Type' => 'text/plain'}, ['Not Found']], # specific errors 'hostname_missing' => [200, {'Content-Type' => 'text/plain'}, ['notfqdn']], 'hostname_malformed' => [200, {'Content-Type' => 'text/plain'}, ['notfqdn']], 'host_forbidden' => [200, {'Content-Type' => 'text/plain'}, ['nohost']] } end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dyndnsd-2.0.0 | lib/dyndnsd/responder/dyndns_style.rb |
dyndnsd-2.0.0.rc2 | lib/dyndnsd/responder/dyndns_style.rb |
dyndnsd-2.0.0.rc1 | lib/dyndnsd/responder/dyndns_style.rb |