package PAUSE::OpenID::Controller::Root;
use strict;
use warnings;
use parent 'Catalyst::Controller';
use LWP::UserAgent;
__PACKAGE__->config->{namespace} = '';
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
if ( not defined $c->req->param('openid.return_to') ) {
$c->res->redirect($c->uri_for('/error'));
}
$c->stash->{xml} =<<XML;
<document/>
XML
foreach my $key ( keys %{$c->req->params} ) {
$c->stash->{$key} = $c->req->param($key);
}
$c->forward('PAUSE::OpenID::View::XSLT');
}
sub error :Local {
my ( $self, $c ) = @_;
$c->stash->{xml} = '<document/>';
$c->forward('PAUSE::OpenID::View::XSLT');
}
sub default :Path {
my ( $self, $c ) = @_;
$c->response->body( 'Page not found' );
$c->response->status(404);
}
sub login :Local {
my ( $self, $c ) = @_;
my $username = $c->req->param('username');
my $password = $c->req->param('password');
$c->log->debug('username "'.$username.'" login attempt');
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => 'https://pause.perl.org/pause/authenquery');
$req->header('If-SSL-Cert-Subject' => '/CN=pause.perl.org');
local $ENV{HTTPS_CA_DIR} = $c->config->{'ssl'}->{'ca_dir'};
$ua->credentials('pause.perl.org:443', 'PAUSE', $username, $password);
my $res = $ua->request($req);
die 'pause server certificate validation failed'
if exists $res->headers->{'client-ssl-warning'};
if ($res->code == 200) {
$c->log->info('login pass');
$c->res->redirect($c->uri_for('/login_pass'));
}
else {
$c->log->warn('login failed');
use Data::Dumper;
die Dumper($res);
$c->res->redirect($c->uri_for('/login_failed'));
}
}
sub login_pass :Local {
my ( $self, $c ) = @_;
$c->res->content_type('text/plain');
$c->res->body('login pass');
}
sub login_failed :Local {
my ( $self, $c ) = @_;
$c->res->content_type('text/plain');
$c->res->body('login fail');
}
sub end : ActionClass('RenderView') {}
1;