Skip to content

Commit

Permalink
starting to make it nice
Browse files Browse the repository at this point in the history
  • Loading branch information
Saimis committed Sep 23, 2020
1 parent 68ad23f commit b465b7b
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 52 deletions.
7 changes: 6 additions & 1 deletion AppleLogin.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
#import <AuthenticationServices/AuthenticationServices.h>

typedef void (^SuccessBlock)(id);
typedef void (^ErrorBlock)(id);

@interface AppleLogin : NSObject<ASAuthorizationControllerDelegate, ASAuthorizationControllerPresentationContextProviding>
@property (nonatomic, copy) SuccessBlock successBlock;
@property (nonatomic, copy) ErrorBlock errorBlock;
- (instancetype) initWithWindow: (NSWindow*) window;
- (void)initiateLoginProcess;//:(void (^)(NSDictionary *result))completionHandler errorHandler:(void (^)(NSError *error))errorHandler;
- (void)initiateLoginProcess;
@end
34 changes: 12 additions & 22 deletions AppleLogin.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,42 +7,35 @@ @interface AppleLogin ()
@implementation AppleLogin
-(id)initWithWindow:(NSWindow *)window
{
NSLog(@"Initializing AppleLogin: %@", window);
if(self = [super init]) {
NSLog(@"Assigning self main");
self.window = window;
self.window = window;
}
return self;
}

- (void)initiateLoginProcess {

NSLog(@"PROCESS INITIATED");
// self.successBlock = completionHandler;
// self.errorBlock = errorHandler;
- (void)initiateLoginProcess:(void (^)(NSDictionary *result))completionHandler errorHandler:(void (^)(NSError *error))errorHandler {
self.successBlock = completionHandler;
self.errorBlock = errorHandler;

ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc]init];
NSLog(@"Apple ID provider INITIATED");
ASAuthorizationAppleIDRequest *request = [appleIDProvider createRequest];
NSLog(@"Request INITIATED");
request.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail];

ASAuthorizationController *authorizationController = [[ASAuthorizationController alloc]initWithAuthorizationRequests:@[request]];
NSLog(@"AuthorizationController INITIATED");
authorizationController.delegate = self;
authorizationController.presentationContextProvider = self;
NSLog(@"Calling to perform request");

[authorizationController performRequests];
}

#pragma Authorization Delegates

- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization {
NSLog(@"authorizationController called");
ASAuthorizationAppleIDCredential *appleIDCredential = [authorization credential];
ASAuthorizationAppleIDCredential *appleIDCredential = [authorization credential];

if(appleIDCredential) {
NSLog(@"appleIDCredential exists");
NSLog(@"Successfully retrieved user credentials");

NSString *idToken = [[NSString alloc]initWithData:appleIDCredential.identityToken encoding:NSUTF8StringEncoding];

NSString *email = [appleIDCredential valueForKey:@"email"] ?: @"";
Expand All @@ -56,21 +49,18 @@ - (void)authorizationController:(ASAuthorizationController *)controller didCompl

NSDictionary *userDetails = @{@"userIdentifier": [appleIDCredential user], @"firstName": firstName, @"lastName": lastName, @"email" : email, @"identityToken" : idToken};

NSLog(@"VIETA LOGIN - idToken %s firstname %s lasname %s email %s", idToken, firstName, lastName, email);

// self.successBlock(userDetails);
self.successBlock(userDetails);
}
}

- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error {
NSLog(@"----------------------------%@",error);
// self.errorBlock(error);
NSLog(@"Something went wrong: %@",error);
self.errorBlock(error);
}

#pragma PresentationAnchorForAuthorizationController Delegate

-(ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller {
NSLog(@"----------------------------WINDOW");
return self.window;
return self.window;
}
@end
39 changes: 10 additions & 29 deletions main.mm
Original file line number Diff line number Diff line change
Expand Up @@ -4,57 +4,38 @@

Napi::ThreadSafeFunction ts_fn;

/***** HELPERS *****/

static NSWindow *windowFromBuffer(const Napi::Buffer<uint8_t> &buffer) {
NSLog(@"window from buffer 1----------------------------");
auto data = (NSView **)buffer.Data();
NSLog(@"window from buffer 2----------------------------");
auto view = data[0];
NSLog(@"window from buffer 3----------------------------");
NSLog(@"window from buffer 3---------------------------- %@", @(view != nil));
return view.window;
}

Napi::Boolean SignInWithApple(const Napi::CallbackInfo &info) {
Napi::Promise SignInWithApple(const Napi::CallbackInfo &info) {
Napi::Env env = info.Env();
NSLog(@"VIEW----------------------------");
Napi::Promise::Deferred deferred = Napi::Promise::Deferred::New(env);

if (info.Length() < 1) {
Napi::Error::New(info.Env(), "Wrong number of arguments")
.ThrowAsJavaScriptException();
return Napi::Boolean::New(env, false);
}

NSLog(@"VIEW2----------------------------");

NSLog(@"VIEW2----------------------------%@", @(info[0] != nil));
Napi::Buffer<uint8_t> buffer = info[0].As<Napi::Buffer<uint8_t>>();
if (buffer.Length() != 8) {
Napi::Error::New(info.Env(), "Pointer buffer is invalid")
.ThrowAsJavaScriptException();
return Napi::Boolean::New(env, false);
}
NSLog(@"VIEW3----------------------------");
NSLog(@"VIEW3----------------------------%@", @(buffer != nil));

NSWindow *win = windowFromBuffer(buffer);
NSLog(@"VIEW4----------------------------");
NSLog(@"VIEW4----------------------------%@", win);


// Napi::Buffer<void*> winHandle = info[0].As<Napi::Buffer<void*>>();
// NSView *view = *reinterpret_cast<NSView **>(winHandle.Data());

// NSView* view = static_cast<NSView*>(*reinterpret_cast<void **>(winHandle.Data()));

// NSWindow *originalWindow = view.window;


AppleLogin *appleLogin = [[AppleLogin alloc] initWithWindow: win];
[appleLogin initiateLoginProcess];
AppleLogin *appleLogin = [[AppleLogin alloc] initWithWindow:win];

NSDictionary *result = [appleLogin initiateLoginProcess:^(NSDictionary * _Nonnull result) {
deferred.Resolve(result);
} errorHandler:^(NSError * _Nonnull error) {
deferred.Reject(error);
}];

return Napi::Boolean::New(env, true);
return deferred.Promise();
}

// Initializes all functions exposed to JS.
Expand Down

0 comments on commit b465b7b

Please sign in to comment.