1// Copyright 2018-present 650 Industries. All rights reserved. 2 3#import <ABI47_0_0EXAppleAuthentication/ABI47_0_0EXAppleAuthenticationRequest.h> 4#import <ABI47_0_0EXAppleAuthentication/ABI47_0_0EXAppleAuthenticationMappings.h> 5 6#import <ABI47_0_0ExpoModulesCore/ABI47_0_0EXDefines.h> 7 8@interface ABI47_0_0EXAppleAuthenticationRequest () 9 10@property (nonatomic, strong, nonnull) NSDictionary *options; 11@property (nonatomic, strong, nullable) void(^callback)(NSDictionary *, NSError *); 12@property (nonatomic, strong, nonnull) ASAuthorizationController *authController; 13 14@end 15 16@implementation ABI47_0_0EXAppleAuthenticationRequest 17 18- (instancetype)initWithOptions:(NSDictionary *)options 19 andCallback:(void(^)(NSDictionary *response, NSError *error))callback 20{ 21 if (self = [super init]) { 22 _options = options; 23 _callback = callback; 24 } 25 return self; 26} 27 28- (void)performOperation:(ASAuthorizationProviderAuthorizationOperation)operation 29{ 30 ASAuthorizationAppleIDProvider* appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init]; 31 ASAuthorizationAppleIDRequest* request = [appleIDProvider createRequest]; 32 33 NSArray<NSNumber *> *requestedScopes = _options[@"requestedScopes"]; 34 35 request.requestedScopes = [ABI47_0_0EXAppleAuthenticationMappings importScopes:requestedScopes]; 36 request.requestedOperation = operation; 37 38 if (_options[@"user"]) { 39 request.user = _options[@"user"]; 40 } 41 if (_options[@"state"]) { 42 request.state = _options[@"state"]; 43 } 44 if (_options[@"nonce"]) { 45 request.nonce = _options[@"nonce"]; 46 } 47 48 _authController = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]]; 49 _authController.presentationContextProvider = self; 50 _authController.delegate = self; 51 52 [_authController performRequests]; 53} 54 55+ (ABI47_0_0EXAppleAuthenticationRequest *)performOperation:(ASAuthorizationProviderAuthorizationOperation)operation 56 withOptions:(NSDictionary *)options 57 withCallback:(void(^)(NSDictionary *, NSError *))callback 58{ 59 ABI47_0_0EXAppleAuthenticationRequest *authRequest = [[ABI47_0_0EXAppleAuthenticationRequest alloc] initWithOptions:options andCallback:callback]; 60 [authRequest performOperation:operation]; 61 return authRequest; 62} 63 64#pragma mark - ASAuthorizationControllerDelegate 65 66- (void)authorizationController:(ASAuthorizationController *)controller 67 didCompleteWithAuthorization:(ASAuthorization *)authorization 68{ 69 ASAuthorizationAppleIDCredential *credential = authorization.credential; 70 71 NSDictionary *fullName; 72 if (credential.fullName) { 73 fullName = [ABI47_0_0EXAppleAuthenticationMappings exportFullName:credential.fullName]; 74 } 75 NSString *authorizationCode; 76 if (credential.authorizationCode) { 77 authorizationCode = [ABI47_0_0EXAppleAuthenticationMappings exportData:credential.authorizationCode]; 78 } 79 NSString *identityToken; 80 if (credential.identityToken) { 81 identityToken = [ABI47_0_0EXAppleAuthenticationMappings exportData:credential.identityToken]; 82 } 83 84 NSDictionary *response = @{ 85 @"fullName": ABI47_0_0EXNullIfNil(fullName), 86 @"email": ABI47_0_0EXNullIfNil(credential.email), 87 @"user": credential.user, 88 @"realUserStatus": [ABI47_0_0EXAppleAuthenticationMappings exportRealUserStatus:credential.realUserStatus], 89 @"state": ABI47_0_0EXNullIfNil(credential.state), 90 @"authorizationCode": ABI47_0_0EXNullIfNil(authorizationCode), 91 @"identityToken": ABI47_0_0EXNullIfNil(identityToken), 92 }; 93 94 if (_callback) { 95 _callback(response, nil); 96 _callback = nil; 97 } 98} 99 100- (void)authorizationController:(ASAuthorizationController *)controller 101 didCompleteWithError:(NSError *)error 102{ 103 if (_callback) { 104 _callback(nil, error); 105 _callback = nil; 106 } 107} 108 109#pragma mark - ASAuthorizationControllerPresentationContextProviding 110 111- (nonnull ASPresentationAnchor)presentationAnchorForAuthorizationController:(nonnull ASAuthorizationController *)controller 112{ 113 return [[UIApplication sharedApplication] keyWindow]; 114} 115 116@end 117