]> www.wagner.pp.ru Git - oss/vjournal.git/blobdiff - bin/login
Added providerlist handling
[oss/vjournal.git] / bin / login
index fffadaa34f3fa82026e2976c0c77e014eb914f96..d14d86d19c5c9d7b600ea98895dbc80803f4c445 100644 (file)
--- 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);
+       }
+
+}
+