]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Quick fix for #2659: unable to login with Livejournal OpenID
authorBrion Vibber <brion@status.net>
Tue, 7 Sep 2010 23:15:32 +0000 (16:15 -0700)
committerBrion Vibber <brion@status.net>
Tue, 7 Sep 2010 23:22:51 +0000 (16:22 -0700)
The Net::OpenID::Server perl module that LJ uses appears to be very picky about input, and rejects most request types unless the data comes in as GET parameters (apparently following OpenID 1.1 rules, rather than OpenID 2.0 rules which permit any request to be POSTed but requires that if so, the data must all be in the POST body).
Apparently something got updated on LJ at some point that's either added that behavior or (more likely) added the OpenID 2.0 namespace info to discovery, which tells the Janrain-based OpenID libraries that they should go ahead and do POST requests instead of redirects to GET requests... thus breaking everything. ;)

GET should be just fine for both 1.1 and 2.0 though, and also saves having to sit through that lame autosubmit page.

Switched the authentication submission from checking whether it should redirect to GET or do a form POST, to simply always doing the redirect to GET.

Tested against providers:
* LiveJournal
* Google
* LaunchPad
* identi.ca

plugins/OpenID/openid.php

index 4ce350f7737a56d0480e6440d4e1f9a6ef0a0148..1b93163e5f5efb307828e5aba64815e79ffa3ff8 100644 (file)
@@ -182,7 +182,19 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
     $trust_root = common_root_url(true);
     $process_url = common_local_url($returnto);
 
-    if ($auth_request->shouldSendRedirect()) {
+    // Net::OpenID::Server as used on LiveJournal appears to incorrectly
+    // reject POST requests for data submissions that OpenID 1.1 specs
+    // as GET, although 2.0 allows them:
+    // https://rt.cpan.org/Public/Bug/Display.html?id=42202
+    //
+    // Our OpenID libraries would have switched in the redirect automatically
+    // if it were detecting 1.1 compatibility mode, however the server is
+    // advertising itself as 2.0-compatible, so we got switched to the POST.
+    //
+    // Since the GET should always work anyway, we'll just take out the
+    // autosubmitter for now.
+    // 
+    //if ($auth_request->shouldSendRedirect()) {
         $redirect_url = $auth_request->redirectURL($trust_root,
                                                    $process_url,
                                                    $immediate);
@@ -194,6 +206,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
         } else {
             common_redirect($redirect_url, 303);
         }
+    /*
     } else {
         // Generate form markup and render it.
         $form_id = 'openid_message';
@@ -219,6 +232,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
             $action->handle(array('action' => 'autosubmit'));
         }
     }
+    */
 }
 
 # Half-assed attempt at a module-private function