Commit bab8a7a

mo <mo.khan@gmail.com>
2017-12-16 18:37:29
start working towards building metadata for both sp and idp.
1 parent d60b94b
Changed files (5)
lib/saml/kit/builders/templates/metadata.builder
@@ -0,0 +1,4 @@
+#xml.instruct!
+#xml.EntityDescriptor entity_descriptor_options do
+#end
+render service_provider, xml: xml
lib/saml/kit/builders/metadata.rb
@@ -0,0 +1,43 @@
+module Saml
+  module Kit
+    module Builders
+      class Metadata
+        include Templatable
+
+        attr_reader :id
+        attr_reader :entity_id
+        attr_reader :configuration
+        attr_reader :service_provider
+
+        def initialize(configuration: Saml::Kit.configuration)
+          @id = Id.generate
+          @entity_id = configuration.issuer
+          @configuration = configuration
+          @service_provder = nil
+        end
+
+        def build_service_provider
+          @service_provider = Saml::Kit::ServiceProviderMetadata.builder(configuration: configuration) do |x|
+            yield x if block_given?
+          end
+        end
+
+        def build
+          Saml::Kit::Metadata.from(to_xml)
+        end
+
+        private
+
+        def entity_descriptor_options
+          {
+            'xmlns': Namespaces::METADATA,
+            'xmlns:ds': Namespaces::XMLDSIG,
+            'xmlns:saml': Namespaces::ASSERTION,
+            ID: id,
+            entityID: entity_id,
+          }
+        end
+      end
+    end
+  end
+end
lib/saml/kit/builders.rb
@@ -3,6 +3,7 @@ require 'saml/kit/builders/authentication_request'
 require 'saml/kit/builders/identity_provider_metadata'
 require 'saml/kit/builders/logout_request'
 require 'saml/kit/builders/logout_response'
+require 'saml/kit/builders/metadata'
 require 'saml/kit/builders/response'
 require 'saml/kit/builders/service_provider_metadata'
 require 'saml/kit/builders/xml_encryption'
lib/saml/kit/metadata.rb
@@ -109,6 +109,10 @@ module Saml
         end
       end
 
+      def self.builder_class
+        Saml::Kit::Builders::Metadata
+      end
+
       private
 
       def document
spec/saml/builders/metadata_spec.rb
@@ -0,0 +1,20 @@
+RSpec.describe Saml::Kit::Builders::Metadata do
+  describe ".build" do
+    subject { Saml::Kit::Metadata }
+    let(:acs_url) { FFaker::Internet.uri("https") }
+
+    it 'builds metadata for a service provider' do
+      result = subject.build do |builder|
+        builder.build_service_provider do |x|
+          x.add_assertion_consumer_service(acs_url, binding: :http_post)
+        end
+      end
+
+      hash_result = Hash.from_xml(result.to_xml)
+      expect(hash_result['EntityDescriptor']).to be_present
+      expect(hash_result['EntityDescriptor']['SPSSODescriptor']).to be_present
+      expect(hash_result['EntityDescriptor']['SPSSODescriptor']['AssertionConsumerService']).to be_present
+      expect(hash_result['EntityDescriptor']['SPSSODescriptor']['AssertionConsumerService']['Location']).to eql(acs_url)
+    end
+  end
+end