Sha256: 326ad4e2236e5ae606650bef4c5f7f67d7ba98608ac5a22b856016f4333ecc7f

Contents?: true

Size: 1.93 KB

Versions: 22

Compression:

Stored size: 1.93 KB

Contents

require 'happymapper'

module Saml
  module ComplexTypes
    module RequestAbstractType
      extend ActiveSupport::Concern
      include Saml::Base
      include Saml::XMLHelpers

      included do
        register_namespace 'samlp', Saml::SAMLP_NAMESPACE
        register_namespace 'saml', Saml::SAML_NAMESPACE
        namespace 'samlp'

        attribute :_id, String, tag: 'ID'
        attribute :version, String, tag: 'Version'
        attribute :issue_instant, Time, tag: 'IssueInstant', on_save: lambda { |val| val.utc.xmlschema if val.present? }
        attribute :consent, String, tag: 'Consent'

        attribute :destination, String, tag: 'Destination'
        element :issuer, String, namespace: 'saml', tag: 'Issuer'

        has_one :signature, Saml::Elements::Signature, xpath: "./"
        has_one :extensions, Saml::Elements::SAMLPExtensions

        attr_accessor :actual_destination

        validates :_id, :version, :issue_instant, presence: true

        validates :version, inclusion: %w(2.0)
        validate :check_destination, if: 'destination.present? && actual_destination.present?'
        validate :check_issue_instant, if: 'issue_instant.present?'
      end

      def initialize(*args)
        super(*args)
        @_id           ||= Saml.generate_id
        @issue_instant ||= Time.now
        @issuer        ||= Saml.current_provider.entity_id
        @version       ||= Saml::SAML_VERSION
      end

      # @return [Saml::Provider]
      def provider
        Saml.provider(issuer)
      end

      private

      def check_issue_instant
        errors.add(:issue_instant, :too_old) if issue_instant < Time.now - Saml::Config.max_issue_instant_offset.minutes
        errors.add(:issue_instant, :too_new) if issue_instant > Time.now + Saml::Config.max_issue_instant_offset.minutes
      end

      def check_destination
        errors.add(:destination, :invalid) unless actual_destination.start_with?(destination)
      end
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
libsaml-2.14.0 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.13.1 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.12.1 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.12.0 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.11.2 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.11.1 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.11.0 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.10.7 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.10.6 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.10.5 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.10.4 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.10.3 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.10.2 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.10.1 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.10.0 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.9.0 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.8.1 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.8.0 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.7.0 lib/saml/complex_types/request_abstract_type.rb
libsaml-2.6.9 lib/saml/complex_types/request_abstract_type.rb