Changeset 14924


Ignore:
Timestamp:
05/29/12 22:37:50 (12 months ago)
Author:
ArthurClemens
Message:

Item11904: Split out logout code from LoginManager

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/core/lib/Foswiki/LoginManager.pm

    r14401 r14924  
    455455        } 
    456456        else { 
    457             _trace( $this, "User is logging out" ); 
    458             $session->logEvent( 'logout', ' ', 
    459                 "AUTHENTICATION LOGOUT - $authUser - " ); 
    460  
    461             #TODO: consider if we should risk passing on the urlparams on logout 
    462             my $path_info = $session->{request}->path_info(); 
    463             if ( my $topic = $session->{request}->param('topic') ) 
    464             {    #we should at least respect the ?topic= request 
    465                 my $topicRequest = Foswiki::Sandbox::untaintUnchecked( 
    466                     $session->{request}->param('topic') ); 
    467                 my ( $web, $topic ) = 
    468                   $this->{session} 
    469                   ->normalizeWebTopicName( undef, $topicRequest ); 
    470                 $path_info = '/' . $web . '/' . $topic; 
    471             } 
    472  
    473             my $redirectUrl; 
    474             if ($path_info) { 
    475                 $redirectUrl = $session->{request}->url() . $path_info; 
    476             } 
    477             else { 
    478                 $redirectUrl = $session->{request}->referer(); 
    479             } 
    480  
    481             #lets avoid infinite loops 
    482             $session->{request}->delete('logout'); 
    483             $authUser = $defaultUser; 
    484             $session->redirect( $redirectUrl, 0 ); 
     457            $authUser = $this->_logout( $authUser, $defaultUser ); 
    485458        } 
    486459    } 
     
    508481        $this->_addSessionCookieToResponse(); 
    509482    } 
     483 
     484    return $authUser; 
     485} 
     486 
     487=begin TML 
     488 
     489---++ ObjectMethod _logout($defaultUser) 
     490 
     491=cut 
     492 
     493sub _logout { 
     494    my ( $this, $authUser, $defaultUser ) = @_; 
     495    _trace( $this, "User is logging out" ); 
     496 
     497    my $session = $this->{session}; 
     498    $defaultUser = $Foswiki::cfg{DefaultUserLogin} 
     499      unless ( defined($defaultUser) ); 
     500 
     501    $session->logEvent( 'logout', ' ', "AUTHENTICATION LOGOUT - $authUser - " ); 
     502 
     503    #TODO: consider if we should risk passing on the urlparams on logout 
     504    my $path_info = $session->{request}->path_info(); 
     505    if ( my $topic = $session->{request}->param('topic') ) 
     506    {    #we should at least respect the ?topic= request 
     507        my $topicRequest = Foswiki::Sandbox::untaintUnchecked( 
     508            $session->{request}->param('topic') ); 
     509        my ( $web, $topic ) = 
     510          $this->{session}->normalizeWebTopicName( undef, $topicRequest ); 
     511        $path_info = '/' . $web . '/' . $topic; 
     512    } 
     513 
     514    my $redirectUrl; 
     515    if ($path_info) { 
     516        $redirectUrl = $session->{request}->url() . $path_info; 
     517    } 
     518    else { 
     519        $redirectUrl = $session->{request}->referer(); 
     520    } 
     521 
     522    #lets avoid infinite loops 
     523    $session->{request}->delete('logout'); 
     524    $authUser = $defaultUser; 
     525    $session->redirect( $redirectUrl, 0 ); 
    510526 
    511527    return $authUser; 
     
    12651281Foswiki - The Free and Open Source Wiki, http://foswiki.org/ 
    12661282 
    1267 Copyright (C) 2008-2010 Foswiki Contributors. Foswiki Contributors 
     1283Copyright (C) 2008-2012 Foswiki Contributors. Foswiki Contributors 
    12681284are listed in the AUTHORS file in the root of this distribution. 
    12691285NOTE: Please extend that file, not this notice. 
Note: See TracChangeset for help on using the changeset viewer.