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
| 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 |