Apache2-AuthCASpbh
view release on metacpan or search on metacpan
lib/Apache2/AuthCASpbh/UserAgent.pm view on Meta::CPAN
package Apache2::AuthCASpbh::UserAgent;
use strict;
use warnings;
our $VERSION = '0.30';
use parent qw(LWP::UserAgent);
use Apache2::AuthCASpbh qw(cfg_value open_session);
use CGI qw ();
use Data::Dumper qw ();
use XML::Simple qw();
sub new {
my ($class, %conf) = @_;
exists($conf{apache_r}) or Carp::croak('apache_r argument missing');
my $r = $conf{apache_r}; delete($conf{apache_r});
my $cas_cookie_map;
if (exists($conf{cas_cookie_map})) {
$cas_cookie_map = $conf{cas_cookie_map}; delete($conf{cas_cookie_map});
}
my $self = $class->SUPER::new(%conf);
$self->{apache_r} = $r;
$self->{_log} = new Apache2::AuthCASpbh::Log(__PACKAGE__, $r->log);
if (defined($cas_cookie_map)) {
$self->{cas_cookie_map} = $cas_cookie_map;
$self->cookie_jar({}) unless exists($self->{cookie_jar});
}
my $dir_cfg = Apache2::Module::get_config('Apache2::AuthCASpbh',
$r->server, $r->per_dir_config);
my $cas_login_url = cfg_value($dir_cfg, 'ServerURL') .
cfg_value($dir_cfg, 'LoginPath');
$self->{debug_level} = cfg_value($dir_cfg, 'DebugLevel');
$self->{cas_login_url} = qr/^$cas_login_url/;
$self->{cas_cookie_name} = cfg_value($dir_cfg, 'SessionCookieName');
$self->{cas_proxy_url} = cfg_value($dir_cfg, 'ServerURL') .
cfg_value($dir_cfg, 'ProxyPath');
$self->{cas_session_db} = cfg_value($dir_cfg, 'SessionDBPath') . '/' .
cfg_value($dir_cfg, 'SessionDBName');
return $self;
}
sub redirect_ok {
my ($self, $new_request, $response) = @_;
my $_log = $self->{_log} ;
my $debug_level = $self->{debug_level};
if ($response->header('Location') =~ $self->{cas_login_url}) {
$_log->l($debug_level, 'denying ' . $response->header('Location') .
' redirect, matches ' . $self->{cas_login_url});
return 0;
}
return $self->SUPER::redirect_ok($new_request, $response);
}
sub request {
my ($self, $request, $arg, $size, $previous) = @_;
my $_log = $self->{_log};
my $debug_level = $self->{debug_level};
my $cas_session = $self->{apache_r}->pnotes('cas_session');
$_log->l('warn', 'no session found for request') and goto NO_SET_COOKIE
( run in 1.661 second using v1.01-cache-2.11-cpan-39bf76dae61 )