Apache-AuthCASSimple
view release on metacpan or search on metacpan
lib/Apache/AuthCASSimple.pm view on Meta::CPAN
$r->method("GET");
$r->method_number(M_GET);
$r->headers_in->unset("Content-length");
$r->args($content);
}
#
# _remove_ticket
#
# Remove ticket from query string arguments
#
sub _remove_ticket ($) {
my $r = shift;
my %args = $r->args();
my @qs = ();
foreach (sort {$a cmp $b} keys(%args)) {
next if ($_ eq 'ticket');
push(@qs, $_."=".$args{$_});
}
$r->args(join("\&", @qs));
}
#
# _get_user_from_session()
#
# Retrieve username if a session exist ans is correctly filled
#
sub _get_user_from_session ($) {
my $r = shift;
my $s;
my $cfg = Apache::ModuleConfig->get($r, __PACKAGE__);
$r->log()->info(__PACKAGE__.": Checking session.");
eval { $s = Apache::Session::Wrapper->new(
class => 'File',
directory => $cfg->{_cas_session_dir},
lock_directory => $cfg->{_cas_session_dir},
use_cookie => 1,
cookie_secure => $r->subprocess_env('https') ? 1 : 0,
cookie_resend => 1,
cookie_expires => 'session',
cookie_path => $cfg->{'_cas_cookie_path'}
); };
#$r->log()->info(__PACKAGE__.":IDIDIDID:".$s->{'session_id'});
return "" unless(defined $s);
if ($cfg->{_cas_session_timeout} && $s->session->{'time'} + $cfg->{_cas_session_timeout} < time) {
$r->log()->warn(__PACKAGE__.": Session TimeOut !");
$s->delete_session();
return "";
};
my $ip = ($cfg->{_mod_proxy})?$r->header_in('X-Forwarded-For'):$r->connection->remote_ip();
if($s->session->{'CASIP'} ne $ip) {
$r->log()->warn(__PACKAGE__.": Remote IP Address changed along requests !");
$s->delete_session();
return "";
}
elsif(my $user = $s->session->{'CASUser'}) {
return $user;
}
else {
$r->log()->warn(__PACKAGE__.": Session found, but no data inside it.");
$s->delete_session();
return "";
}
}
#
# _create_user_session()
#
# Create a user session and send cookie
#
sub _create_user_session ($) {
my $r = shift;
my $cfg = Apache::ModuleConfig->get($r, __PACKAGE__);
$r->log()->info(__PACKAGE__.": Creating session");
my $s = Apache::Session::Wrapper->new(
class => 'File',
directory => $cfg->{_cas_session_dir},
lock_directory => $cfg->{_cas_session_dir},
use_cookie => 1,
cookie_secure => $r->subprocess_env('https') ? 1 : 0,
cookie_resend => 1,
cookie_expires => 'session',
cookie_path => $cfg->{'_cas_cookie_path'}
);
#$r->log()->info(__PACKAGE__.":CCCCIDIDIDID:".$s->{'session_id'});
unless ($s) {
$r->log()->warn(__PACKAGE__.": Unable to create session for ".$r->connection->user().".");
return;
}
$s->session->{'CASUser'} = $r->connection->user();
my $ip = ($cfg->{_mod_proxy})?$r->header_in('X-Forwarded-For'):$r->connection->remote_ip();
$s->session->{'CASIP'} = $ip;
$s->session->{'time'} = time();
};
#
# CASServerName()
#
# Callback for CASServerName apache directive
#
sub CASServerName ($$$) {
my ($cfg, $parms, $arg) = @_;
die "Invalid CAS Server name $arg." unless ($arg =~ m/^(.+)$/);
$cfg->{_cas_name} = $arg;
}
#
# CASServerPath()
#
# Callback for CASServerPath apache directive
#
sub CASServerPath ($$$) {
my ($cfg, $parms, $arg) = @_;
die "Invalid CAS Server path $arg." unless ($arg =~ m/^\//);
$arg = '' if $arg eq '/';
$cfg->{_cas_path} = $arg;
}
#
# CASServerPort()
#
# Callback for CASServerPort apache directive
#
sub CASServerPort ($$$) {
my ($cfg, $parms, $arg) = @_;
die "Invalid CAS Server port $arg." unless ($arg =~ m/^\d+$/);
$cfg->{_cas_port} = $arg;
}
#
# CASServerNoSSL()
#
# Callback for CASServerNoSSL apache directive
#
sub CASServerNoSSL ($$) {
shift->{_cas_ssl} = 0;
}
#
# CASSessionTimeout()
#
# Callback for CASSessionTimeout apache directive
( run in 0.858 second using v1.01-cache-2.11-cpan-39bf76dae61 )