17
17
18
18
import android .annotation .SuppressLint ;
19
19
import android .app .Activity ;
20
+ import android .content .Context ;
20
21
import android .content .Intent ;
22
+ import android .content .SharedPreferences ;
21
23
import android .graphics .Color ;
22
24
23
25
import androidx .annotation .NonNull ;
55
57
56
58
public class OktaSdkBridgeModule extends ReactContextBaseJavaModule implements ActivityEventListener {
57
59
60
+ private static final String SESSION_CLIENT_SHARED_PREFS = "OKTA_SDK_BRIDGE_MODULE_SESSION_CLIENT" ;
61
+ private static final String PREFS_KEY = "SESSION_CLIENT" ;
62
+ private static final String SESSION_CLIENT_AUTH = "AUTH" ;
63
+ private static final String SESSION_CLIENT_WEB = "WEB" ;
58
64
private final ReactApplicationContext reactContext ;
59
65
private OIDCConfig config ;
60
66
private WebAuthClient webClient ;
61
67
private AuthClient authClient ;
62
68
private SessionClient sessionClient ;
63
69
private Promise queuedPromise ;
64
70
private LastRequestType mLastRequestType ;
71
+ private SharedPreferences sharedPreferences ;
72
+ private SharedPreferences .Editor sharedPreferencesEditor ;
65
73
66
74
public OktaSdkBridgeModule (ReactApplicationContext reactContext ) {
67
75
super (reactContext );
68
76
this .reactContext = reactContext ;
69
77
this .reactContext .addActivityEventListener (this );
78
+ this .sharedPreferences = reactContext .getSharedPreferences (SESSION_CLIENT_SHARED_PREFS , Context .MODE_PRIVATE );
79
+ this .sharedPreferencesEditor = sharedPreferences .edit ();
70
80
}
71
81
72
82
@ Override
@@ -130,6 +140,12 @@ public void createConfig(String clientId,
130
140
this .authClient = authClientBuilder .create ();
131
141
132
142
promise .resolve (true );
143
+
144
+ if (SESSION_CLIENT_WEB .equals (sharedPreferences .getString (PREFS_KEY , SESSION_CLIENT_WEB ))) {
145
+ sessionClient = this .webClient .getSessionClient ();
146
+ } else {
147
+ sessionClient = this .authClient .getSessionClient ();
148
+ }
133
149
} catch (Exception e ) {
134
150
promise .reject (OktaSdkError .OKTA_OIDC_ERROR .getErrorCode (), e .getLocalizedMessage (), e );
135
151
}
@@ -219,6 +235,7 @@ public void authenticate(String sessionToken, final Promise promise) {
219
235
public void onSuccess (@ NonNull Result result ) {
220
236
if (result .isSuccess ()) {
221
237
try {
238
+ sharedPreferencesEditor .putString (PREFS_KEY , SESSION_CLIENT_AUTH ).apply ();
222
239
sessionClient = authClient .getSessionClient ();
223
240
Tokens tokens = sessionClient .getTokens ();
224
241
String token = tokens .getAccessToken ();
@@ -233,13 +250,15 @@ public void onSuccess(@NonNull Result result) {
233
250
params .putString (OktaSdkConstant .ACCESS_TOKEN_KEY , token );
234
251
promise .resolve (params );
235
252
} catch (AuthorizationException e ) {
253
+ sharedPreferencesEditor .clear ().apply ();
236
254
WritableMap params = Arguments .createMap ();
237
255
params .putString (OktaSdkConstant .ERROR_CODE_KEY , OktaSdkError .SIGN_IN_FAILED .getErrorCode ());
238
256
params .putString (OktaSdkConstant .ERROR_MSG_KEY , OktaSdkError .SIGN_IN_FAILED .getErrorMessage ());
239
257
sendEvent (reactContext , OktaSdkConstant .ON_ERROR , params );
240
258
promise .reject (OktaSdkError .SIGN_IN_FAILED .getErrorCode (), OktaSdkError .SIGN_IN_FAILED .getErrorMessage ());
241
259
}
242
260
} else {
261
+ sharedPreferencesEditor .clear ().apply ();
243
262
WritableMap params = Arguments .createMap ();
244
263
params .putString (OktaSdkConstant .ERROR_CODE_KEY , OktaSdkError .SIGN_IN_FAILED .getErrorCode ());
245
264
params .putString (OktaSdkConstant .ERROR_MSG_KEY , OktaSdkError .SIGN_IN_FAILED .getErrorMessage ());
@@ -250,6 +269,7 @@ public void onSuccess(@NonNull Result result) {
250
269
251
270
@ Override
252
271
public void onError (String error , AuthorizationException exception ) {
272
+ sharedPreferencesEditor .clear ().apply ();
253
273
WritableMap params = Arguments .createMap ();
254
274
params .putString (OktaSdkConstant .ERROR_CODE_KEY , OktaSdkError .OKTA_OIDC_ERROR .getErrorCode ());
255
275
params .putString (OktaSdkConstant .ERROR_MSG_KEY , error );
@@ -447,7 +467,6 @@ public void clearTokens(final Promise promise) {
447
467
authClient .getSessionClient ().clear ();
448
468
}
449
469
450
- sessionClient = null ;
451
470
promise .resolve (true );
452
471
} catch (Exception e ) {
453
472
promise .reject (OktaSdkError .OKTA_OIDC_ERROR .getErrorCode (), e .getLocalizedMessage (), e );
@@ -514,6 +533,7 @@ public void onSuccess(@NonNull AuthorizationStatus status) {
514
533
}
515
534
sendEvent (reactContext , OktaSdkConstant .SIGN_IN_SUCCESS , params );
516
535
sessionClient = localSessionClient ;
536
+ sharedPreferencesEditor .putString (PREFS_KEY , SESSION_CLIENT_WEB );
517
537
queuedPromise = null ;
518
538
} catch (AuthorizationException e ) {
519
539
WritableMap params = Arguments .createMap ();
@@ -523,12 +543,12 @@ public void onSuccess(@NonNull AuthorizationStatus status) {
523
543
promise .reject (e );
524
544
}
525
545
sendEvent (reactContext , OktaSdkConstant .ON_ERROR , params );
526
- sessionClient = null ;
546
+ sharedPreferencesEditor . clear (). apply () ;
527
547
queuedPromise = null ;
528
548
}
529
549
} else if (status == AuthorizationStatus .SIGNED_OUT ) {
530
550
localSessionClient .clear ();
531
- sessionClient = null ;
551
+ sharedPreferencesEditor . clear (). apply () ;
532
552
WritableMap params = Arguments .createMap ();
533
553
params .putString (OktaSdkConstant .RESOLVE_TYPE_KEY , OktaSdkConstant .SIGNED_OUT );
534
554
if (promise != null ) {
0 commit comments