Files
PojavLauncher_iOS/Natives/authenticator/BaseAuthenticator.m
T
khanhduytran0 6cf61e62c0 Feats: preference isolation & profile management
- Rewrote LauncherPreferences -> PLPreferences
 + Now the file layout is the same as UI layout
 + (get/set)Preference are replaced with corresponding get/set types + Getting/setting is now done through keyPath instead of manually iterating over subdictionaries.
 + Implemented an isolation layer, allowing an instance to have its own settings. This is off by default

- Implemented launcher_profiles
 + Added Profile manager that can be accessed from the sidebar
 + Moved "Game directory (instances)" to this screen
 + Replaced version selector with profile selector. Version selector is moved into profile editor.

- Other changes
 + Cleanup code by using NSPredicate instead of huge for loops
 + Titles in settings are made multilined
 + Controller config: replaced bar button items with localized ones

Due to how large the changes are, this is committed directly to the mainline branch. Bugs are expected to be found (although I did enough tests for this locally)
2023-07-06 13:59:07 +07:00

78 lines
2.3 KiB
Objective-C

#import "BaseAuthenticator.h"
#import "../LauncherPreferences.h"
#import "../ios_uikit_bridge.h"
#import "../utils.h"
@implementation BaseAuthenticator
static BaseAuthenticator *current = nil;
+ (id)current {
if (current == nil) {
[self loadSavedName:getPrefObject(@"internal.selected_account")];
}
return current;
}
+ (void)setCurrent:(BaseAuthenticator *)auth {
current = auth;
}
+ (id)loadSavedName:(NSString *)name {
NSMutableDictionary *authData = parseJSONFromFile([NSString stringWithFormat:@"%s/accounts/%@.json", getenv("POJAV_HOME"), name]);
if (authData[@"error"] != nil) {
NSError *error = ((NSError *)authData[@"error"]);
if (error.code != NSFileReadNoSuchFileError) {
showDialog(localize(@"Error", nil), error.localizedDescription);
}
return nil;
}
if ([authData[@"accessToken"] length] < 5) {
return [[LocalAuthenticator alloc] initWithData:authData];
} else {
return [[MicrosoftAuthenticator alloc] initWithData:authData];
}
}
- (id)initWithData:(NSMutableDictionary *)data {
current = self = [self init];
self.authData = data;
return self;
}
- (id)initWithInput:(NSString *)string {
NSMutableDictionary *data = [[NSMutableDictionary alloc] init];
data[@"input"] = string;
return [self initWithData:data];
}
- (void)loginWithCallback:(Callback)callback {
}
- (void)refreshTokenWithCallback:(Callback)callback {
}
- (BOOL)saveChanges {
NSError *error;
[self.authData removeObjectForKey:@"input"];
NSString *newPath = [NSString stringWithFormat:@"%s/accounts/%@.json", getenv("POJAV_HOME"), self.authData[@"username"]];
if (self.authData[@"oldusername"] != nil && ![self.authData[@"username"] isEqualToString:self.authData[@"oldusername"]]) {
NSString *oldPath = [NSString stringWithFormat:@"%s/accounts/%@.json", getenv("POJAV_HOME"), self.authData[@"oldusername"]];
[NSFileManager.defaultManager moveItemAtPath:oldPath toPath:newPath error:&error];
// handle error?
}
[self.authData removeObjectForKey:@"oldusername"];
error = saveJSONToFile(self.authData, newPath);
if (error != nil) {
showDialog(@"Error while saving file", error.localizedDescription);
}
return error == nil;
}
@end