%# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2025 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Logout'), Refresh => RT->Config->Get('LogoutRefresh') &>
<&| /Widgets/TitleBox, title => loc('Logged out'), hideable => 0 &>

<&|/l&>You have been logged out of RT.
<&|/l&>You're welcome to login again. % $m->callback( %ARGS );

% # Omit closing div for login-body because Footer adds a closing div, % # normally for the PageLayout template <& /Elements/Footer, Menu => 0 &> % $m->abort(); <%INIT> # Set default redirect location to RT homepage my $URL = RT->Config->Get('WebPath')."/"; $m->callback( %ARGS, CallbackName => 'BeforeSessionDelete' ); my $username; my $remote_addr = RT::Interface::Web::RequestENV('HTTP_X_FORWARDED_FOR') || RT::Interface::Web::RequestENV('REMOTE_ADDR'); if (keys %session) { $username = $session{'CurrentUser'}->Name; my $externally_authed = $session{'WebExternallyAuthed'}; my $LogoutURL = RT->Config->Get('LogoutURL'); if ( $externally_authed && $LogoutURL && $LogoutURL ne '/NoAuth/Logout.html' ) { # RT is configured with SAML or other external auth. # Redirect to the configured Logout URL. $URL = $LogoutURL; } # Clear the session RT::Interface::Web::InstantiateNewSession(); RT::Interface::Web::Session::Set( Key => 'CurrentUser', Value => RT::CurrentUser->new, ); if ( defined $username ) { if ( $externally_authed ) { # For SAML-type auth, there is another session which will need to be # logged out using the configured URL. Report here only that we cleared # the RT session. RT->Logger->info("Successful cleared session for $username from $remote_addr"); } else { RT->Logger->info("Successful logout for $username from $remote_addr"); } } } $m->callback( %ARGS, CallbackName => 'AfterSessionDelete' ); # Allow a callback to modify the URL we redirect to, which is useful for # external webauth systems $m->callback( %ARGS, CallbackName => 'ModifyLoginRedirect', URL => \$URL ); $m->notes->{RefreshURL} = $URL; RT->Logger->debug("Redirecting to $URL");