77 lines
2.3 KiB
Perl
77 lines
2.3 KiB
Perl
# -*- Mode: perl; indent-tabs-mode: nil -*-
|
|
#
|
|
# The contents of this file are subject to the Mozilla Public
|
|
# License Version 1.1 (the "License"); you may not use this file
|
|
# except in compliance with the License. You may obtain a copy of
|
|
# the License at http://www.mozilla.org/MPL/
|
|
#
|
|
# Software distributed under the License is distributed on an "AS
|
|
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
# implied. See the License for the specific language governing
|
|
# rights and limitations under the License.
|
|
#
|
|
# The Original Code is the Bugzilla Bug Tracking System.
|
|
#
|
|
# The Initial Developer of the Original Code is Netscape Communications
|
|
# Corporation. Portions created by Netscape are
|
|
# Copyright (C) 1998 Netscape Communications Corporation. All
|
|
# Rights Reserved.
|
|
#
|
|
# Contributor(s): Erik Stambaugh <erik@dasbistro.com>
|
|
# Max Kanat-Alexander <mkanat@bugzilla.org>
|
|
|
|
package Bugzilla::Auth::Login::FOF_Sudo;
|
|
use strict;
|
|
use base qw(Bugzilla::Auth::Login);
|
|
|
|
use Bugzilla::Constants;
|
|
use Bugzilla::Error;
|
|
use Bugzilla::Util;
|
|
|
|
use Net::IP::Match::XS;
|
|
use JSON;
|
|
use LWP::Simple ();
|
|
|
|
use constant can_logout => 0;
|
|
use constant can_login => 0;
|
|
use constant requires_persistence => 0;
|
|
use constant requires_verification => 0;
|
|
|
|
sub get_login_info {
|
|
my ($self) = @_;
|
|
|
|
my $cookie = Bugzilla->cookies->{fof_sudo_id};
|
|
my $server = Bugzilla->params->{fof_sudo_server};
|
|
return { failure => AUTH_NODATA } unless $cookie && $server;
|
|
|
|
my @mynetworks = map { trim($_) } split /,+/, Bugzilla->params->{fof_sudo_mynetworks};
|
|
return { failure => AUTH_NODATA } if @mynetworks && !match_ip(remote_ip(), @mynetworks);
|
|
|
|
my $url = $server;
|
|
$url .= ($url =~ tr/?/?/ ? '&' : '?');
|
|
$url .= 'id=' . url_quote($cookie);
|
|
my $authdata = LWP::Simple::get($url);
|
|
if ($authdata)
|
|
{
|
|
trick_taint($authdata);
|
|
eval { $authdata = decode_json($authdata); };
|
|
if ($@)
|
|
{
|
|
die "Error decoding JSON: $@\nJSON:\n$authdata";
|
|
}
|
|
}
|
|
return { failure => AUTH_NODATA } unless $authdata && $authdata->{user_name};
|
|
|
|
my ($userid) = Bugzilla->dbh->selectrow_array("SELECT userid FROM emailin_aliases WHERE address=?", undef, $authdata->{user_name});
|
|
|
|
return { failure => AUTH_NODATA } unless $userid;
|
|
|
|
return { user_id => $userid };
|
|
}
|
|
|
|
sub fail_nodata {
|
|
ThrowCodeError('env_no_email');
|
|
}
|
|
|
|
1;
|