import org.json.JSONObject;
import android.content.Context;
+import android.content.Intent;
import android.net.ConnectivityManager;
+import android.net.Uri;
import android.os.Handler;
import android.util.Log;
public static final String CODE_USER_CODE = "user_code";
public static final String CODE_CLIENT_ID = "client_id";
- public static final String CODE_CLIENT_SCOPE = "scope";
+ public static final String CODE_SCOPE = "scope";
public static final String CODE_VERIFICATION_URL = "verification_url";
public static final String CODE_EXPIRES_IN = "expires_in";
public static final String CODE_DEVICE_CODE = "device_code";
public static final String CODE_INTERVAL = "interval";
+ private static final String CODE_RESPONSE_TYPE = "response_type";
+ private static final String CODE_REDIRECT_URI = "redirect_uri";
+
+ private String mGrantType = OAuth2Context.OAUTH2_AUTH_CODE_GRANT_TYPE;
+
private static final String TAG = "OAuth2GetCodeRunnable";
private OnOAuth2GetCodeResultListener mListener;
private String mUrl;
private Handler mHandler;
private Context mContext;
+ private JSONObject codeResponseJson = null;
+ ResultOAuthType mLatestResult;
+
public void setListener(OnOAuth2GetCodeResultListener listener, Handler handler) {
mListener = listener;
@Override
public void run() {
- ResultOAuthType mLatestResult;
- String targetURI = null;
- JSONObject codeResponseJson = null;
if (!isOnline()) {
postResult(ResultOAuthType.NO_NETWORK_CONNECTION,null);
mUrl = "https://" + mUrl;
mLatestResult = ResultOAuthType.OK_SSL;
}
- targetURI = mUrl + OAuth2Context.OAUTH2_DEVICE_GETCODE_URL;
- ConnectorOAuth2 connectorOAuth2 = new ConnectorOAuth2(targetURI);
+ if (mGrantType.equals(OAuth2Context.OAUTH2_AUTH_CODE_GRANT_TYPE)) {
+ requestBrowserToGetAuthorizationCode();
+
+ } else if (mGrantType.equals(OAuth2Context.OAUTH_G_DEVICE_GETTOKEN_GRANT_TYPE)) {
+ getAuthorizationCode();
+ }
+ }
+
+ /// open the authorization endpoint in a web browser!
+ private void requestBrowserToGetAuthorizationCode() {
+ Uri uri = Uri.parse(mUrl);
+ Uri.Builder uriBuilder = uri.buildUpon();
+ uriBuilder.appendQueryParameter(CODE_RESPONSE_TYPE, OAuth2Context.OAUTH2_CODE_RESPONSE_TYPE);
+ uriBuilder.appendQueryParameter(CODE_REDIRECT_URI, OAuth2Context.MY_REDIRECT_URI);
+ uriBuilder.appendQueryParameter(CODE_CLIENT_ID, OAuth2Context.OAUTH2_F_CLIENT_ID);
+ uriBuilder.appendQueryParameter(CODE_SCOPE, OAuth2Context.OAUTH2_F_SCOPE);
+ //uriBuilder.appendQueryParameter(CODE_STATE, whateverwewant);
+
+ uri = uriBuilder.build();
+ Log.d(TAG, "Starting browser to view " + uri.toString());
+
+ Intent i = new Intent(Intent.ACTION_VIEW, uri);
+ mContext.startActivity(i);
+
+ postResult(mLatestResult, null);
+ }
+
+ private void getAuthorizationCode() {
+ ConnectorOAuth2 connectorOAuth2 = new ConnectorOAuth2(mUrl);
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
- nameValuePairs.add(new BasicNameValuePair(CODE_CLIENT_ID, OAuth2Context.OAUTH2_DEVICE_CLIENT_ID));
- nameValuePairs.add(new BasicNameValuePair(CODE_CLIENT_SCOPE,OAuth2Context.OAUTH2_DEVICE_GETCODE_SCOPES));
+ nameValuePairs.add(new BasicNameValuePair(CODE_CLIENT_ID, OAuth2Context.OAUTH2_G_DEVICE_CLIENT_ID));
+ nameValuePairs.add(new BasicNameValuePair(CODE_SCOPE,OAuth2Context.OAUTH2_G_DEVICE_GETCODE_SCOPES));
UrlEncodedFormEntity params = new UrlEncodedFormEntity(nameValuePairs);
codeResponseJson = new JSONObject(connectorOAuth2.connPost(params));
} catch (JSONException e) {
if (codeResponseJson == null) {
mLatestResult = ResultOAuthType.HOST_NOT_AVAILABLE;
}
-
postResult(mLatestResult, codeResponseJson);
}
+
private boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm != null && cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnectedOrConnecting();