package com.hkm.disqus.application; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import com.hkm.disqus.DisqusConstants; import com.hkm.disqus.api.model.oauth2.AccessToken; import com.squareup.okhttp.FormEncodingBuilder; import com.squareup.okhttp.RequestBody; /** * Created by hesk on 21/5/15. */ public class AuthorizeUtils { /** * Create authorize intent * * @param context as is * @param apiKey as is * @param scopes as is * @param redirectUri as is * @return as is */ public static Intent createIntent(Context context, String apiKey, String[] scopes, String redirectUri) { Intent intent = new Intent(context, AuthorizeActivity.class); Bundle extras = new Bundle(); extras.putString(AuthorizeActivity.EXTRA_API_KEY, apiKey); extras.putStringArray(AuthorizeActivity.EXTRA_SCOPES, scopes); extras.putString(AuthorizeActivity.EXTRA_REDIRECT_URI, redirectUri); intent.putExtras(extras); return intent; } /** * Build a scope string from an array of scopes * * @param scopes as is * @return as is */ public static String buildScope(String[] scopes) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < scopes.length; i++) { builder.append(scopes[i]); if (i < scopes.length - 1) { builder.append(','); } } return builder.toString(); } /** * Build uri for authorize requests * * @param clientId as is * @param scope as is * @param redirectUri as is * @return as is */ public static Uri buildAuthorizeUri(String clientId, String scope, String redirectUri) { Uri.Builder builder = Uri.parse(DisqusConstants.AUTHORIZE_URL).buildUpon(); builder.appendQueryParameter(DisqusConstants.PARAM_CLIENT_ID, clientId); if (scope != null) { builder.appendQueryParameter(DisqusConstants.PARAM_SCOPE, scope); } builder.appendQueryParameter(DisqusConstants.PARAM_RESPONSE_TYPE, DisqusConstants.RESPONSE_TYPE_CODE); builder.appendQueryParameter(DisqusConstants.PARAM_REDIRECT_URI, redirectUri); return builder.build(); } public static String buildCodeUri(String code, String clientId, String secret, String redirect) { Uri.Builder bu = Uri.parse(DisqusConstants.AUTHORIZE_ACCESS_TOKEN).buildUpon(); bu.appendQueryParameter(DisqusConstants.PARAM_GRANTTYPE, DisqusConstants.auth_code); bu.appendQueryParameter(DisqusConstants.PARAM_CLIENT_ID, clientId); bu.appendQueryParameter(DisqusConstants.PARAM_CLIENT_SECRET, secret); bu.appendQueryParameter(DisqusConstants.PARAM_REDIRECT_URI, redirect); bu.appendQueryParameter(DisqusConstants.PARAM_CODE, code); return bu.build().toString(); } public static String buildCodeRequestJustBody(String code, String clientId, String secret, String redirect) { String t = buildCodeUri(code, clientId, secret, redirect); String replacetarget = DisqusConstants.AUTHORIZE_ACCESS_TOKEN + "?"; String glongthat = t.replace(replacetarget, ""); return glongthat; } public static RequestBody buildRequest(String code, String clientId, String secret, String redirect) { final RequestBody fmbody = new FormEncodingBuilder() .add(DisqusConstants.PARAM_CODE, code) .add(DisqusConstants.PARAM_GRANTTYPE, DisqusConstants.auth_code) .add(DisqusConstants.PARAM_CLIENT_ID, clientId) .add(DisqusConstants.PARAM_CLIENT_SECRET, secret) .add(DisqusConstants.PARAM_REDIRECT_URI, redirect) .build(); return fmbody; } public static AccessToken getDataToken(String url) { Uri uri = Uri.parse(url); String uriFragment = uri.getFragment(); // Extract data from fragment and pass to callback Uri queryUri = new Uri.Builder().encodedQuery(uriFragment).build(); AccessToken accessToken = new AccessToken(); accessToken.username = queryUri.getQueryParameter(DisqusConstants.PARAM_USERNAME); accessToken.userId = Long.parseLong(queryUri.getQueryParameter(DisqusConstants.PARAM_USER_ID)); accessToken.accessToken = queryUri.getQueryParameter(DisqusConstants.PARAM_ACCESS_TOKEN); accessToken.expiresIn = Long.parseLong(queryUri.getQueryParameter(DisqusConstants.PARAM_EXPIRES_IN)); accessToken.tokenType = queryUri.getQueryParameter(DisqusConstants.PARAM_TOKEN_TYPE); accessToken.state = queryUri.getQueryParameter(DisqusConstants.PARAM_STATE); accessToken.scope = queryUri.getQueryParameter(DisqusConstants.PARAM_SCOPE); return accessToken; } }