Commit bab8a7a
Changed files (5)
lib
saml
kit
spec
saml
builders
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