78 lines
2.2 KiB
Objective-C
78 lines
2.2 KiB
Objective-C
//
|
|
// MBIMAuthenticateOperation.m
|
|
// MBIMAuthenticateOperation
|
|
//
|
|
// Created by James Magahern on 7/6/21.
|
|
// Copyright © 2021 James Magahern. All rights reserved.
|
|
//
|
|
|
|
#import "MBIMAuthenticateOperation.h"
|
|
#import "MBIMBridge.h"
|
|
#import "MBIMAuthToken.h"
|
|
|
|
@implementation MBIMAuthenticateOperation
|
|
|
|
+ (void)load { [super load]; }
|
|
|
|
+ (NSString *)endpointName
|
|
{
|
|
return @"authenticate";
|
|
}
|
|
|
|
+ (BOOL)requiresAuthentication
|
|
{
|
|
return NO;
|
|
}
|
|
|
|
- (void)main
|
|
{
|
|
NSObject<HTTPResponse> *response = nil;
|
|
|
|
if (self.requestBodyData.length == 0) {
|
|
self.serverCompletionBlock([[HTTPErrorResponse alloc] initWithErrorCode:400]);
|
|
return;
|
|
}
|
|
|
|
NSError *error = nil;
|
|
NSDictionary *args = [NSJSONSerialization JSONObjectWithData:self.requestBodyData options:0 error:&error];
|
|
if (error || args.count == 0) {
|
|
response = [[HTTPErrorResponse alloc] initWithErrorCode:400];
|
|
} else {
|
|
do {
|
|
NSString *username = [args objectForKey:@"username"];
|
|
NSString *password = [args objectForKey:@"password"];
|
|
|
|
if (!username || !password) {
|
|
response = [[HTTPErrorResponse alloc] initWithErrorCode:400];
|
|
break;
|
|
}
|
|
|
|
if (![MBIMBridge.sharedInstance.authUsername isEqualToString:username]) {
|
|
response = [[HTTPErrorResponse alloc] initWithErrorCode:401];
|
|
break;
|
|
}
|
|
|
|
if (![MBIMBridge.sharedInstance.authPassword isEqualToString:password]) {
|
|
response = [[HTTPErrorResponse alloc] initWithErrorCode:401];
|
|
break;
|
|
}
|
|
|
|
MBIMAuthToken *token = [[MBIMAuthToken alloc] initWithUsername:username];
|
|
|
|
// All systems go
|
|
MBIMJSONDataResponse *dataResponse = [MBIMJSONDataResponse responseWithJSONObject:@{
|
|
@"jwt" : token.jwtToken
|
|
}];
|
|
|
|
// Send a cookie down so we can use httpOnly cookies
|
|
dataResponse.httpHeaders[@"Set-Cookie"] = [NSString stringWithFormat:@"auth_token=%@", token.jwtToken];
|
|
|
|
response = dataResponse;
|
|
} while (NO);
|
|
}
|
|
|
|
self.serverCompletionBlock(response);
|
|
}
|
|
|
|
@end
|