summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Kröll <michael@localhost.localdomain>2008-12-01 21:36:38 +0100
committerMichael Kröll <michael@localhost.localdomain>2008-12-01 21:36:38 +0100
commita34a24c6beba32f55b54ce859e6007c70cfbe2fe (patch)
tree82a18f1b69cc589a60f1c49d9738f418eea40eeb
parentInitial version of login page (diff)
parentMerge branch 'master' of git@git.useperl.at:PAUSE-OpenID (diff)
downloadSimple-OpenID-a34a24c6beba32f55b54ce859e6007c70cfbe2fe.tar.gz
Simple-OpenID-a34a24c6beba32f55b54ce859e6007c70cfbe2fe.tar.bz2
Simple-OpenID-a34a24c6beba32f55b54ce859e6007c70cfbe2fe.zip
Merge branch 'master' of git@git.useperl.at:PAUSE-OpenID
-rw-r--r--lib/PAUSE/OpenID/Controller/OpenID.pm53
1 files changed, 53 insertions, 0 deletions
diff --git a/lib/PAUSE/OpenID/Controller/OpenID.pm b/lib/PAUSE/OpenID/Controller/OpenID.pm
new file mode 100644
index 0000000..1082c20
--- /dev/null
+++ b/lib/PAUSE/OpenID/Controller/OpenID.pm
@@ -0,0 +1,53 @@
+package PAUSE::OpenID::Controller::OpenID;
+
+use strict;
+use warnings;
+use parent 'Catalyst::Controller';
+use Net::OpenID::Server;
+
+
+# taken straight from Net::OpenID::Server
+# http://search.cpan.org/src/MART/Net-OpenID-Server-1.02/doc/catalyst_sample
+sub index : Local {
+ my ( $self, $c ) = @_;
+
+ my $server = Net::OpenID::Server->new(
+ post_args => $c->req->params,
+ get_args => $c->req->params,
+ endpoint_url => $c->uri_for('/server'),
+ setup_url => $c->uri_for('/login'),
+ get_user => sub {
+ return $c->user_exists ? $c->user : undef;
+ },
+ get_identity => sub {
+ my ( $u, $identity ) = @_;
+ return $identity unless $u;
+ return $c->uri_for( sprintf( '/user/%s', $u->username ) );
+ },
+ is_identity => sub {
+ my ( $u, $identity ) = @_;
+ return $u && $u->username eq ( split '/', $identity )[-1];
+ },
+ is_trusted => sub {
+ my ( $u, $trust_root, $is_identity ) = @_;
+ return $is_identity;
+ }
+ );
+
+ my ( $type, $data ) = $server->handle_page();
+
+ if ( $type eq 'redirect' ) {
+ return $c->res->redirect($data);
+ }
+ elsif ( $type eq 'setup' ) {
+ my $uri = $c->uri_for( '/login', $data );
+ return $c->res->redirect($uri);
+ }
+ else {
+ $c->res->content_type($type);
+ $c->res->body($data);
+ }
+
+}
+
+1;