[wp-trac] [WordPress Trac] #21163: Blogger Importer Invalid Tokens

WordPress Trac wp-trac at lists.automattic.com
Thu Jul 5 11:53:00 UTC 2012


#21163: Blogger Importer Invalid Tokens
--------------------------+-----------------------------
 Reporter:  Workshopshed  |      Owner:
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  Import        |    Version:
 Severity:  normal        |   Keywords:
--------------------------+-----------------------------
 When the users clicks on the authorise button google responds with an
 invalid token error. This is obviously a bit puzzling for the users.

 See http://wordpress.org/support/topic/plugin-blogger-importer-invalid-
 token

 The problem seems to be that the form with the authorise button is
 actually passing blank tokens.

 I can't reproduce the problem but I've reproduced their symptoms by
 switching the URL in get_oauth_link to a non existant one. This returns
 blank tokens to the form. If you then submit that form you get the invalid
 token error.

 Although this following patch is not actually a fix, we can report the
 error properly with a change to get_oauth_link and greet and hence it will
 be easier to diagnose issues.

 {{{
        // Shows the welcome screen and the magic auth link.
         function greet()
         {
             $next_url = get_option('siteurl') . '/wp-
 admin/index.php?import=blogger&noheader=true';
             $auth_url = $this->get_oauth_link();
             $title = __('Import Blogger', 'blogger-importer');
             $welcome = __('Howdy! This importer allows you to import posts
 and comments from your Blogger account into your WordPress site.',
 'blogger-importer');
             $prereqs = __('To use this importer, you must have a Google
 account and an upgraded (New, was Beta) blog hosted on blogspot.com or a
 custom domain (not FTP).', 'blogger-importer');
             $stepone = __('The first thing you need to do is tell Blogger
 to let WordPress access your account. You will be sent back here after
 providing authorization.', 'blogger-importer');
             $auth = esc_attr__('Authorize', 'blogger-importer');
             $errormsg = __('Error occurred getting OAuth tokens from
 Google', 'blogger-importer')

             echo "
                 <div class='wrap'>
                 " . screen_icon() . "
                 <h2>$title</h2>
                 <p>$welcome</p><p>$prereqs</p><p>$stepone</p>";

             if (!is_wp_error($auth_url)) {
                     echo "<form action='{$auth_url['url']}' method='get'>
                                 <p class='submit' style='text-
 align:left;'>
                                         <input type='submit'
 class='button' value='$auth' />
                                         <input type='hidden'
 name='oauth_token' value='{$auth_url['oauth_token']}' />
                                         <input type='hidden'
 name='oauth_callback' value='{$auth_url['oauth_callback']}' />
                                 </p>
                         </form>
                 </div>\n";
             }
             else {
                     echo $errormsg;
                     echo '<pre>
                     '.$auth_url->get_error_message().'
                     </pre>' ;
             }
         }

         function get_oauth_link()
         {
             // Establish an Blogger_OAuth consumer
             $base_url = get_option('siteurl') . '/wp-admin';
             $request_token_endpoint =
 'https://www.google.com/accounts/OAuthGetRequestToken';
             $authorize_endpoint =
 'https://www.google.com/accounts/OAuthAuthorizeToken';

             $test_consumer = new Blogger_OAuthConsumer('anonymous',
 'anonymous', null); // anonymous is a google thing to allow non-registered
 apps to work

             //prepare to get request token
             $sig_method = new Blogger_OAuthSignatureMethod_HMAC_SHA1();
             $parsed = parse_url($request_token_endpoint);
             $params = array('callback' => $base_url, 'scope' =>
 'http://www.blogger.com/feeds/', 'xoauth_displayname' => 'WordPress');

             $req_req =
 Blogger_OAuthRequest::from_consumer_and_token($test_consumer, null, "GET",
 $request_token_endpoint, $params);
             $req_req->sign_request($sig_method, $test_consumer, null);

             // go get the request tokens from Google
             $req_response = wp_remote_get($req_req->to_url(),
 array('sslverify' => false));
             if (is_wp_error($req_response))
             {
                 return $req_response;
             }
             $req_token = wp_remote_retrieve_body($req_response);

             // parse the tokens
             parse_str($req_token, $tokens);

             $oauth_token = $tokens['oauth_token'];
             $oauth_token_secret = $tokens['oauth_token_secret'];

             $callback_url =
 "$base_url/index.php?import=blogger&noheader=true&token=$oauth_token&token_secret=$oauth_token_secret";

             return array('url' => $authorize_endpoint, 'oauth_token' =>
 $oauth_token, 'oauth_callback' => $callback_url);
         }
 }}}

 p.s. Sorry I've still not mastered DIFF!

-- 
Ticket URL: <http://core.trac.wordpress.org/ticket/21163>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list