X-Git-Url: http://www.wagner.pp.ru/gitweb/?p=oss%2Fvjournal.git;a=blobdiff_plain;f=bin%2Flogin;fp=bin%2Flogin;h=d14d86d19c5c9d7b600ea98895dbc80803f4c445;hp=fffadaa34f3fa82026e2976c0c77e014eb914f96;hb=c18ba47bd2daa9239244e087a9967f24ceffc200;hpb=1d84bf53fde880886b6aee02111c1c8958f5a15b diff --git a/bin/login b/bin/login index fffadaa..d14d86d 100644 --- a/bin/login +++ b/bin/login @@ -13,4 +13,60 @@ vjlogin - authenticate openid users 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); + } + +} +