Sha256: 0f7ec6fd1a9e756a72a41a93c3b20144b66ed8a8691b3434a39941efd847bc24

Contents?: true

Size: 1.58 KB

Versions: 9

Compression:

Stored size: 1.58 KB

Contents

# frozen_string_literal: true

module Saml
  module Kit
    # This class is responsible for validating and
    # parsing a SAML Response document.
    # {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

9 entries across 9 versions & 1 rubygems

Version Path
saml-kit-1.0.24 lib/saml/kit/response.rb
saml-kit-1.0.23 lib/saml/kit/response.rb
saml-kit-1.0.22 lib/saml/kit/response.rb
saml-kit-1.0.21 lib/saml/kit/response.rb
saml-kit-1.0.20 lib/saml/kit/response.rb
saml-kit-1.0.19 lib/saml/kit/response.rb
saml-kit-1.0.18 lib/saml/kit/response.rb
saml-kit-1.0.17 lib/saml/kit/response.rb
saml-kit-1.0.16 lib/saml/kit/response.rb