Catalyst-Plugin-Authentication-Credential-HTTP-Proxy
view release on metacpan or search on metacpan
lib/Catalyst/Plugin/Authentication/Credential/HTTP/Proxy.pm view on Meta::CPAN
package Catalyst::Plugin::Authentication::Credential::HTTP::Proxy;
use base qw/Catalyst::Plugin::Authentication::Credential::Password/;
use strict;
use warnings;
use String::Escape ();
use URI::Escape ();
use Catalyst ();
use Catalyst::Plugin::Authentication::Credential::HTTP::User;
use Carp qw/croak/;
our $VERSION = "0.02";
sub authenticate_http_proxy {
my $c = shift;
my $headers = $c->req->headers;
croak "url setting required for authentication"
unless $c->config->{authentication}{http_proxy}{url};
if ( my ( $user, $password ) = $headers->authorization_basic ) {
my $ua=Catalyst::Plugin::Authentication::Credential::HTTP::User->new;
$ua->credentials($user,$password);
my $resp= $ua->get($c->config->{authentication}{http_proxy}{url});
if ( $resp->is_success ) {
if ( my $store = $c->config->{authentication}{http_proxy}{store} ) {
$user = $store->get_user($user);
} elsif ( my $user_obj = $c->get_user($user) ) {
$user = $user_obj;
}
unless ($user) {
$c->log->debug("User '$user' doesn't exist in the default store")
if $c->debug;
return;
}
$c->set_authenticated($user);
return 1;
} elsif ( $c->debug ) {
$c->log->info('Remote authentication failed:'.$resp->message);
return 0;
}
} elsif ( $c->debug ) {
$c->log->info('No credentials provided for basic auth');
return 0;
}
}
sub authorization_required {
my ( $c, %opts ) = @_;
return 1 if $c->authenticate_http_proxy;
$c->authorization_required_response( %opts );
die $Catalyst::DETACH;
}
sub authorization_required_response {
my ( $c, %opts ) = @_;
$c->res->status(401);
my @opts;
if ( my $realm = $opts{realm} ) {
push @opts, sprintf 'realm=%s', String::Escape::qprintable($realm);
}
if ( my $domain = $opts{domain} ) {
Catalyst::Excpetion->throw("domain must be an array reference")
unless ref($domain) && ref($domain) eq "ARRAY";
my @uris =
$c->config->{authentication}{http}{use_uri_for}
? ( map { $c->uri_for($_) } @$domain )
: ( map { URI::Escape::uri_escape($_) } @$domain );
push @opts, qq{domain="@uris"};
}
$c->res->headers->www_authenticate(join " ", "Basic", @opts);
}
__PACKAGE__;
__END__
=pod
=head1 NAME
Catalyst::Plugin::Authentication::Credential::HTTP - DEPRECATED HTTP Basic authentication
for Catlayst.
=head1 SYNOPSIS
use Catalyst qw/
Authentication
Authentication::Store::Moose
Authentication::Store::Elk
Authentication::Credential::HTTP::Proxy
/;
( run in 1.165 second using v1.01-cache-2.11-cpan-ceb78f64989 )