Apache-Wyrd
view release on metacpan or search on metacpan
Wyrd/Services/LoginServer.pm view on Meta::CPAN
use 5.006;
use strict;
use warnings;
no warnings qw(uninitialized);
package Apache::Wyrd::Services::LoginServer;
our $VERSION = '0.98';
use Apache::Wyrd::Services::CodeRing;
use Apache::Wyrd::Services::TicketPad;
use Apache::Wyrd::Request;
use Apache::Constants qw(AUTH_REQUIRED HTTP_SERVICE_UNAVAILABLE HTTP_MOVED_TEMPORARILY NOT_FOUND OK);
use Apache::Util;
use MIME::Base64;
use LWP::UserAgent;
use HTTP::Request::Common;
=pod
=head1 NAME
Apache::Wyrd::Services::LoginServer - Login service For Auth object
=head1 SYNOPSIS
<Location /logins/login.html>
SetHandler perl-script
PerlHandler Apache::Wyrd::Services::LoginServer
PerlSetVar TicketDBFile /var/run/www/ticketfile.db
PerlSetVar Debug 0
</Location>
=head1 DESCRIPTION
The Login Server provides SSL encryption for a login to a
Apache::Wyrd::Auth module when it must run on an insecure port. This
behavior is described in the documentation for
C<Apache::Wyrd::Services::Auth>.
It uses the TicketPad module to keep a cache of 100 recent tickets. If
presented with a POST request with a 'key' parameter, it stores the key
and returns OK. If presented with an authorization set (on_success,
[on_fail], user, password, ticket), it returns the data to the server
via a redirected GET request with the challenge parameter set to the
encrypted data.
The TicketPad has a limited capacity, and old tickets are removed as new
ones are added. If the authorization request is so stale it asks for a
ticket that has been discarded, the LoginServer returns the status
HTTP_SERVICE_UNAVAILABLE.
All other accesses fail with an AUTH_REQUIRED
=head2 PERL METHODS
I<(format: (returns) name (arguments after self))>
=over
=item (RESPONSE) C<handler> (Apache)
The handler handles all functions.
=cut
sub handler {
my $req = shift;
my $apr = Apache::Wyrd::Request->instance($req);
my $debug = $req->dir_config('Debug');
my $ticket = $apr->param('ticket');
my $key = $apr->param('key');
my $self_url = 'https://' . $req->hostname . $req->uri;
my $use_error = $req->dir_config('ReturnError') || 'err_message';
$debug && warn("Ticket:Key -> ", $ticket, ':' , $key);
my $ticketfile = $req->dir_config('TicketDBFile') || '/tmp/ticketfile';
if ($key) {
( run in 0.984 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )