#!/usr/bin/perl -T =head1 NAME vjlogin - authenticate openid users =head1 SYNOPSIS http://your.server.com/cgi-bin/vjlogin/your-blog-top =head1 DESCRIPTION Authenticates user with external OpenID provider, creates VJournal session and sets approprieate cookie. =head1 WORKFLOW =over 4 =item No paramteters, Show login form =item Parameters username and site Start openid auth =item OpenID parameters Perform authentication. If successul, create session. If E-mail is provided, redirect back to blog. Otherwise - show form to requset E-Mail. Create session anyway. =item email parameter + cookie Update session. Redirect to blog. =back =cut use CGI; use Net::OpenID::Consumer; use VJournal::Session; sub verify { my ($cgi,$consumer)=@_; if (my $setup_url = $csr->user_setup_url) { print $cgi->redirect(-location=>$setup_url); return; } elsif ($csr->user_cancel) { show_error("OpenID server cancelled operation"); } elsif (my $vident= $csr->verified_identity) { my $user = $vident->url(); # Getting OPENDID extensions from my @extension =grep { defined } ( $vident->signed_extension_fields('http://openid.net/extensions/sreg/1.1'), $vident->signed_extension_fields('http://openid.net/srv/ax/1.0'), ); # getting foaf info; my $foaf = $vident->declared_foaf(); my ($email,$avatar) = ($foaf?get_foaf($foaf):(undef,undef)); my $session = VJournal::Session->create(-cgi=>$cgi, -name => $name, -idenity=>$user); if (!$email) { show_email_form); } }