diff options
| -rw-r--r-- | lib/nickserver/dispatcher.rb | 8 | ||||
| -rw-r--r-- | lib/nickserver/request_handlers/base.rb | 18 | ||||
| -rw-r--r-- | lib/nickserver/request_handlers/fingerprint_handler.rb | 25 | ||||
| -rw-r--r-- | lib/nickserver/request_handlers/hkp_email_handler.rb | 12 | ||||
| -rw-r--r-- | lib/nickserver/request_handlers/invalid_email_handler.rb | 12 | ||||
| -rw-r--r-- | lib/nickserver/request_handlers/local_email_handler.rb | 20 | ||||
| -rw-r--r-- | test/unit/request_handlers/local_email_handler_test.rb | 2 | 
7 files changed, 65 insertions, 32 deletions
diff --git a/lib/nickserver/dispatcher.rb b/lib/nickserver/dispatcher.rb index e461f12..9a031ab 100644 --- a/lib/nickserver/dispatcher.rb +++ b/lib/nickserver/dispatcher.rb @@ -47,10 +47,10 @@ module Nickserver      def handler_chain        [ -        RequestHandlers::InvalidEmailHandler.new, -        RequestHandlers::LocalEmailHandler.new, -        RequestHandlers::HkpEmailHandler.new, -        RequestHandlers::FingerprintHandler.new, +        RequestHandlers::InvalidEmailHandler, +        RequestHandlers::LocalEmailHandler, +        RequestHandlers::HkpEmailHandler, +        RequestHandlers::FingerprintHandler,          Proc.new { Nickserver::Response.new(404, "Not Found\n") }        ]      end diff --git a/lib/nickserver/request_handlers/base.rb b/lib/nickserver/request_handlers/base.rb new file mode 100644 index 0000000..e5d8992 --- /dev/null +++ b/lib/nickserver/request_handlers/base.rb @@ -0,0 +1,18 @@ +module Nickserver +  module RequestHandlers +    class Base + +      def self.call(request) +        new(request).handle +      end + +      def initialize(request) +        @request = request +      end + +      protected +      attr_reader :request +    end +  end +end + diff --git a/lib/nickserver/request_handlers/fingerprint_handler.rb b/lib/nickserver/request_handlers/fingerprint_handler.rb index 3c04fcd..5b2dc7d 100644 --- a/lib/nickserver/request_handlers/fingerprint_handler.rb +++ b/lib/nickserver/request_handlers/fingerprint_handler.rb @@ -1,27 +1,30 @@ +require 'nickserver/request_handlers/base'  require 'nickserver/hkp/source'  require 'nickserver/error_response'  module Nickserver    module RequestHandlers -    class FingerprintHandler +    class FingerprintHandler < Base -      def call(request) -        return unless request.fingerprint -        handle_request(request) -      end - -      protected - -      def handle_request(request) -        fingerprint = request.fingerprint +      def handle +        return unless fingerprint          if fingerprint.length == 40 && !fingerprint[/\H/] -          source = Nickserver::Hkp::Source.new            source.get_key_by_fingerprint(fingerprint)          else            ErrorResponse.new('Fingerprint invalid: ' + fingerprint)          end        end +      protected + +      def fingerprint +        request.fingerprint +      end + +      def source +        Nickserver::Hkp::Source.new +      end +      end    end  end diff --git a/lib/nickserver/request_handlers/hkp_email_handler.rb b/lib/nickserver/request_handlers/hkp_email_handler.rb index 799e138..2f73773 100644 --- a/lib/nickserver/request_handlers/hkp_email_handler.rb +++ b/lib/nickserver/request_handlers/hkp_email_handler.rb @@ -3,16 +3,18 @@ require 'nickserver/hkp/source'  module Nickserver    module RequestHandlers -    class HkpEmailHandler +    class HkpEmailHandler < Base -      def call(request) -        return unless request.email -        email = EmailAddress.new(request.email) -        source.query(email) +      def handle +        source.query(email) if request.email        end        protected +      def email +        @email ||= EmailAddress.new(request.email) +      end +        def source          Nickserver::Hkp::Source.new        end diff --git a/lib/nickserver/request_handlers/invalid_email_handler.rb b/lib/nickserver/request_handlers/invalid_email_handler.rb index eaf8156..bb98f65 100644 --- a/lib/nickserver/request_handlers/invalid_email_handler.rb +++ b/lib/nickserver/request_handlers/invalid_email_handler.rb @@ -1,15 +1,21 @@ +require 'nickserver/request_handlers/base'  require 'nickserver/email_address'  require 'nickserver/error_response'  module Nickserver    module RequestHandlers -    class InvalidEmailHandler -      def call(request) +    class InvalidEmailHandler < Base + +      def handle          return unless request.email -        email = EmailAddress.new(request.email)          ErrorResponse.new("Not a valid address") if email.invalid?        end +      protected + +      def email +        @email ||= EmailAddress.new(request.email) +      end      end    end  end diff --git a/lib/nickserver/request_handlers/local_email_handler.rb b/lib/nickserver/request_handlers/local_email_handler.rb index 9e8ed48..9165ef2 100644 --- a/lib/nickserver/request_handlers/local_email_handler.rb +++ b/lib/nickserver/request_handlers/local_email_handler.rb @@ -1,21 +1,25 @@ +require 'nickserver/request_handlers/base'  require 'nickserver/email_address' -require 'nickserver/error_response'  require 'nickserver/couch_db/source'  module Nickserver    module RequestHandlers -    class LocalEmailHandler +    class LocalEmailHandler < Base -      def call(request) -        return nil unless request.email -        domain = Config.domain || request.domain -        email = EmailAddress.new(request.email) -        return nil unless email.domain?(domain) -        source.query email +      def handle +        source.query(email) if request.email && email.domain?(domain)        end        protected +      def domain +        Config.domain || request.domain +      end + +      def email +        @email ||= EmailAddress.new(request.email) +      end +        def source          Nickserver::CouchDB::Source.new        end diff --git a/test/unit/request_handlers/local_email_handler_test.rb b/test/unit/request_handlers/local_email_handler_test.rb index 1bfe264..1645451 100644 --- a/test/unit/request_handlers/local_email_handler_test.rb +++ b/test/unit/request_handlers/local_email_handler_test.rb @@ -26,7 +26,7 @@ class LocalEmailHandlerTest < MiniTest::Test    protected    def handler -    Nickserver::RequestHandlers::LocalEmailHandler.new +    Nickserver::RequestHandlers::LocalEmailHandler    end    def source_class  | 
