Class: OneLogin::RubySaml::SloLogoutresponse
- Inherits:
-
SamlMessage
- Object
- SamlMessage
- OneLogin::RubySaml::SloLogoutresponse
- Defined in:
- lib/onelogin/ruby-saml/slo_logoutresponse.rb
Constant Summary
Constants inherited from SamlMessage
OneLogin::RubySaml::SamlMessage::ASSERTION, OneLogin::RubySaml::SamlMessage::PROTOCOL
Instance Attribute Summary collapse
-
#uuid ⇒ Object
readonly
Can be obtained if neccessary.
Instance Method Summary collapse
- #create(settings, request_id = nil, logout_message = nil, params = {}) ⇒ Object
- #create_logout_response_xml_doc(settings, request_id = nil, logout_message = nil) ⇒ Object
- #create_params(settings, request_id = nil, logout_message = nil, params = {}) ⇒ Object
-
#initialize ⇒ SloLogoutresponse
constructor
A new instance of SloLogoutresponse.
Methods inherited from SamlMessage
#valid_saml?, #validation_error
Constructor Details
#initialize ⇒ SloLogoutresponse
Returns a new instance of SloLogoutresponse.
11 12 13 |
# File 'lib/onelogin/ruby-saml/slo_logoutresponse.rb', line 11 def initialize @uuid = "_" + UUID.new.generate end |
Instance Attribute Details
#uuid ⇒ Object (readonly)
Can be obtained if neccessary
9 10 11 |
# File 'lib/onelogin/ruby-saml/slo_logoutresponse.rb', line 9 def uuid @uuid end |
Instance Method Details
#create(settings, request_id = nil, logout_message = nil, params = {}) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/onelogin/ruby-saml/slo_logoutresponse.rb', line 15 def create(settings, request_id = nil, = nil, params = {}) params = create_params(settings, request_id, , params) params_prefix = (settings.idp_slo_target_url =~ /\?/) ? '&' : '?' saml_response = CGI.escape(params.delete("SAMLResponse")) response_params = "#{params_prefix}SAMLResponse=#{saml_response}" params.each_pair do |key, value| response_params << "&#{key.to_s}=#{CGI.escape(value.to_s)}" end @logout_url = settings.idp_slo_target_url + response_params end |
#create_logout_response_xml_doc(settings, request_id = nil, logout_message = nil) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/onelogin/ruby-saml/slo_logoutresponse.rb', line 59 def create_logout_response_xml_doc(settings, request_id = nil, = nil) time = Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ') response_doc = XMLSecurity::Document.new response_doc.uuid = uuid root = response_doc.add_element 'samlp:LogoutResponse', { 'xmlns:samlp' => 'urn:oasis:names:tc:SAML:2.0:protocol', "xmlns:saml" => "urn:oasis:names:tc:SAML:2.0:assertion" } root.attributes['ID'] = uuid root.attributes['IssueInstant'] = time root.attributes['Version'] = '2.0' root.attributes['InResponseTo'] = request_id unless request_id.nil? root.attributes['Destination'] = settings.idp_slo_target_url unless settings.idp_slo_target_url.nil? # add success message status = root.add_element 'samlp:Status' # success status code status_code = status.add_element 'samlp:StatusCode' status_code.attributes['Value'] = 'urn:oasis:names:tc:SAML:2.0:status:Success' # success status message ||= 'Successfully Signed Out' = status.add_element 'samlp:StatusMessage' .text = if settings.issuer != nil issuer = root.add_element "saml:Issuer" issuer.text = settings.issuer end # embebed sign if settings.security[:logout_responses_signed] && settings.private_key && settings.certificate && settings.security[:embed_sign] private_key = settings.get_sp_key() cert = settings.get_sp_cert() response_doc.sign_document(private_key, cert, settings.security[:signature_method], settings.security[:digest_method]) end response_doc end |
#create_params(settings, request_id = nil, logout_message = nil, params = {}) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/onelogin/ruby-saml/slo_logoutresponse.rb', line 27 def create_params(settings, request_id = nil, = nil, params = {}) params = {} if params.nil? response_doc = create_logout_response_xml_doc(settings, request_id, ) response_doc.context[:attribute_quote] = :quote if settings.double_quote_xml_attribute_values response = "" response_doc.write(response) Logging.debug "Created SLO Logout Response: #{response}" response = deflate(response) if settings.compress_response base64_response = encode(response) response_params = {"SAMLResponse" => base64_response} if settings.security[:logout_responses_signed] && !settings.security[:embed_sign] && settings.private_key params['SigAlg'] = XMLSecurity::Document::SHA1 url_string = "SAMLResponse=#{CGI.escape(base64_response)}" url_string += "&RelayState=#{CGI.escape(params['RelayState'])}" if params['RelayState'] url_string += "&SigAlg=#{CGI.escape(params['SigAlg'])}" private_key = settings.get_sp_key() signature = private_key.sign(XMLSecurity::BaseDocument.new.algorithm(settings.security[:signature_method]).new, url_string) params['Signature'] = encode(signature) end params.each_pair do |key, value| response_params[key] = value.to_s end response_params end |