@@ -304,6 +304,12 @@ def self.init_database!
304304
305305 # optional params
306306 @service = clean_service_url ( params [ 'service' ] )
307+ @from = clean_service_url ( params [ 'from' ] )
308+ @return_url = if @from . blank?
309+ @service
310+ else
311+ @service + @from
312+ end
307313 @renew = params [ 'renew' ]
308314 @gateway = params [ 'gateway' ] == 'true' || params [ 'gateway' ] == '1'
309315
@@ -334,7 +340,7 @@ def self.init_database!
334340 elsif tgt && !tgt_error
335341 $LOG. debug ( "Valid ticket granting ticket detected." )
336342 st = generate_service_ticket ( @service , tgt . username , tgt )
337- service_with_ticket = service_uri_with_ticket ( @service , st )
343+ service_with_ticket = service_uri_with_ticket ( @return_url , st )
338344 $LOG. info ( "User '#{ tgt . username } ' authenticated based on ticket granting cookie. Redirecting to service '#{ @service } '." )
339345 redirect service_with_ticket , 303 # response code 303 means "See Other" (see Appendix B in CAS Protocol spec)
340346 elsif @gateway
@@ -396,6 +402,12 @@ def self.init_database!
396402
397403 # 2.2.1 (optional)
398404 @service = clean_service_url ( params [ 'service' ] )
405+ @from = clean_service_url ( params [ 'from' ] )
406+ @return_url = if @from . blank?
407+ @service
408+ else
409+ @service + @from
410+ end
399411
400412 # 2.2.2 (required)
401413 @username = params [ 'username' ]
@@ -470,7 +482,7 @@ def self.init_database!
470482 @st = generate_service_ticket ( @service , @username , tgt )
471483
472484 begin
473- service_with_ticket = service_uri_with_ticket ( @service , @st )
485+ service_with_ticket = service_uri_with_ticket ( @return_url , @st )
474486
475487 $LOG. info ( "Redirecting authenticated user '#{ @username } ' at '#{ @st . client_hostname } ' to service '#{ @service } '" )
476488 redirect service_with_ticket , 303 # response code 303 means "See Other" (see Appendix B in CAS Protocol spec)
0 commit comments