Commit 10697bd
Changed files (3)
lib
saml
kit
builders
spec
saml
kit
builders
lib/saml/kit/builders/assertion.rb
@@ -7,16 +7,23 @@ module Saml
# {include:file:lib/saml/kit/builders/templates/assertion.builder}
class Assertion
include XmlTemplatable
- extend Forwardable
-
- def_delegators :@response_builder,
- :request, :issuer, :reference_id, :now, :configuration, :user,
- :version, :destination
+ attr_reader :user, :request, :configuration
+ attr_accessor :reference_id
+ attr_accessor :now, :destination
+ attr_accessor :issuer, :version
attr_accessor :default_name_id_format
- def initialize(response_builder, embed_signature)
- @response_builder = response_builder
+ def initialize(user, request = nil, embed_signature, configuration: Saml::Kit.configuration, now: Time.now.utc, destination: nil, signing_key_pair: nil, issuer: nil)
+ @user = user
+ @request = request
+ @destination = destination
+ @configuration = configuration
+ @issuer = issuer || configuration.entity_id
+ @reference_id = ::Xml::Kit::Id.generate
+ @version = '2.0'
+ @now = now
+ @signing_key_pair = signing_key_pair
self.embed_signature = embed_signature
self.default_name_id_format = Saml::Kit::Namespaces::UNSPECIFIED_NAMEID
end
@@ -34,8 +41,8 @@ module Saml
user.assertion_attributes_for(request)
end
- def signing_key_pair
- super || @response_builder.signing_key_pair
+ def build
+ Saml::Kit::Assertion.new(to_xml, configuration: configuration)
end
private
lib/saml/kit/builders/response.rb
@@ -8,7 +8,7 @@ module Saml
class Response
include XmlTemplatable
attr_reader :user, :request
- attr_accessor :id, :reference_id, :now
+ attr_accessor :id, :now
attr_accessor :version, :status_code, :status_message
attr_accessor :issuer, :destination
attr_reader :configuration
@@ -19,7 +19,6 @@ module Saml
@user = user
@request = request
@id = ::Xml::Kit::Id.generate
- @reference_id = ::Xml::Kit::Id.generate
@now = Time.now.utc
@version = '2.0'
@status_code = Namespaces::SUCCESS
@@ -47,7 +46,14 @@ module Saml
@assertion ||=
begin
assertion = Saml::Kit::Builders::Assertion.new(
- self, embed_signature
+ user,
+ request,
+ embed_signature,
+ configuration: configuration,
+ now: now,
+ destination: destination,
+ signing_key_pair: signing_key_pair,
+ issuer: issuer
)
if encrypt
Saml::Kit::Builders::EncryptedAssertion.new(self, assertion)
spec/saml/kit/builders/assertion_builder_spec.rb
@@ -0,0 +1,23 @@
+require 'spec_helper'
+
+RSpec.describe Saml::Kit::Builders::Assertion do
+ describe "#build" do
+ let(:email) { FFaker::Internet.email }
+ let(:assertion_consumer_service_url) { FFaker::Internet.uri('https') }
+ let(:user) { User.new(attributes: { email: email, created_at: Time.now.utc.iso8601 }) }
+ let(:request) { instance_double(Saml::Kit::AuthenticationRequest, id: Xml::Kit::Id.generate, assertion_consumer_service_url: assertion_consumer_service_url, issuer: issuer, name_id_format: Saml::Kit::Namespaces::EMAIL_ADDRESS, provider: provider, trusted?: true, signed?: true) }
+ let(:provider) { instance_double(Saml::Kit::ServiceProviderMetadata, want_assertions_signed: false, encryption_certificates: [configuration.certificates(use: :encryption).last]) }
+ let(:issuer) { FFaker::Internet.uri('https') }
+ let(:configuration) do
+ Saml::Kit::Configuration.new do |config|
+ config.entity_id = issuer
+ config.generate_key_pair_for(use: :signing)
+ config.generate_key_pair_for(use: :encryption)
+ end
+ end
+
+ subject { described_class.new(user, request, configuration: configuration) }
+
+ specify { expect(subject.build).to be_valid }
+ end
+end