X-Git-Url: https://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=bin%2Flogin;h=d14d86d19c5c9d7b600ea98895dbc80803f4c445;hb=2485e94b6e7d92146c23a454342bdf9dbdb5f645;hp=fffadaa34f3fa82026e2976c0c77e014eb914f96;hpb=8a3c7e4b84b480cdcdde4d163d753e4447a4ffbf;p=oss%2Fvjournal.git 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); + } + +} +