lib/casserver/controllers.rb in gunark-rubycas-server-0.8.0.20090506 vs lib/casserver/controllers.rb in gunark-rubycas-server-0.8.0.20090715

- old
+ new

@@ -159,27 +159,27 @@ $LOG.debug("Authenticator provided additional user attributes: #{extra_attributes.inspect}") unless extra_attributes.blank? # 3.6 (ticket-granting cookie) tgt = generate_ticket_granting_ticket(@username, extra_attributes) - if $CONF.expire_sessions - expires = $CONF.ticket_granting_ticket_expiry.to_i.from_now + if $CONF.maximum_session_lifetime + expires = $CONF.maximum_session_lifetime.to_i.from_now expiry_info = " It will expire on #{expires}." else expiry_info = " It will not expire." end - if $CONF.expire_sessions + if $CONF.maximum_session_lifetime cookies['tgt'] = { :value => tgt.to_s, - :expires => Time.now + $CONF.ticket_granting_ticket_expiry + :expires => Time.now + $CONF.maximum_session_lifetime } else cookies['tgt'] = tgt.to_s end - $LOG.debug("Ticket granting cookie '#{cookies['tgt'].inspect}' granted to '#{@username.inspect}'. #{expiry_info}") + $LOG.debug("Ticket granting cookie '#{cookies['tgt'].inspect}' granted to #{@username.inspect}. #{expiry_info}") if @service.blank? $LOG.info("Successfully authenticated user '#{@username}' at '#{tgt.client_hostname}'. No service param was given, so we will not redirect.") @message = {:type => 'confirmation', :message => _("You have successfully logged in.")} else @@ -226,29 +226,27 @@ cookies.delete 'tgt' if tgt CASServer::Models::TicketGrantingTicket.transaction do - pgts = CASServer::Models::ProxyGrantingTicket.find(:all, + $LOG.debug("Deleting Service/Proxy Tickets for '#{tgt}' for user '#{tgt.username}'") + tgt.granted_service_tickets.each do |st| + send_logout_notification_for_service_ticket(st) if $CONF.enable_single_sign_out + # TODO: Maybe we should do some special handling if send_logout_notification_for_service_ticket fails? + # (the above method returns false if the POST results in a non-200 HTTP response). + $LOG.debug "Deleting #{st.class.name.demodulize} #{st.ticket.inspect} for service #{st.service}." + st.destroy + end + + pgts = CASServer::Models::ProxyGrantingTicket.find(:all, :conditions => [CASServer::Models::Base.connection.quote_table_name(CASServer::Models::ServiceTicket.table_name)+".username = ?", tgt.username], - :include => :service_ticket) + :include => :service_ticket) pgts.each do |pgt| $LOG.debug("Deleting Proxy-Granting Ticket '#{pgt}' for user '#{pgt.service_ticket.username}'") pgt.destroy end - if $CONF.enable_single_sign_out - $LOG.debug("Deleting Service/Proxy Tickets for '#{tgt}' for user '#{tgt.username}'") - tgt.service_tickets.each do |st| - send_logout_notification_for_service_ticket(st) - # TODO: Maybe we should do some special handling if send_logout_notification_for_service_ticket fails? - # (the above method returns false if the POST results in a non-200 HTTP response). - $LOG.debug "Deleting #{st.class.name.demodulize} #{st.ticket.inspect}." - st.destroy - end - end - $LOG.debug("Deleting #{tgt.class.name.demodulize} '#{tgt}' for user '#{tgt.username}'") tgt.destroy end $LOG.info("User '#{tgt.username}' logged out.") @@ -256,12 +254,11 @@ $LOG.warn("User tried to log out without a valid ticket-granting ticket.") end @message = {:type => 'confirmation', :message => _("You have successfully logged out.")} - @message[:message] << - _(" Please click on the following link to continue:") if @continue_url + @message[:message] +=_(" Please click on the following link to continue:") if @continue_url @lt = generate_login_ticket if @gateway && @service redirect(@service, :status => 303) @@ -320,11 +317,11 @@ @username = st.username if @pgt_url pgt = generate_proxy_granting_ticket(@pgt_url, st) @pgtiou = pgt.iou if pgt end - @extra_attributes = st.ticket_granting_ticket.extra_attributes || {} + @extra_attributes = st.granted_by_tgt.extra_attributes || {} end @status = CASServer::Controllers.response_status_from_error(@error) if @error render :service_validate @@ -354,18 +351,18 @@ @extra_attributes = {} if @success @username = t.username if t.kind_of? CASServer::Models::ProxyTicket - @proxies << t.proxy_granting_ticket.service_ticket.service + @proxies << t.granted_by_pgt.service_ticket.service end if @pgt_url pgt = generate_proxy_granting_ticket(@pgt_url, t) @pgtiou = pgt.iou if pgt end - @extra_attributes = t.ticket_granting_ticket.extra_attributes || {} + @extra_attributes = t.granted_by_tgt.extra_attributes || {} end @status = CASServer::Controllers.response_status_from_error(@error) if @error render :proxy_validate