Sha256: 0458aac974d280770d47c0e1c944d674c9a087f8a9260a2c92902faa772bee1d

Contents?: true

Size: 1.58 KB

Versions: 11

Compression:

Stored size: 1.58 KB

Contents

require "base64"
require "uuid"
require "zlib"
require "cgi"

module Onelogin::Saml
  class Authrequest
    def create(settings, params = {})
      uuid = "_" + UUID.new.generate
      time = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ")

      request =
        "<samlp:AuthnRequest xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" ID=\"#{uuid}\" Version=\"2.0\" IssueInstant=\"#{time}\" ProtocolBinding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" AssertionConsumerServiceURL=\"#{settings.assertion_consumer_service_url}\">" +
        "<saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">#{settings.issuer}</saml:Issuer>\n" +
        "<samlp:NameIDPolicy xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" Format=\"#{settings.name_identifier_format}\" AllowCreate=\"true\"></samlp:NameIDPolicy>\n" +
        "<samlp:RequestedAuthnContext xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" Comparison=\"exact\">" +
        "<saml:AuthnContextClassRef xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></samlp:RequestedAuthnContext>\n" +
        "</samlp:AuthnRequest>"

      deflated_request  = Zlib::Deflate.deflate(request, 9)[2..-5]
      base64_request    = Base64.encode64(deflated_request)
      encoded_request   = CGI.escape(base64_request)
      request_params    = "?SAMLRequest=" + encoded_request

      params.each_pair do |key, value|
        request_params << "&#{key}=#{CGI.escape(value.to_s)}"
      end

      settings.idp_sso_target_url + request_params
    end

  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
ruby-saml-0.4.7 lib/onelogin/saml/authrequest.rb
ruby-saml-0.4.6 lib/onelogin/saml/authrequest.rb
ruby-saml-0.4.5 lib/onelogin/saml/authrequest.rb
ruby-saml-0.4.4 lib/onelogin/saml/authrequest.rb
ruby-saml-0.4.3 lib/onelogin/saml/authrequest.rb
ruby-saml-0.4.2 lib/onelogin/saml/authrequest.rb
ruby-saml-0.4.1 lib/onelogin/saml/authrequest.rb
ruby-saml-0.4.0 lib/onelogin/saml/authrequest.rb
ruby-saml-0.3.4 lib/onelogin/saml/authrequest.rb
ruby-saml-0.3.3 lib/onelogin/saml/authrequest.rb
ruby-saml-0.3.2 lib/onelogin/saml/authrequest.rb