Java tutorial
//***************************************************************************** // This file is part of CheckIn4Me. Copyright 2010 David Ivins // // CheckIn4Me is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // CheckIn4Me is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with CheckIn4Me. If not, see <http://www.gnu.org/licenses/>. //***************************************************************************** package com.davidivins.checkin4me.gowalla; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.net.Uri; import android.util.Log; import com.davidivins.checkin4me.interfaces.OAuthConnectorInterface; import com.davidivins.checkin4me.oauth.OAuth2Request; import com.davidivins.checkin4me.oauth.OAuthResponse; import org.json.JSONObject; import java.net.URLEncoder; import java.util.Properties; /** * GowallaOAuthConnector * * @author david ivins */ public class GowallaOAuthConnector implements OAuthConnectorInterface { private static final String TAG = GowallaOAuthConnector.class.getSimpleName(); private static final String ENCODING = "ISO-8859-1"; private Properties config; private String oauth_redirect_uri; /** * GowallaOAuthConnector * * @param config */ GowallaOAuthConnector(Properties config) { this.config = config; try { // must be encoded twice :( oauth_redirect_uri = URLEncoder.encode(config.getProperty("oauth_redirect_uri"), ENCODING); } catch (Exception e) { Log.e(TAG, ENCODING + " isn't a valid encoding!?"); } } /** * beginHandshake * * @return OAuthResponse */ public OAuthResponse beginHandshake() { return new OAuthResponse(true, ""); } /** * isSuccessfulInitialResponse * * @param response * @return boolean */ public boolean isSuccessfulInitialResponse(OAuthResponse response) { return true; } /** * storeNecessaryInitialResponseData * * @param persistent_storage_editor * @param response */ public void storeNecessaryInitialResponseData(Editor persistent_storage_editor, OAuthResponse response) { } /** * generateAuthorizationURL * * @param persistent_storage * @return String */ public String generateAuthorizationURL(SharedPreferences persistent_storage) { String url = config.getProperty("oauth_host") + config.getProperty("oauth_new_token_endpoint") + "?client_id=" + config.getProperty("oauth_client_id") + "&redirect_uri=" + oauth_redirect_uri + "&scope=" + config.getProperty("oauth_api_scope"); Log.i(TAG, "authorization url = " + url); return url; } /** * isSuccessfulAuthorizationResponse * * @param response * @return boolean */ public boolean isSuccessfulAuthorizationResponse(Uri response) { boolean is_successful = false; if ((null != response) && (response.getQueryParameter("code") != null)) is_successful = true; Log.i(TAG, "isSuccessfulAuthorizationResponse = " + is_successful); return is_successful; } /** * storeNecessaryAuthorizationResponseData * * @param persistent_storage_editor * @param response */ public void storeNecessaryAuthorizationResponseData(Editor persistent_storage_editor, Uri response) { Log.i(TAG, "code = " + response.getQueryParameter("code")); persistent_storage_editor.putString("gowalla_code", response.getQueryParameter("code")); persistent_storage_editor.commit(); } /** * completeHandshake * * @param persistent_storage * @param previous_response * @return OAuthResponse */ public OAuthResponse completeHandshake(SharedPreferences persistent_storage, Uri previous_response) { OAuthResponse response = new OAuthResponse(); Log.i(TAG, "code in persistent_storage = " + persistent_storage.getString("gowalla_code", "-1")); if (persistent_storage.getString("gowalla_code", "-1") != "-1") { OAuth2Request request = new OAuth2Request(config.getProperty("oauth_http_method"), config.getProperty("oauth_host"), config.getProperty("oauth_access_token_endpoint")); request.addQueryParameter("grant_type", "authorization_code"); request.addQueryParameter("client_id", config.getProperty("oauth_client_id")); request.addQueryParameter("client_secret", config.getProperty("oauth_client_secret")); request.addQueryParameterAndEncode("code", persistent_storage.getString("gowalla_code", "CODE_HERE")); request.addQueryParameter("redirect_uri", oauth_redirect_uri); request.addQueryParameter("scope", config.getProperty("oauth_api_scope")); response = (OAuthResponse) request.execute(); } else { Log.e(TAG, "Attempting to complete handshake without a code"); } return response; } /** * isSuccessfulCompletionResponse * * @param response * @return boolean */ public boolean isSuccessfulCompletionResponse(OAuthResponse response) { boolean is_successful = false; try { JSONObject json = new JSONObject(response.getResponseString()); if (json.has("access_token") && json.has("refresh_token")) is_successful = true; } catch (Exception e) { Log.i(TAG, "response is not json - " + response.getResponseString()); } Log.i(TAG, "isSuccessfulCompletionResponse = " + is_successful); return is_successful; } /** * storeNecessaryCompletionResponseData * * @param persistent_storage_editor * @param response */ public void storeNecessaryCompletionResponseData(Editor persistent_storage_editor, OAuthResponse response) { try { JSONObject json = new JSONObject(response.getResponseString()); Log.i(TAG, "access_token = " + json.getString("access_token")); Log.i(TAG, "refresh_token = " + json.getString("refresh_token")); persistent_storage_editor.putString("gowalla_access_token", json.getString("access_token")); persistent_storage_editor.putString("gowalla_refresh_token", json.getString("refresh_token")); persistent_storage_editor.commit(); } catch (Exception e) { Log.i(TAG, "response is not json - " + response.getResponseString()); } } /** * clearTemporarySettings * * @param persistent_storage_editor */ public void clearTemporaryData(Editor persistent_storage_editor) { // clear initial values persistent_storage_editor.remove("gowalla_code"); persistent_storage_editor.commit(); } /** * createTestUsers * * creates any necessary gowalla test users. */ public OAuthResponse createTestUsers(SharedPreferences persistent_storage) { return new OAuthResponse(); } }