Doorman
view release on metacpan or search on metacpan
lib/Plack/Middleware/DoormanOpenID.pm view on Meta::CPAN
package Plack::Middleware::DoormanOpenID;
use 5.010;
use strict;
our $VERSION = "0.06";
our $AUTHORITY = "http://gugod.org";
use feature qw(switch);
use parent 'Doorman::PlackMiddleware';
use Plack::Request;
use Plack::Util::Accessor qw(secret ua);
use Net::OpenID::Consumer;
use LWP::UserAgent;
use URI;
use Scalar::Util qw(weaken);
sub prepare_app {
my $self = shift;
$self->SUPER::prepare_app(@_);
$self->secret(
'This is the default consumer_secret value for Net::OpenID::Consumer
that you should provide for your own app. ' . $VERSION
) unless $self->secret;
$self->ua('LWP::UserAgent') unless $self->ua;
}
sub openid_verified_url {
$_[0]->scope_url . "/openid_verified";
}
sub openid_verified_path {
URI->new($_[0]->openid_verified_url)->path;
}
sub verified_identity_url {
$_[0]->session_get("verified_identity_url");
}
sub is_sign_in {
defined $_[0]->verified_identity_url;
}
sub csr {
my ($self, $request) = @_;
return Net::OpenID::Consumer->new(
ua => ref($self->ua) ? $self->ua : $self->ua->new,
args => sub { $request->param($_[0]) },
consumer_secret => $self->secret,
required_root => $self->root_url
);
}
sub call {
my ($self, $env) = @_;
$self->prepare_call($env);
$env->{"doorman.@{[ $self->scope ]}.openid"} = $self;
my $request = Plack::Request->new($env);
given([$request->method, $request->path]) {
when(['POST', $self->sign_in_path]) {
my $csr = $self->csr($request);
if ($request->param("openid")) {
if (my $claimed_identity = $csr->claimed_identity( $request->param("openid") )) {
my $check_url = $claimed_identity->check_url(
delayed_return => 1,
return_to => $self->openid_verified_url,
trust_root => $self->root_url
);
return [302, ["Location" => $check_url], [""]];
}
else {
( run in 4.033 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )