@@ -18,17 +18,19 @@ def sso
1818 end
1919
2020 def acs
21- response = OneLogin :: RubySaml :: Response . new ( params [ :SAMLResponse ] )
22- response . settings = Account . get_saml_settings
21+ settings = Account . get_saml_settings
22+ response = OneLogin :: RubySaml :: Response . new ( params [ :SAMLResponse ] , : settings => settings )
2323
2424 if response . is_valid?
25- session [ :user_id ] = response . name_id
25+ session [ :nameid ] = response . nameid
2626 session [ :attributes ] = response . attributes
2727 @attrs = session [ :attributes ]
2828 logger . info "Sucessfully logged"
29- logger . info "NAMEID: #{ response . name_id } "
29+ logger . info "NAMEID: #{ response . nameid } "
3030 render :action => :index
3131 else
32+ logger . info "Response Invalid. Errors: #{ response . errors } "
33+ @errors = response . errors
3234 render :action => :fail
3335 end
3436 end
@@ -69,13 +71,13 @@ def sp_logout_request
6971 # to compare it with the response we get back
7072 logout_request = OneLogin ::RubySaml ::Logoutrequest . new ( )
7173 session [ :transaction_id ] = logout_request . uuid
72- logger . info "New SP SLO for User ID: '#{ session [ :user_id ] } ', Transaction ID: '#{ session [ :transaction_id ] } '"
74+ logger . info "New SP SLO for User ID: '#{ session [ :nameid ] } ', Transaction ID: '#{ session [ :transaction_id ] } '"
7375
7476 if settings . name_identifier_value . nil?
75- settings . name_identifier_value = session [ :user_id ]
77+ settings . name_identifier_value = session [ :nameid ]
7678 end
7779
78- relayState = url_for controller : 'saml' , action : 'index'
80+ relayState = url_for controller : 'saml' , action : 'index'
7981 redirect_to ( logout_request . create ( settings , :RelayState => relayState ) )
8082 end
8183 end
@@ -84,55 +86,39 @@ def sp_logout_request
8486 # the LogoutResponse, verify it, then actually delete our session.
8587 def process_logout_response
8688 settings = Account . get_saml_settings
87-
88- if session . has_key? :transation_id
89- logout_response = OneLogin ::RubySaml ::Logoutresponse . new ( params [ :SAMLResponse ] , settings , :matches_request_id => session [ :transation_id ] )
90- else
91- logout_response = OneLogin ::RubySaml ::Logoutresponse . new ( params [ :SAMLResponse ] , settings )
92- end
93-
94- logger . info "LogoutResponse is: #{ logout_response . to_s } "
89+ request_id = session [ :transaction_id ]
90+ logout_response = OneLogin ::RubySaml ::Logoutresponse . new ( params [ :SAMLResponse ] , settings , :matches_request_id => request_id , :get_params => params )
91+ logger . info "LogoutResponse is: #{ logout_response . response . to_s } "
9592
9693 # Validate the SAML Logout Response
9794 if not logout_response . validate
98- logger . error "The SAML Logout Response is invalid"
95+ error_msg = "The SAML Logout Response is invalid. Errors: #{ logout_response . errors } "
96+ logger . error error_msg
97+ render :inline => error_msg
9998 else
10099 # Actually log out this session
101100 if logout_response . success?
102- logger . info "Delete session for '#{ session [ :user_id ] } '"
101+ logger . info "Delete session for '#{ session [ :nameid ] } '"
103102 reset_session
104103 end
105104 end
106105 end
107106
108- # Method to handle IdP initiated logouts
107+ # Method to handle IdP initiated logouts
109108 def idp_logout_request
110109 settings = Account . get_saml_settings
111- logout_request = OneLogin ::RubySaml ::SloLogoutrequest . new ( params [ :SAMLRequest ] )
112- if !logout_request . is_valid?
113- logger . error "IdP initiated LogoutRequest was not valid!"
114- render :inline => logger . error
110+ logout_request = OneLogin ::RubySaml ::SloLogoutrequest . new ( params [ :SAMLRequest ] , :settings => settings )
111+ if not logout_request . is_valid?
112+ error_msg = "IdP initiated LogoutRequest was not valid!. Errors: #{ logout_request . errors } "
113+ logger . error error_msg
114+ render :inline => error_msg
115115 end
116- logger . info "IdP initiated Logout for #{ logout_request . name_id } "
116+ logger . info "IdP initiated Logout for #{ logout_request . nameid } "
117117
118118 # Actually log out this session
119119 reset_session
120120
121- # Generate a response to the IdP. :transaction_id sets the InResponseTo
122- # SAML message to create a reply to the IdP in the LogoutResponse.
123- #action, content = logout_response = OneLogin::RubySaml::Logoutresponse.new(nil, settings).
124- # create(:transaction_id => logout_request.transaction_id)
125-
126- #case action
127- # when "GET"
128- # # for GET requests, do a redirect on the content
129- # redirect_to content
130- # when "POST"
131- # # for POST requests (form) render the content as HTML
132- # render :inline => content
133- #end logout_request_id = logout_request.id
134-
135- logout_response = OneLogin ::RubySaml ::SloLogoutresponse . new . create ( settings , logout_request_id , nil , :RelayState => params [ :RelayState ] )
121+ logout_response = OneLogin ::RubySaml ::SloLogoutresponse . new . create ( settings , logout_request . id , nil , :RelayState => params [ :RelayState ] )
136122 redirect_to logout_response
137123 end
138124
0 commit comments