Skip to content

Commit 809458b

Browse files
committed
WIP: handle errors on android
1 parent 486d0f7 commit 809458b

File tree

3 files changed

+97
-9
lines changed

3 files changed

+97
-9
lines changed

android/src/main/java/io/fullstack/oauth/OAuthManagerDialogFragment.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ public void onPageFinished(String url) {
197197
@Override
198198
public void onPageError(int errorCode, String description, String failingUrl) {
199199
Log.e(TAG, "onPageError: " + failingUrl);
200+
mController.onError(errorCode, description, failingUrl);
200201
}
201202

202203
@Override

android/src/main/java/io/fullstack/oauth/OAuthManagerFragmentController.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,10 @@ public void loaded20AccessToken(final OAuth2AccessToken accessToken) {
150150
mListener.onOAuth2AccessToken(accessToken);
151151
}
152152

153-
public void onError() {
153+
public void onError(int errorCode, String description, String failingUrl) {
154+
Log.e(TAG, "Error in OAuthManagerFragmentController: " + description);
154155
this.dismissDialog();
156+
mListener.onRequestTokenError(new Exception(description));
155157
}
156158

157159
public void getRequestTokenUrlAndLoad(AdvancedWebView webView) {
@@ -265,7 +267,7 @@ protected void onPostExecute(final String url) {
265267
@Override
266268
public void run() {
267269
if (url == null) {
268-
mCtrl.onError();
270+
mCtrl.onError(-1, "No url", "");
269271
return;
270272
}
271273
if (authVersion.equals("1.0")) {
@@ -315,7 +317,7 @@ protected void onPostExecute(final OAuth1AccessToken accessToken) {
315317
@Override
316318
public void run() {
317319
if (accessToken == null) {
318-
mCtrl.onError();
320+
mCtrl.onError(-1, "No accessToken found", "");
319321
return;
320322
}
321323
mCtrl.loaded10aAccessToken(accessToken);
@@ -359,7 +361,7 @@ protected void onPostExecute(final OAuth2AccessToken accessToken) {
359361
@Override
360362
public void run() {
361363
if (accessToken == null) {
362-
mCtrl.onError();
364+
mCtrl.onError(-1, "No accessToken found", "");
363365
return;
364366
}
365367
mCtrl.loaded20AccessToken(accessToken);

android/src/main/java/io/fullstack/oauth/OAuthManagerModule.java

Lines changed: 90 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.io.IOException;
1919
import java.util.Map;
2020
import java.util.Set;
21+
import java.util.Iterator;
2122
import java.util.HashMap;
2223
import java.util.List;
2324
import java.util.ArrayList;
@@ -30,6 +31,7 @@
3031
import com.facebook.react.bridge.Callback;
3132
import com.facebook.react.bridge.WritableMap;
3233
import com.facebook.react.bridge.ReadableMap;
34+
import com.facebook.react.bridge.ReadableArray;
3335
import com.facebook.react.bridge.ReadableType;
3436
import com.facebook.react.bridge.ReadableMapKeySetIterator;
3537
import com.facebook.react.bridge.ReactContext;
@@ -91,6 +93,7 @@ public void configureProvider(
9193
String callbackUrlStr = params.getString("callback_url");
9294
_callbackUrls.add(callbackUrlStr);
9395

96+
Log.d(TAG, "Added callback url " + callbackUrlStr + " for providler " + providerName);
9497

9598
// Keep configuration map
9699
HashMap<String, Object> cfg = new HashMap<String,Object>();
@@ -130,7 +133,10 @@ public void authorize(
130133
String callbackUrl = "http://localhost/" + providerName;
131134

132135
OAuthManagerOnAccessTokenListener listener = new OAuthManagerOnAccessTokenListener() {
133-
public void onRequestTokenError(final Exception ex) {}
136+
public void onRequestTokenError(final Exception ex) {
137+
Log.e(TAG, "Exception with request token: " + ex.getMessage());
138+
_credentialsStore.delete(providerName);
139+
}
134140
public void onOAuth1AccessToken(final OAuth1AccessToken accessToken) {
135141
_credentialsStore.store(providerName, accessToken);
136142
_credentialsStore.commit();
@@ -284,18 +290,23 @@ private OAuthRequest oauthRequestWithParams(
284290
@Nullable final ReadableMap params
285291
) throws Exception {
286292
OAuthRequest request;
293+
OAuthConfig config;
294+
OAuth1AccessToken oa1token = null;
295+
OAuth2AccessToken oa2token = null;
287296

288297
if (authVersion.equals("1.0")) {
289298
final OAuth10aService service =
290299
OAuthManagerProviders.getApiFor10aProvider(providerName, cfg, null);
300+
oa1token = _credentialsStore.get(providerName, OAuth1AccessToken.class);
291301

292-
final OAuthConfig config = service.getConfig();
302+
config = service.getConfig();
293303
request = new OAuthRequest(httpVerb, url.toString(), config);
294304
} else if (authVersion.equals("2.0")) {
295305
final OAuth20Service service =
296306
OAuthManagerProviders.getApiFor20Provider(providerName, cfg, null);
307+
oa2token = _credentialsStore.get(providerName, OAuth2AccessToken.class);
297308

298-
final OAuthConfig config = service.getConfig();
309+
config = service.getConfig();
299310
request = new OAuthRequest(httpVerb, url.toString(), config);
300311
} else {
301312
Log.e(TAG, "Error in making request method");
@@ -311,6 +322,13 @@ private OAuthRequest oauthRequestWithParams(
311322
case String:
312323
String val = params.getString(key);
313324
// String escapedVal = Uri.encode(val);
325+
if (val.equals("access_token")) {
326+
if (oa1token != null) {
327+
val = oa1token.toString();
328+
} else if (oa2token != null) {
329+
val = oa2token.toString();
330+
}
331+
}
314332
request.addParameter(key, val);
315333
break;
316334
default:
@@ -449,7 +467,7 @@ private WritableMap accessTokenResponse(
449467

450468
return resp;
451469
}
452-
470+
453471

454472
private void exceptionCallback(Exception ex, final Callback onFail) {
455473
WritableMap error = Arguments.createMap();
@@ -459,4 +477,71 @@ private void exceptionCallback(Exception ex, final Callback onFail) {
459477

460478
onFail.invoke(error);
461479
}
462-
}
480+
481+
public static Map<String, Object> recursivelyDeconstructReadableMap(ReadableMap readableMap) {
482+
Map<String, Object> deconstructedMap = new HashMap<>();
483+
if (readableMap == null) {
484+
return deconstructedMap;
485+
}
486+
487+
ReadableMapKeySetIterator iterator = readableMap.keySetIterator();
488+
while (iterator.hasNextKey()) {
489+
String key = iterator.nextKey();
490+
ReadableType type = readableMap.getType(key);
491+
switch (type) {
492+
case Null:
493+
deconstructedMap.put(key, null);
494+
break;
495+
case Boolean:
496+
deconstructedMap.put(key, readableMap.getBoolean(key));
497+
break;
498+
case Number:
499+
deconstructedMap.put(key, readableMap.getDouble(key));
500+
break;
501+
case String:
502+
deconstructedMap.put(key, readableMap.getString(key));
503+
break;
504+
case Map:
505+
deconstructedMap.put(key, OAuthManagerModule.recursivelyDeconstructReadableMap(readableMap.getMap(key)));
506+
break;
507+
case Array:
508+
deconstructedMap.put(key, OAuthManagerModule.recursivelyDeconstructReadableArray(readableMap.getArray(key)));
509+
break;
510+
default:
511+
throw new IllegalArgumentException("Could not convert object with key: " + key + ".");
512+
}
513+
514+
}
515+
return deconstructedMap;
516+
}
517+
518+
public static List<Object> recursivelyDeconstructReadableArray(ReadableArray readableArray) {
519+
List<Object> deconstructedList = new ArrayList<>(readableArray.size());
520+
for (int i = 0; i < readableArray.size(); i++) {
521+
ReadableType indexType = readableArray.getType(i);
522+
switch (indexType) {
523+
case Null:
524+
deconstructedList.add(i, null);
525+
break;
526+
case Boolean:
527+
deconstructedList.add(i, readableArray.getBoolean(i));
528+
break;
529+
case Number:
530+
deconstructedList.add(i, readableArray.getDouble(i));
531+
break;
532+
case String:
533+
deconstructedList.add(i, readableArray.getString(i));
534+
break;
535+
case Map:
536+
deconstructedList.add(i, OAuthManagerModule.recursivelyDeconstructReadableMap(readableArray.getMap(i)));
537+
break;
538+
case Array:
539+
deconstructedList.add(i, OAuthManagerModule.recursivelyDeconstructReadableArray(readableArray.getArray(i)));
540+
break;
541+
default:
542+
throw new IllegalArgumentException("Could not convert object at index " + i + ".");
543+
}
544+
}
545+
return deconstructedList;
546+
}
547+
}

0 commit comments

Comments
 (0)