Sha256: 25752b3ef4bad81ba435707cf04ba0b34cec2d9c4c4114d33b93ce57e0019f63

Contents?: true

Size: 1.39 KB

Versions: 5

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

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

5 entries across 5 versions & 1 rubygems

Version Path
saml-kit-1.0.14 lib/saml/kit/response.rb
saml-kit-1.0.13 lib/saml/kit/response.rb
saml-kit-1.0.12 lib/saml/kit/response.rb
saml-kit-1.0.11 lib/saml/kit/response.rb
saml-kit-1.0.10 lib/saml/kit/response.rb