Commit 308b2e1

mo <mo@mokhan.ca>
2017-11-18 02:19:54
push up must_be_request.
1 parent 19eb135
lib/saml/kit/authentication_request.rb
@@ -3,7 +3,6 @@ module Saml
     class AuthenticationRequest < Document
       include Requestable
       validates_presence_of :acs_url, if: :login?
-      validate :must_be_request
       validate :must_have_valid_signature
       validate :must_be_registered
       validate :must_match_xsd
@@ -56,12 +55,6 @@ module Saml
         end
       end
 
-      def must_be_request
-        return if to_h.nil?
-
-        errors[:base] << error_message(:invalid) unless login?
-      end
-
       def must_match_xsd
         matches_xsd?(PROTOCOL_XSD)
       end
lib/saml/kit/logout_request.rb
@@ -3,7 +3,6 @@ module Saml
     class LogoutRequest < Document
       include Requestable
       validates_presence_of :single_logout_service, if: :logout?
-      validate :must_be_request
       validate :must_have_valid_signature
       validate :must_be_registered
       validate :must_match_xsd
@@ -42,12 +41,6 @@ module Saml
         end
       end
 
-      def must_be_request
-        return if to_h.nil?
-
-        errors[:base] << error_message(:invalid) unless logout?
-      end
-
       def must_be_registered
         return unless logout?
         if provider.nil?
lib/saml/kit/requestable.rb
@@ -1,9 +1,25 @@
 module Saml
   module Kit
     module Requestable
+      extend ActiveSupport::Concern
+      included do
+        validate :must_be_request
+      end
+
       def query_string_parameter
         'SAMLRequest'
       end
+
+      def must_be_request
+        return if to_h.nil?
+
+        errors[:base] << error_message(:invalid) unless request?
+      end
+
+      def request?
+        return false if to_xml.blank?
+        to_h[name].present?
+      end
     end
   end
 end
spec/saml/authentication_request_spec.rb
@@ -79,7 +79,7 @@ RSpec.describe Saml::Kit::AuthenticationRequest do
       xml = Saml::Kit::IdentityProviderMetadata::Builder.new.to_xml
       subject = described_class.new(xml)
       expect(subject).to be_invalid
-      expect(subject.errors[:base]).to be_present
+      expect(subject.errors[:base]).to include(subject.error_message(:invalid))
     end
 
     it 'is invalid when the fingerprint of the certificate does not match the registered fingerprint' do
spec/saml/logout_request_spec.rb
@@ -63,7 +63,7 @@ RSpec.describe Saml::Kit::LogoutRequest do
       xml = Saml::Kit::IdentityProviderMetadata::Builder.new.to_xml
       subject = described_class.new(xml)
       expect(subject).to be_invalid
-      expect(subject.errors[:base]).to be_present
+      expect(subject.errors[:base]).to include(subject.error_message(:invalid))
     end
 
     it 'is invalid when the fingerprint of the certificate does not match the registered fingerprint' do