class Saml::Assertion

Attributes

xml_value[RW]

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/saml/assertion.rb, line 33
def initialize(*args)
  options          = args.extract_options!
  if options[:subject].present?
    @subject = options.delete(:subject)
  else
    @subject         = Saml::Elements::Subject.new(name_id: options.delete(:name_id),
                                                   name_id_format: options.delete(:name_id_format),
                                                   recipient: options.delete(:recipient),
                                                   in_response_to: options.delete(:in_response_to))
  end

  @conditions      = Saml::Elements::Conditions.new(audience: options.delete(:audience))
  authn_instant    = options.delete(:authn_instant) || Time.now
  @authn_statement = Saml::Elements::AuthnStatement.new(authn_instant: authn_instant,
                                                        address: options.delete(:address),
                                                        authn_context_class_ref: options.delete(:authn_context_class_ref),
                                                        session_index: options.delete(:session_index))
  super(*(args << options))
  @_id           ||= Saml.generate_id
  @issue_instant ||= Time.now
  @issuer        ||= Saml.current_provider.entity_id
  @version       ||= Saml::SAML_VERSION
end

Public Instance Methods

add_attribute(key, value_or_values, value_attributes = {}, attribute_options = {}) click to toggle source
# File lib/saml/assertion.rb, line 62
def add_attribute(key, value_or_values, value_attributes = {}, attribute_options = {})
  self.attribute_statement ||= Saml::Elements::AttributeStatement.new
  self.attribute_statement.attributes ||= []
  attribute_values = case value_or_values
  when Saml::Elements::NameId
    [Saml::Elements::AttributeValue.new(value_attributes.merge(name_id: value_or_values))]
  else
    Array(value_or_values).collect do |value|
      Saml::Elements::AttributeValue.new(value_attributes.merge(content: value))
    end
  end
  self.attribute_statement.attributes << Saml::Elements::Attribute.new(
    attribute_options.merge(name: key, attribute_values: attribute_values)
  )
end
attribute_statement() click to toggle source
# File lib/saml/assertion.rb, line 98
def attribute_statement
  attribute_statements.try(:first)
end
attribute_statement=(attribute_statement) click to toggle source
# File lib/saml/assertion.rb, line 102
def attribute_statement=(attribute_statement)
  self.attribute_statements = [attribute_statement]
end
fetch_attribute(key) click to toggle source
# File lib/saml/assertion.rb, line 78
def fetch_attribute(key)
  Array(fetch_attributes(key)).first
end
fetch_attribute_value(key) click to toggle source
# File lib/saml/assertion.rb, line 88
def fetch_attribute_value(key)
  Array(fetch_attribute_values(key)).first
end
fetch_attribute_values(key) click to toggle source
# File lib/saml/assertion.rb, line 92
def fetch_attribute_values(key)
  return unless self.attribute_statements
  return unless self.attribute_statements.flat_map(&:attributes)
  attribute_statements.flat_map { |attribute_statement| attribute_statement.fetch_attribute_values(key) }
end
fetch_attributes(key) click to toggle source
# File lib/saml/assertion.rb, line 82
def fetch_attributes(key)
  return unless self.attribute_statements
  return unless self.attribute_statements.flat_map(&:attributes)
  attribute_statements.flat_map { |attribute_statement| attribute_statement.fetch_attributes(key) }
end
provider() click to toggle source

@return [Saml::Provider]

# File lib/saml/assertion.rb, line 58
def provider
  @provider ||= Saml.provider(issuer)
end

Private Instance Methods

check_issue_instant() click to toggle source
# File lib/saml/assertion.rb, line 108
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