Advertisement
Guest User

OAuth for getglue.com

a guest
May 1st, 2013
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * Copyright 2011 Uwe Trottmann
  3.  *
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  *
  8.  *      http://www.apache.org/licenses/LICENSE-2.0
  9.  *
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  *
  16.  */
  17.  
  18. package net.asturdroid.datamovie.TMDBApi;
  19.  
  20. import net.asturdroid.datamovie.Constants;
  21. import net.asturdroid.datamovie.R;
  22. import net.asturdroid.datamovie.Utils;
  23. import net.asturdroid.datamovie.ui.BaseActivity;
  24. import android.content.Context;
  25. import android.content.SharedPreferences;
  26. import android.net.Uri;
  27. import android.os.AsyncTask;
  28. import android.os.Bundle;
  29. import android.util.Log;
  30. import android.webkit.WebChromeClient;
  31. import android.webkit.WebView;
  32. import android.webkit.WebViewClient;
  33. import android.widget.Toast;
  34.  
  35. import com.actionbarsherlock.app.ActionBar;
  36. import com.actionbarsherlock.app.SherlockFragmentActivity;
  37. import com.actionbarsherlock.view.Window;
  38.  
  39. import oauth.signpost.OAuth;
  40. import oauth.signpost.OAuthConsumer;
  41. import oauth.signpost.OAuthProvider;
  42. import oauth.signpost.basic.DefaultOAuthConsumer;
  43. import oauth.signpost.basic.DefaultOAuthProvider;
  44. import oauth.signpost.exception.OAuthCommunicationException;
  45. import oauth.signpost.exception.OAuthExpectationFailedException;
  46. import oauth.signpost.exception.OAuthMessageSignerException;
  47. import oauth.signpost.exception.OAuthNotAuthorizedException;
  48.  
  49. /**
  50.  * Executes the OAuthRequestTokenTask to retrieve a request token and authorize
  51.  * it by the user. After the request is authorized, this will get the callback.
  52.  */
  53. public class GetGlueAuthActivity extends BaseActivity {
  54.     public static final String GETGLUE_APIPATH_V2 = "http://api.getglue.com/v2/";
  55.     public static final String REQUEST_URL = "https://api.getglue.com/oauth/request_token";
  56.     public static final String ACCESS_URL = "https://api.getglue.com/oauth/access_token";
  57.     public static final String AUTHORIZE_URL = "http://getglue.com/oauth/authorize?style=mobile";
  58.     public static final String OAUTH_CALLBACK_SCHEME = "sgoauth";
  59.     public static final String OAUTH_CALLBACK_HOST = "getgluecallback";
  60.     public static final String OAUTH_CALLBACK_URL = OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST;
  61.  
  62.     public static final String OAUTH_TOKEN = "oauth_token";
  63.     public static final String OAUTH_TOKEN_SECRET = "oauth_token_secret";
  64.  
  65.  
  66.     final String TAG = "PrepareRequestTokenActivity";
  67.  
  68.     private OAuthConsumer mConsumer;
  69.  
  70.     private OAuthProvider mProvider;
  71.  
  72.     private WebView mWebview;
  73.  
  74.     @Override
  75.     public void onCreate(Bundle savedInstanceState) {
  76.         requestWindowFeature(Window.FEATURE_PROGRESS);
  77.         super.onCreate(savedInstanceState);
  78.  
  79.         mWebview = new WebView(this);
  80.         setContentView(mWebview);
  81.  
  82.         final ActionBar actionBar = getSupportActionBar();
  83.         actionBar.setTitle("OAUTH TITLE");
  84.         actionBar.setDisplayShowTitleEnabled(true);
  85.  
  86.         setSupportProgressBarVisibility(true);
  87.  
  88.         final SherlockFragmentActivity activity = this;
  89.         mWebview.setWebChromeClient(new WebChromeClient() {
  90.             public void onProgressChanged(WebView view, int progress) {
  91.                 /*
  92.                  * Activities and WebViews measure progress with different
  93.                  * scales. The progress meter will automatically disappear when
  94.                  * we reach 100%.
  95.                  */
  96.                 activity.setSupportProgress(progress * 1000);
  97.             }
  98.         });
  99.         mWebview.setWebViewClient(new WebViewClient() {
  100.             public void onReceivedError(WebView view, int errorCode, String description,
  101.                     String failingUrl) {
  102.                 Toast.makeText(activity,
  103.                         getString(R.string.getglue_authfailed) + " " + description,
  104.                         Toast.LENGTH_LONG).show();
  105.  
  106.                 finish();
  107.             }
  108.  
  109.             @Override
  110.             public boolean shouldOverrideUrlLoading(WebView view, String url) {
  111.                 if (url.startsWith(OAUTH_CALLBACK_URL)) {
  112.                     Uri uri = Uri.parse(url);
  113.                     new RetrieveAccessTokenTask(mConsumer, mProvider, PreferenceManager
  114.                             .getDefaultSharedPreferences(activity)).execute(uri);
  115.  
  116.                     finish();
  117.                     return true;
  118.                 }
  119.                 return false;
  120.             }
  121.         });
  122.  
  123.         this.mConsumer = new DefaultOAuthConsumer(Constants.GETGLUE_CONSUMER_KEY,
  124.                 Constants.GETGLUE_CONSUMER_SECRET);
  125.         this.mProvider = new DefaultOAuthProvider(REQUEST_URL, ACCESS_URL, AUTHORIZE_URL);
  126.  
  127.         Log.i(TAG, "Starting task to retrieve request token.");
  128.         new OAuthRequestTokenTask(this, mConsumer, mProvider, mWebview).execute();
  129.     }
  130.  
  131.     public static class OAuthRequestTokenTask extends AsyncTask<Void, String, String> {
  132.         final String TAG = "OAuthRequestTokenTask";
  133.  
  134.         private Context mContext;
  135.         private OAuthConsumer mConsumer;
  136.         private OAuthProvider mProvider;
  137.         private WebView mWebView;
  138.  
  139.         public OAuthRequestTokenTask(Context context, OAuthConsumer consumer,
  140.                 OAuthProvider provider, WebView webView) {
  141.             mContext = context;
  142.             mConsumer = consumer;
  143.             mProvider = provider;
  144.             mWebView = webView;
  145.         }
  146.  
  147.         /**
  148.          * Retrieve the OAuth Request Token and present a browser to the user to
  149.          * authorize the token.
  150.          */
  151.         @Override
  152.         protected String doInBackground(Void... params) {
  153.             try {
  154.                 Log.i(TAG, "Retrieving request token from GetGlue servers");
  155.                 String authUrl = mProvider.retrieveRequestToken(mConsumer,
  156.                         OAUTH_CALLBACK_URL);
  157.  
  158.                 Log.i(TAG, "Popping a browser with the authorize URL");
  159.                 publishProgress(authUrl);
  160.             } catch (OAuthMessageSignerException e) {
  161.                 Utils.trackExceptionAndLog(mContext, TAG, e);
  162.                 return e.getMessage();
  163.             } catch (OAuthNotAuthorizedException e) {
  164.                 Utils.trackExceptionAndLog(mContext, TAG, e);
  165.                 return e.getMessage();
  166.             } catch (OAuthExpectationFailedException e) {
  167.                 Utils.trackExceptionAndLog(mContext, TAG, e);
  168.                 return e.getMessage();
  169.             } catch (OAuthCommunicationException e) {
  170.                 Utils.trackExceptionAndLog(mContext, TAG, e);
  171.                 return e.getMessage();
  172.             }
  173.             return null;
  174.         }
  175.  
  176.         @Override
  177.         protected void onProgressUpdate(String... values) {
  178.             mWebView.loadUrl(values[0]);
  179.         }
  180.  
  181.         @Override
  182.         protected void onPostExecute(String result) {
  183.             if (result != null) {
  184.                 Toast.makeText(mContext, result, Toast.LENGTH_LONG).show();
  185.                 ((GetGlueAuthActivity) mContext).finish();
  186.             }
  187.         }
  188.  
  189.     }
  190.  
  191.     public class RetrieveAccessTokenTask extends AsyncTask<Uri, Void, Integer> {
  192.  
  193.         private static final int AUTH_FAILED = 0;
  194.         private static final int AUTH_SUCCESS = 1;
  195.         private SharedPreferences mPrefs;
  196.         private OAuthProvider mProvider;
  197.         private OAuthConsumer mConsumer;
  198.  
  199.         public RetrieveAccessTokenTask(OAuthConsumer consumer, OAuthProvider provider,
  200.                 SharedPreferences prefs) {
  201.             mPrefs = prefs;
  202.             mProvider = provider;
  203.             mConsumer = consumer;
  204.         }
  205.  
  206.         /**
  207.          * Retrieve the oauth_verifier, and store the oauth and
  208.          * oauth_token_secret for future API calls.
  209.          */
  210.         @Override
  211.         protected Integer doInBackground(Uri... params) {
  212.             final Uri uri = params[0];
  213.             final String oauth_verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
  214.  
  215.             try {
  216.                 mProvider.retrieveAccessToken(mConsumer, oauth_verifier);
  217.  
  218.                 mPrefs.edit().putString(OAUTH_TOKEN, mConsumer.getToken())
  219.                         .putString(OAUTH_TOKEN_SECRET, mConsumer.getTokenSecret()).commit();
  220.  
  221.                 Log.i(TAG, "OAuth - Access Token Retrieved");
  222.                 return AUTH_SUCCESS;
  223.             } catch (OAuthMessageSignerException e) {
  224.                 Log.e(TAG, "OAuth - Access Token Retrieval Error", e);
  225.             } catch (OAuthNotAuthorizedException e) {
  226.                 Log.e(TAG, "OAuth - Access Token Retrieval Error", e);
  227.             } catch (OAuthExpectationFailedException e) {
  228.                 Log.e(TAG, "OAuth - Access Token Retrieval Error", e);
  229.             } catch (OAuthCommunicationException e) {
  230.                 Log.e(TAG, "OAuth - Access Token Retrieval Error", e);
  231.             }
  232.  
  233.             return AUTH_FAILED;
  234.         }
  235.  
  236.         @Override
  237.         protected void onPostExecute(Integer result) {
  238.             switch (result) {
  239.             case AUTH_SUCCESS:
  240.                 break;
  241.             case AUTH_FAILED:
  242.                 Toast.makeText(getApplicationContext(), getString(R.string.getglue_authfailed),
  243.                         Toast.LENGTH_LONG).show();
  244.                 break;
  245.             }
  246.         }
  247.     }
  248.  
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement