Commit 89013ce

mo <mo.khan@gmail.com>
2017-10-28 21:16:34
connect i18n and deliver error message.
1 parent c9468d1
lib/saml/kit/locales/en.yml
@@ -0,0 +1,5 @@
+---
+en:
+  saml/kit:
+    errors:
+      invalid_idp_metadata: "must contain identity provider metadata."
lib/saml/kit/identity_provider_metadata.rb
@@ -57,6 +57,7 @@ module Saml
       end
 
       def validate
+        yield error_message(:invalid_idp_metadata) unless idp_metadata?
       end
 
       def to_xml
@@ -65,6 +66,15 @@ module Saml
 
       private
 
+      def error_message(key)
+        message = I18n.translate(key, scope: 'saml/kit.errors')
+        OpenStruct.new(message: message)
+      end
+
+      def idp_metadata?
+        find_by('/md:EntityDescriptor/md:IDPSSODescriptor').present?
+      end
+
       def fingerprint_for(value)
         x509 = OpenSSL::X509::Certificate.new(value)
         OpenSSL::Digest::SHA256.new.hexdigest(x509.to_der).upcase.scan(/../).join(":")
lib/saml/kit.rb
@@ -15,6 +15,8 @@ require "saml/kit/service_provider_registry"
 require "saml/kit/identity_provider_metadata"
 require "saml/kit/service_provider_metadata"
 
+I18n.load_path += Dir[File.expand_path("kit/locales/*.yml", File.dirname(__FILE__))]
+
 module Saml
   module Kit
     def self.configuration
spec/saml/identity_provider_metadata_spec.rb
@@ -109,7 +109,6 @@ EOS
         { location: "https://win2008r2-ad-sso.qa1.immunet.com/adfs/ls/", binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" },
       ])
     end
-    it { expect(subject.certificate_base64).to eql(certificate) }
     it do
       expect(subject.certificates).to match_array([
         { use: 'signing', value: Base64.decode64(signing_certificate), fingerprint: "E6:03:E1:2D:F2:70:9C:D6:CC:8B:3E:4C:5A:37:F5:53:D7:B2:78:B1:2E:95:5B:31:5C:56:E8:7F:16:A1:1B:D2"  },
@@ -197,7 +196,7 @@ EOS
         errors << error
       end
       expect(errors).to be_present
-      expect(errors[0].message).to eql(I18n.translate("activerecord.errors.models.sso_configuration.attributes.metadata.not_service_provider"))
+      expect(errors[0].message).to eql(I18n.translate("saml/kit.errors.invalid_idp_metadata"))
     end
 
     it 'is invalid, when the metadata is nil' do