Sha256: 158d8a1363777b8f14addc6e84e73d8f05578d294cf3b80091bcb39437532fc5

Contents?: true

Size: 1.36 KB

Versions: 3

Compression:

Stored size: 1.36 KB

Contents

module Saml
  module Kit
    # {include:file:spec/examples/response_spec.rb}
    class Response < Document
      include Respondable
      extend Forwardable

      def_delegators :assertion, :name_id, :[], :attributes

      validate :must_be_valid_assertion
      validate :must_contain_single_assertion

      def initialize(xml, request_id: nil, configuration: Saml::Kit.configuration)
        @request_id = request_id
        super(xml, name: 'Response', configuration: configuration)
      end

      def assertion(private_keys = configuration.private_keys(use: :encryption))
        @assertion ||=
          begin
            node = assertion_nodes.last
            if node.nil?
              Saml::Kit::NullAssertion.new
            else
              Saml::Kit::Assertion.new(node, configuration: @configuration, private_keys: private_keys)
            end
          end
      end

      private

      def must_be_valid_assertion
        assertion.valid?
        assertion.errors.each do |attribute, error|
          attribute = :assertion if attribute == :base
          errors[attribute] << error
        end
      end

      def must_contain_single_assertion
        return if assertion_nodes.count <= 1
        errors[:base] << error_message(:must_contain_single_assertion)
      end

      def assertion_nodes
        search(Saml::Kit::Assertion::XPATH)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
saml-kit-1.0.9 lib/saml/kit/response.rb
saml-kit-1.0.8 lib/saml/kit/response.rb
saml-kit-1.0.7 lib/saml/kit/response.rb