11#import "ConnectionParams.h"
12#import "GlobalDefaults.h"
13#import "EncryptionController.h"
15#import "TSXAdditions.h"
17@interface ConnectionParams (Private)
24- (id)initWithDictionary:(NSDictionary *)dict
26 if (!(
self = [super init]))
29 _connection_params = [dict mutableDeepCopy];
31 [
self decryptPasswordForKey:@"password"];
32 [
self decryptPasswordForKey:@"tsg_password"];
37- (void)decryptPasswordForKey:(NSString *)key
39 if ([[_connection_params objectForKey:key] isKindOfClass:[NSData class]])
42 decryptor] decryptString:[_connection_params objectForKey:key]];
43 [
self setValue:plaintext_password forKey:key];
47- (id)initWithBaseDefaultParameters
49 return [
self initWithDictionary:[[NSUserDefaults standardUserDefaults]
50 dictionaryForKey:@"TSXDefaultComputerBookmarkSettings"]];
55 return [
self initWithDictionary:[NSDictionary dictionary]];
60 return [
self initWithDictionary:params->_connection_params];
64 [_connection_params release];
65 _connection_params = nil;
69- (id)copyWithZone:(NSZone *)zone
74- (NSString *)description
76 return [NSString stringWithFormat:@"ConnectionParams: %@", [_connection_params description]];
82+ (BOOL)supportsSecureCoding
87- (id)initWithCoder:(NSCoder *)decoder
89 if ([decoder containsValueForKey:
@"connectionParams"])
91 NSSet *classes = [NSSet setWithObjects:[NSDictionary class], [NSString class],
92 [NSNumber class], [NSData class], nil];
93 return [
self initWithDictionary:[decoder decodeObjectOfClasses:classes
94 forKey:@"connectionParams"]];
100- (void)encodeWithCoder:(NSCoder *)coder
102 NSSet *unserializable_keys = [NSSet setWithObjects:@"view", nil];
103 NSMutableDictionary *serializable_params =
104 [[NSMutableDictionary alloc] initWithCapacity:[_connection_params count]];
106 for (NSString *k in _connection_params)
107 if (([k characterAtIndex:0] !=
'_') && ![unserializable_keys containsObject:k])
108 [serializable_params setObject:[_connection_params objectForKey:k] forKey:k];
110 if ([serializable_params objectForKey:
@"password"] != nil)
111 [self serializeDecryptedForKey:
@"password" forParams:serializable_params];
112 if ([serializable_params objectForKey:
@"tsg_password"] != nil)
113 [self serializeDecryptedForKey:
@"tsg_password" forParams:serializable_params];
115 [coder encodeObject:serializable_params forKey:@"connectionParams"];
116 [serializable_params release];
119- (void)serializeDecryptedForKey:(NSString *)key forParams:(NSMutableDictionary *)params
122 encryptString:[params objectForKey:key]];
124 if (encrypted_password)
125 [params setObject:encrypted_password forKey:key];
127 [params removeObjectForKey:key];
131#pragma mark NSKeyValueCoding
133- (void)setValue:(
id)value forKey:(NSString *)key
135 [
self willChangeValueForKey:key];
138 [
self setNilValueForKey:key];
140 [_connection_params setValue:value forKey:key];
142 [
self didChangeValueForKey:key];
145- (void)setValue:(
id)value forKeyPath:(NSString *)key
147 [
self willChangeValueForKey:key];
150 [
self setNilValueForKey:key];
152 [_connection_params setValue:value forKeyPath:key];
154 [
self didChangeValueForKey:key];
157- (void)setNilValueForKey:(NSString *)key
159 [_connection_params removeObjectForKey:key];
162- (id)valueForKey:(NSString *)key
164 return [_connection_params valueForKey:key];
169 return [_connection_params allKeys];
173#pragma mark KV convenience
175- (BOOL)hasValueForKey:(NSString *)key
177 return [_connection_params objectForKey:key] != nil;
180- (void)setInt:(
int)integer forKey:(NSString *)key
182 [
self setValue:[NSNumber numberWithInteger:integer] forKey:key];
184- (int)intForKey:(NSString *)key
186 return [[
self valueForKey:key] intValue];
189- (void)setBool:(BOOL)v forKey:(NSString *)key
191 [
self setValue:[NSNumber numberWithBool:v] forKey:key];
193- (BOOL)boolForKey:(NSString *)key
195 return [[_connection_params objectForKey:key] boolValue];
198- (const
char *)UTF8StringForKey:(NSString *)key
200 id val = [
self valueForKey:key];
203 if ([val respondsToSelector:@selector(UTF8String)] && (str = [val UTF8String]))
209- (NSString *)StringForKey:(NSString *)key
211 return [
self valueForKey:key];
214- (BOOL)hasValueForKeyPath:(NSString *)key
216 return [_connection_params valueForKeyPath:key] != nil;
219- (void)setInt:(
int)integer forKeyPath:(NSString *)key
221 [
self setValue:[NSNumber numberWithInteger:integer] forKeyPath:key];
223- (int)intForKeyPath:(NSString *)key
225 return [[
self valueForKeyPath:key] intValue];
228- (void)setBool:(BOOL)v forKeyPath:(NSString *)key
230 [
self setValue:[NSNumber numberWithBool:v] forKeyPath:key];
233- (BOOL)boolForKeyPath:(NSString *)key
235 return [[
self valueForKeyPath:key] boolValue];
238- (const
char *)UTF8StringForKeyPath:(NSString *)key
240 id val = [
self valueForKeyPath:key];
243 if ([val respondsToSelector:@selector(UTF8String)] && (str = [val UTF8String]))
249- (NSString *)StringForKeyPath:(NSString *)key
251 return [
self valueForKeyPath:key];
254- (int)intForKey:(NSString *)key with3GEnabled:(BOOL)enabled
256 if (enabled && [
self boolForKey:
@"enable_3g_settings"])
257 return [self intForKeyPath:[NSString stringWithFormat:
@"settings_3g.%@", key]];
258 return [
self intForKeyPath:key];
261- (BOOL)boolForKey:(NSString *)key with3GEnabled:(BOOL)enabled
263 if (enabled && [
self boolForKey:
@"enable_3g_settings"])
264 return [self boolForKeyPath:[NSString stringWithFormat:
@"settings_3g.%@", key]];
265 return [
self boolForKeyPath:key];