@@ -25,18 +25,29 @@ @implementation OAuthManager
25
25
@synthesize callbackUrls = _callbackUrls;
26
26
27
27
static NSString *const AUTH_MANAGER_TAG = @" AUTH_MANAGER" ;
28
+ static OAuthManager *manager;
29
+ static dispatch_once_t onceToken;
28
30
29
31
RCT_EXPORT_MODULE (OAuthManager);
30
32
33
+ // Run on a different thread
34
+ - (dispatch_queue_t )methodQueue
35
+ {
36
+ return dispatch_queue_create (" io.fullstack.oauth" , DISPATCH_QUEUE_SERIAL);
37
+ }
38
+
31
39
+ (instancetype )sharedManager {
32
- static OAuthManager *manager;
33
- static dispatch_once_t onceToken;
34
40
dispatch_once (&onceToken, ^{
35
41
manager = [self new ];
36
42
});
37
43
return manager;
38
44
}
39
45
46
+ + (void ) reset {
47
+ onceToken = nil ;
48
+ manager = nil ;
49
+ }
50
+
40
51
- (instancetype ) init {
41
52
self = [super init ];
42
53
if (self != nil ) {
@@ -59,10 +70,7 @@ - (void) dealloc
59
70
60
71
- (void ) didBecomeActive : (NSNotification *)notification
61
72
{
62
- NSLog (@" Application reopened: %@ " , @(self.pendingAuthentication ));
63
- for (OAuthClient *client in _pendingClients) {
64
- [self removePending: client];
65
- }
73
+ // TODO?
66
74
}
67
75
68
76
/*
@@ -74,7 +82,7 @@ + (BOOL)setupOAuthHandler:(UIApplication *)application
74
82
DCTAuthPlatform *authPlatform = [DCTAuthPlatform sharedPlatform ];
75
83
76
84
[authPlatform setURLOpener: ^void (NSURL *URL, DCTAuthPlatformCompletion completion) {
77
- [sharedManager setPendingAuthentication: YES ];
85
+ // [sharedManager setPendingAuthentication:YES];
78
86
[application openURL: URL];
79
87
completion (YES );
80
88
}];
@@ -101,13 +109,10 @@ + (BOOL)handleOpenUrl:(UIApplication *)application openURL:(NSURL *)url
101
109
OAuthManager *manager = [OAuthManager sharedManager ];
102
110
NSString *strUrl = [manager stringHost: url];
103
111
104
- NSLog (@" Handling handleOpenUrl: %@ " , strUrl);
105
-
106
112
if ([manager.callbackUrls indexOfObject: strUrl] != NSNotFound ) {
107
113
return [DCTAuth handleURL: url];
108
114
}
109
115
110
-
111
116
[manager clearPending ];
112
117
113
118
return [RCTLinkingManager application: application openURL: url
@@ -191,14 +196,14 @@ - (NSDictionary *) getConfigForProvider:(NSString *)name
191
196
callback:(RCTResponseSenderBlock) callback)
192
197
{
193
198
OAuthManager *manager = [OAuthManager sharedManager ];
194
- DCTAuthAccountStore *store = [self accountStore ];
199
+ DCTAuthAccountStore *store = [manager accountStore ];
195
200
196
201
NSSet *accounts = [store accounts ];
197
202
NSMutableArray *respAccounts = [[NSMutableArray alloc ] init ];
198
203
for (DCTAuthAccount *account in [accounts allObjects ]) {
199
204
NSString *providerName = account.type ;
200
205
NSMutableDictionary *cfg = [[manager getConfigForProvider: providerName] mutableCopy ];
201
- NSMutableDictionary *acc = [[self getAccountResponse: account cfg: cfg] mutableCopy ];
206
+ NSMutableDictionary *acc = [[manager getAccountResponse: account cfg: cfg] mutableCopy ];
202
207
[acc setValue: providerName forKey: @" provider" ];
203
208
[respAccounts addObject: acc];
204
209
}
@@ -215,17 +220,18 @@ - (NSDictionary *) getConfigForProvider:(NSString *)name
215
220
OAuthManager *manager = [OAuthManager sharedManager ];
216
221
NSMutableDictionary *cfg = [[manager getConfigForProvider: providerName] mutableCopy ];
217
222
218
- DCTAuthAccount *existingAccount = [self accountForProvider: providerName];
223
+ DCTAuthAccount *existingAccount = [manager accountForProvider: providerName];
219
224
if (existingAccount != nil ) {
220
225
if ([existingAccount isAuthorized ]) {
221
226
NSDictionary *accountResponse = [manager getAccountResponse: existingAccount cfg: cfg];
222
227
callback (@[[NSNull null ], @{
223
228
@" status" : @" ok" ,
229
+ @" provider" : providerName,
224
230
@" response" : accountResponse
225
231
}]);
226
232
return ;
227
233
} else {
228
- DCTAuthAccountStore *store = [self accountStore ];
234
+ DCTAuthAccountStore *store = [manager accountStore ];
229
235
[store deleteAccount: existingAccount];
230
236
NSDictionary *errResp = @{
231
237
@" status" : @" error" ,
@@ -250,9 +256,9 @@ - (NSDictionary *) getConfigForProvider:(NSString *)name
250
256
callback:(RCTResponseSenderBlock) callback)
251
257
{
252
258
OAuthManager *manager = [OAuthManager sharedManager ];
253
- DCTAuthAccountStore *store = [self accountStore ];
259
+ DCTAuthAccountStore *store = [manager accountStore ];
254
260
255
- DCTAuthAccount *existingAccount = [self accountForProvider: providerName];
261
+ DCTAuthAccount *existingAccount = [manager accountForProvider: providerName];
256
262
if (existingAccount != nil ) {
257
263
[store deleteAccount: existingAccount];
258
264
callback (@[[NSNull null ], @{
@@ -276,19 +282,21 @@ - (NSDictionary *) getConfigForProvider:(NSString *)name
276
282
callback:(RCTResponseSenderBlock)callback)
277
283
{
278
284
OAuthManager *manager = [OAuthManager sharedManager ];
285
+ [manager clearPending ];
279
286
NSMutableDictionary *cfg = [[manager getConfigForProvider: providerName] mutableCopy ];
280
287
281
- DCTAuthAccount *existingAccount = [self accountForProvider: providerName];
288
+ DCTAuthAccount *existingAccount = [manager accountForProvider: providerName];
282
289
if (existingAccount != nil ) {
283
290
if ([existingAccount isAuthorized ]) {
284
291
NSDictionary *accountResponse = [manager getAccountResponse: existingAccount cfg: cfg];
285
292
callback (@[[NSNull null ], @{
286
293
@" status" : @" ok" ,
294
+ @" provider" : providerName,
287
295
@" response" : accountResponse
288
296
}]);
289
297
return ;
290
298
} else {
291
- DCTAuthAccountStore *store = [self accountStore ];
299
+ DCTAuthAccountStore *store = [manager accountStore ];
292
300
[store deleteAccount: existingAccount];
293
301
}
294
302
}
@@ -317,7 +325,6 @@ - (NSDictionary *) getConfigForProvider:(NSString *)name
317
325
} else if ([version isEqualToString: @" 2.0" ]) {
318
326
client = (OAuthClient *)[[OAuth2Client alloc ] init ];
319
327
} else {
320
- NSLog (@" Provider number: %@ " , version);
321
328
return callback (@[@{
322
329
@" status" : @" error" ,
323
330
@" msg" : @" Unknown provider"
@@ -326,20 +333,19 @@ - (NSDictionary *) getConfigForProvider:(NSString *)name
326
333
327
334
// Store pending client
328
335
329
- [self addPending: client];
336
+ [manager addPending: client];
330
337
_pendingAuthentication = YES ;
331
338
332
339
[client authorizeWithUrl: providerName
333
340
url: callbackUrl
334
341
cfg: cfg
335
342
336
343
onSuccess: ^(DCTAuthAccount *account) {
337
- NSLog (@" authorizeWithUrl: %@ " , account);
338
344
NSDictionary *accountResponse = [manager getAccountResponse: account cfg: cfg];
339
345
_pendingAuthentication = NO ;
340
346
[manager removePending: client];
341
347
342
- DCTAuthAccountStore *store = [self accountStore ];
348
+ DCTAuthAccountStore *store = [manager accountStore ];
343
349
[store saveAccount: account];
344
350
345
351
callback (@[[NSNull null ], @{
@@ -365,7 +371,7 @@ - (NSDictionary *) getConfigForProvider:(NSString *)name
365
371
OAuthManager *manager = [OAuthManager sharedManager ];
366
372
NSMutableDictionary *cfg = [[manager getConfigForProvider: providerName] mutableCopy ];
367
373
368
- DCTAuthAccount *existingAccount = [self accountForProvider: providerName];
374
+ DCTAuthAccount *existingAccount = [manager accountForProvider: providerName];
369
375
if (existingAccount == nil ) {
370
376
NSDictionary *errResp = @{
371
377
@" status" : @" error" ,
@@ -397,7 +403,7 @@ - (NSDictionary *) getConfigForProvider:(NSString *)name
397
403
398
404
NSString *methodStr = [opts valueForKey: @" method" ];
399
405
400
- DCTAuthRequestMethod method = [self getRequestMethodByString: methodStr];
406
+ DCTAuthRequestMethod method = [manager getRequestMethodByString: methodStr];
401
407
402
408
DCTAuthRequest *request =
403
409
[[DCTAuthRequest alloc ]
@@ -531,6 +537,7 @@ - (void) clearPending
531
537
[manager removePending: client];
532
538
}
533
539
manager.pendingClients = [NSArray array ];
540
+ _pendingAuthentication = NO ;
534
541
}
535
542
536
543
- (void ) addPending : (OAuthClient *) client
@@ -543,12 +550,12 @@ - (void) addPending:(OAuthClient *) client
543
550
544
551
- (void ) removePending : (OAuthClient *) client
545
552
{
553
+ [client clearPendingAccount ];
546
554
OAuthManager *manager = [OAuthManager sharedManager ];
547
555
NSUInteger idx = [manager.pendingClients indexOfObject: client];
548
556
if ([manager.pendingClients count ] <= idx) {
549
557
NSMutableArray *newPendingClients = [manager.pendingClients mutableCopy ];
550
558
[newPendingClients removeObjectAtIndex: idx];
551
- [client cancelAuthentication ];
552
559
manager.pendingClients = newPendingClients;
553
560
}
554
561
}
0 commit comments