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.foursquare; 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; /** * FoursquareOAuthConnector * * @author david ivins */ public class FoursquareOAuthConnector implements OAuthConnectorInterface { private static final String TAG = FoursquareOAuthConnector.class.getSimpleName(); private static final String ENCODING = "ISO-8859-1"; private Properties config; private String oauth_redirect_uri; /** * FoursquareOAuthConnector * * @param config */ FoursquareOAuthConnector(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 */ public String generateAuthorizationURL(SharedPreferences persistent_storage) { String url = config.getProperty("oauth_host", "OAUTH_HOST_HERE") + config.getProperty("oauth_authorize_endpoint", "OAUTH_AUTHENTICATE_ENDPOINT_HERE") + "?client_id=" + config.getProperty("oauth_client_id", "OAUTH_CLIENT_ID_HERE") + "&response_type=" + config.getProperty("oauth_response_type", "OAUTH_RESPONSE_TYPE_HERE") + "&redirect_uri=" + oauth_redirect_uri + "&display=" + config.getProperty("oauth_display", "OAUTH_DISPLAY_HERE"); 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("foursquare_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 = " + persistent_storage.getString("foursquare_code", "-1")); if (persistent_storage.getString("foursquare_code", null) != null) { OAuth2Request request = new OAuth2Request( config.getProperty("oauth_http_method", "OAUTH_HTTP_METHOD_HERE"), config.getProperty("oauth_host", "OAUTH_HOST_HERE"), config.getProperty("oauth_access_token_endpoint", "OAUTH_ACCESS_TOKEN_ENDPOINT_HERE")); request.addQueryParameter("client_id", config.getProperty("oauth_client_id", "OAUTH_CLIENT_ID_HERE")); request.addQueryParameter("client_secret", config.getProperty("oauth_client_secret", "OAUTH_CLIENT_SECRET_HERE")); request.addQueryParameter("grant_type", "authorization_code"); request.addQueryParameter("redirect_uri", oauth_redirect_uri); request.addQueryParameterAndEncode("code", persistent_storage.getString("foursquare_code", "CODE_HERE")); 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")) 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")); persistent_storage_editor.putString("foursquare_oauth_token_secret", json.getString("access_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("foursquare_code"); persistent_storage_editor.remove("foursquare_access_token"); // wipe out old fuck-up from anyone who had to deal with it persistent_storage_editor.remove("foursquare_oauth_token"); // clear old unused oauth 1.0 token from systems persistent_storage_editor.commit(); } /** * createTestUsers * * creates any necessary foursquare test users. */ public OAuthResponse createTestUsers(SharedPreferences persistent_storage) { return new OAuthResponse(); } }