diff options
-rw-r--r-- | lib/nickserver/request.rb | 30 | ||||
-rw-r--r-- | lib/nickserver/request_handler.rb | 36 | ||||
-rw-r--r-- | test/unit/request_test.rb | 44 |
3 files changed, 79 insertions, 31 deletions
diff --git a/lib/nickserver/request.rb b/lib/nickserver/request.rb new file mode 100644 index 0000000..c21c280 --- /dev/null +++ b/lib/nickserver/request.rb @@ -0,0 +1,30 @@ +module Nickserver + class Request + def initialize(params, headers) + @params = params || {} + @headers = headers + end + + def email + param("address") + end + + def fingerprint + param("fingerprint") + end + + def domain + host_header = headers['Host'] || '' + domain_part = host_header.split(':')[0] || '' + domain_part.strip.sub(/^nicknym\./, '') + end + + protected + + def param(key) + params[key] && params[key].first + end + + attr_reader :params, :headers + end +end diff --git a/lib/nickserver/request_handler.rb b/lib/nickserver/request_handler.rb index 239ac5f..1239c44 100644 --- a/lib/nickserver/request_handler.rb +++ b/lib/nickserver/request_handler.rb @@ -1,44 +1,16 @@ require 'nickserver/hkp/source' require 'nickserver/couch_db/source' +require 'nickserver/request' module Nickserver class RequestHandler - class Request - def initialize(params, headers) - @params = params || {} - @headers = headers - end - - def email - param("address") - end - - def fingerprint - param("fingerprint") - end - - def domain - host_header = headers['Host'] - raise MissingHostHeader if host_header.nil? - host_header.split(':')[0].strip.sub(/^nicknym\./, '') - end - - protected - - def param(key) - params[key] && params[key].first - end - - attr_reader :params, :headers - end - def initialize(responder) @responder = responder end def respond_to(params, headers) - request = Request.new params, headers + request = Nickserver::Request.new params, headers response = handle request send_response response.status, response.content end @@ -95,7 +67,9 @@ module Nickserver # If 'domain' is not configured, we rely on the Host header of the HTTP request. # def local_address?(email, request) - email.domain?(Config.domain || request.domain) + domain = Config.domain || request.domain + raise MissingHostHeader if domain == '' + email.domain? domain end end diff --git a/test/unit/request_test.rb b/test/unit/request_test.rb new file mode 100644 index 0000000..698a275 --- /dev/null +++ b/test/unit/request_test.rb @@ -0,0 +1,44 @@ +require 'test_helper' +require 'nickserver/request' + +class Nickserver::RequestTest < Minitest::Test + + def test_email + request = request_with_params address: fake_email + assert_equal fake_email, request.email + end + + def test_blank_email + request = request_with_params + assert_equal nil, request.email + end + + def test_fingerprint + request = request_with_params fingerprint: fake_fingerprint + assert_equal fake_fingerprint, request.fingerprint + end + + def test_domain + request = Nickserver::Request.new Hash.new, + 'Host' => ' nicknym.my.domain.tld:123' + assert_equal 'my.domain.tld', request.domain + end + + protected + + # params are encoded with strings as keys and arrays with the + # given value(s) + def request_with_params(params = {}) + params = params.collect{|k,v| [k.to_s, Array(v)]}.to_h + Nickserver::Request.new params, {} + end + + def fake_email + 'test@domain.tld' + end + + def fake_fingerprint + 'F' * 40 + end + +end |