Sha256: d0f909d29446a65897ba428fda77307b9c1b172bc7e757a359885ba6147e75a9

Contents?: true

Size: 1.71 KB

Versions: 8

Compression:

Stored size: 1.71 KB

Contents

require 'builder'
module SamlIdp
  class ResponseBuilder
    attr_accessor :response_id
    attr_accessor :issuer_uri
    attr_accessor :saml_acs_url
    attr_accessor :saml_request_id
    attr_accessor :assertion_and_signature

    def initialize(response_id, issuer_uri, saml_acs_url, saml_request_id, assertion_and_signature)
      self.response_id = response_id
      self.issuer_uri = issuer_uri
      self.saml_acs_url = saml_acs_url
      self.saml_request_id = saml_request_id
      self.assertion_and_signature = assertion_and_signature
    end

    def encoded
      @encoded ||= encode
    end

    def raw
      build
    end

    def encode
      Base64.strict_encode64(raw)
    end
    private :encode

    def build
      resp_options = {}
      resp_options[:ID] = response_id_string
      resp_options[:Version] =  "2.0"
      resp_options[:IssueInstant] = now_iso
      resp_options[:Destination] = saml_acs_url
      resp_options[:Consent] = Saml::XML::Namespaces::Consents::UNSPECIFIED
      resp_options[:InResponseTo] = saml_request_id unless saml_request_id.nil?
      resp_options["xmlns:samlp"] = Saml::XML::Namespaces::PROTOCOL

      builder = Builder::XmlMarkup.new
      builder.tag! "samlp:Response", resp_options do |response|
          response.Issuer issuer_uri, xmlns: Saml::XML::Namespaces::ASSERTION
          response.tag! "samlp:Status" do |status|
            status.tag! "samlp:StatusCode", Value: Saml::XML::Namespaces::Statuses::SUCCESS
          end
          response << assertion_and_signature
        end
    end
    private :build

    def response_id_string
      "_#{response_id}"
    end
    private :response_id_string

    def now_iso
      Time.now.utc.iso8601
    end
    private :now_iso
  end
end

Version data entries

8 entries across 8 versions & 2 rubygems

Version Path
saml_idp-0.9.0 lib/saml_idp/response_builder.rb
saml_idp-0.8.1 lib/saml_idp/response_builder.rb
saml_idp-0.8.0 lib/saml_idp/response_builder.rb
saml_idp-0.7.2 lib/saml_idp/response_builder.rb
saml_idp-0.7.1 lib/saml_idp/response_builder.rb
saml_idp-0.7.0 lib/saml_idp/response_builder.rb
saml_idp-0.6.0 lib/saml_idp/response_builder.rb
icn_saml_idp-0.4.1 lib/saml_idp/response_builder.rb