mirror of
https://github.com/ZeroTier/ZeroTierOne
synced 2025-08-20 05:13:58 -07:00
Pass authtoken in from user, and add a wrapper for web UI on Mac.
This commit is contained in:
parent
e58047eaa0
commit
5b54612d91
68 changed files with 7537 additions and 1 deletions
|
@ -0,0 +1,211 @@
|
|||
//
|
||||
// UserDefaults.m
|
||||
// MacGap
|
||||
//
|
||||
// Created by Jeff Hanbury on 16/04/2014.
|
||||
// Copyright (c) 2014 Twitter. All rights reserved.
|
||||
//
|
||||
|
||||
#import "UserDefaults.h"
|
||||
#import "JSEventHelper.h"
|
||||
|
||||
@interface UserDefaults() {
|
||||
|
||||
}
|
||||
|
||||
-(void) setupNotificationCenter;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation UserDefaults
|
||||
|
||||
- (id) initWithWebView:(WebView *) view{
|
||||
self = [super init];
|
||||
|
||||
if (self) {
|
||||
self.webView = view;
|
||||
[self setupNotificationCenter];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
-(void) setupNotificationCenter{
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(defaultsChanged:)
|
||||
name:NSUserDefaultsDidChangeNotification
|
||||
object:nil];
|
||||
}
|
||||
|
||||
- (void)defaultsChanged:(NSNotification *)notification {
|
||||
NSDictionary* returnDict = [self myDefaultsDictionary];
|
||||
[JSEventHelper triggerEvent:@"userDefaultsChanged" withArgs:returnDict forWebView:self.webView];
|
||||
}
|
||||
|
||||
- (NSString*) getMyDefaults {
|
||||
NSDictionary* myDefaults = [self myDefaultsDictionary];
|
||||
|
||||
return [[Utils sharedInstance] convertDictionaryToJSON:myDefaults];
|
||||
}
|
||||
|
||||
- (NSDictionary*) myDefaultsDictionary {
|
||||
NSString* prefix = [kWebScriptNamespace stringByAppendingString:@"_"];
|
||||
NSMutableDictionary* returnDict = [[NSMutableDictionary alloc] init];
|
||||
|
||||
// Get the user defaults.
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
// Build up a dictionary containing just the items beginning with our
|
||||
// prefix.
|
||||
for (NSString* key in [self getUserDefaultsKeys]) {
|
||||
if ([key hasPrefix:prefix]) {
|
||||
id val = [defaults valueForKey:key];
|
||||
[returnDict setObject:val forKey:key];
|
||||
}
|
||||
}
|
||||
|
||||
return returnDict;
|
||||
}
|
||||
|
||||
- (NSArray*) getUserDefaultsKeys {
|
||||
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
|
||||
return [[prefs dictionaryRepresentation] allKeys];
|
||||
}
|
||||
|
||||
- (void) removeObjectForKey:(NSString*)key {
|
||||
NSString* prefixedKey;
|
||||
prefixedKey = [self addPrefix:key];
|
||||
|
||||
[[NSUserDefaults standardUserDefaults] removeObjectForKey:prefixedKey];
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
}
|
||||
|
||||
// Check we have a standard prefix for JS-modified keys, for security purposes.
|
||||
// If not, add it. This stops JavaScript from ever being able to modify keys
|
||||
// it did not create.
|
||||
- (NSString*) addPrefix:(NSString*)key {
|
||||
NSString* prefix;
|
||||
prefix = [kWebScriptNamespace stringByAppendingString:@"_"];
|
||||
|
||||
if (![key hasPrefix:prefix]) {
|
||||
key = [prefix stringByAppendingString:key];
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
// String
|
||||
|
||||
- (void) setString:(NSString*)key withValue:(NSString*)value {
|
||||
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
|
||||
NSString* prefixedKey;
|
||||
prefixedKey = [self addPrefix:key];
|
||||
[prefs setObject:value forKey:prefixedKey];
|
||||
}
|
||||
|
||||
- (NSString*) getString:(NSString *)key {
|
||||
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
|
||||
return [prefs stringForKey:key];
|
||||
}
|
||||
|
||||
// All the following must convert their type to NSNumber for JavaScript.
|
||||
|
||||
// Integer
|
||||
|
||||
- (void) setInteger:(NSString*)key withValue:(NSString*)value {
|
||||
NSString* prefixedKey;
|
||||
prefixedKey = [self addPrefix:key];
|
||||
|
||||
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
|
||||
NSInteger myInt = [value intValue];
|
||||
[prefs setInteger:myInt forKey:prefixedKey];
|
||||
}
|
||||
|
||||
- (NSNumber*) getInteger:(NSString *)key {
|
||||
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
|
||||
return [NSNumber numberWithInteger:[prefs integerForKey:key]];
|
||||
}
|
||||
|
||||
// Boolean
|
||||
|
||||
- (void) setBool:(NSString*)key withValue:(NSString*)value {
|
||||
NSString* prefixedKey;
|
||||
prefixedKey = [self addPrefix:key];
|
||||
|
||||
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
|
||||
BOOL myBool = [value boolValue];
|
||||
[prefs setBool:myBool forKey:prefixedKey];
|
||||
}
|
||||
|
||||
- (NSNumber*) getBool:(NSString *)key {
|
||||
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
|
||||
return [NSNumber numberWithBool:[prefs boolForKey:key]];
|
||||
}
|
||||
|
||||
// Float
|
||||
|
||||
- (void) setFloat:(NSString*)key withValue:(NSString*)value {
|
||||
NSString* prefixedKey;
|
||||
prefixedKey = [self addPrefix:key];
|
||||
|
||||
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
|
||||
float myFloat = [value floatValue];
|
||||
[prefs setFloat:myFloat forKey:prefixedKey];
|
||||
}
|
||||
|
||||
- (NSNumber*) getFloat:(NSString *)key {
|
||||
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
|
||||
return [NSNumber numberWithFloat:[prefs floatForKey:key]];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark WebScripting Protocol
|
||||
|
||||
+ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector {
|
||||
return NO;
|
||||
}
|
||||
|
||||
+ (NSString*) webScriptNameForSelector:(SEL)selector {
|
||||
id result = nil;
|
||||
|
||||
if (selector == @selector(getMyDefaults)) {
|
||||
result = @"getMyDefaults";
|
||||
}
|
||||
|
||||
if (selector == @selector(removeObjectForKey:)) {
|
||||
result = @"removeObjectForKey";
|
||||
}
|
||||
|
||||
else if (selector == @selector(setString:withValue:)) {
|
||||
result = @"setString";
|
||||
} else if (selector == @selector(getString:)) {
|
||||
result = @"getString";
|
||||
}
|
||||
|
||||
else if (selector == @selector(setInteger:withValue:)) {
|
||||
result = @"setInteger";
|
||||
} else if (selector == @selector(getInteger:)) {
|
||||
result = @"getInteger";
|
||||
}
|
||||
|
||||
else if (selector == @selector(setBool:withValue:)) {
|
||||
result = @"setBool";
|
||||
} else if (selector == @selector(getBool:)) {
|
||||
result = @"getBool";
|
||||
}
|
||||
|
||||
else if (selector == @selector(setFloat:withValue:)) {
|
||||
result = @"setFloat";
|
||||
} else if (selector == @selector(getFloat:)) {
|
||||
result = @"getFloat";
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
+ (BOOL) isKeyExcludedFromWebScript:(const char*)name {
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
Loading…
Add table
Add a link
Reference in a new issue