Blame client/iOS/Models/ConnectionParams.m

Packit 1fb8d4
/*
Packit 1fb8d4
 Connection Parameters abstraction
Packit Service 5a9772
Packit 1fb8d4
 Copyright 2013 Thincast Technologies GmbH, Author: Dorian Johnson
Packit 1fb8d4
Packit Service 5a9772
 This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
Packit Service 5a9772
 If a copy of the MPL was not distributed with this file, You can obtain one at
Packit Service 5a9772
 http://mozilla.org/MPL/2.0/.
Packit Service 5a9772
 */
Packit 1fb8d4
Packit 1fb8d4
#import "ConnectionParams.h"
Packit 1fb8d4
#import "GlobalDefaults.h"
Packit 1fb8d4
#import "EncryptionController.h"
Packit 1fb8d4
#import "Utils.h"
Packit 1fb8d4
#import "TSXAdditions.h"
Packit 1fb8d4
Packit 1fb8d4
@interface ConnectionParams (Private)
Packit Service 5a9772
- (id)initWithConnectionParams:(ConnectionParams *)params;
Packit 1fb8d4
@end
Packit 1fb8d4
Packit 1fb8d4
@implementation ConnectionParams
Packit 1fb8d4
Packit 1fb8d4
// Designated initializer.
Packit Service 5a9772
- (id)initWithDictionary:(NSDictionary *)dict
Packit 1fb8d4
{
Packit 1fb8d4
	if (!(self = [super init]))
Packit 1fb8d4
		return nil;
Packit Service 5a9772
Packit 1fb8d4
	_connection_params = [dict mutableDeepCopy];
Packit Service 5a9772
Packit Service 5a9772
	[self decryptPasswordForKey:@"password"];
Packit Service 5a9772
	[self decryptPasswordForKey:@"tsg_password"];
Packit Service 5a9772
Packit 1fb8d4
	return self;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (void)decryptPasswordForKey:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	if ([[_connection_params objectForKey:key] isKindOfClass:[NSData class]])
Packit 1fb8d4
	{
Packit Service 5a9772
		NSString *plaintext_password = [[[EncryptionController sharedEncryptionController]
Packit Service 5a9772
		    decryptor] decryptString:[_connection_params objectForKey:key]];
Packit 1fb8d4
		[self setValue:plaintext_password forKey:key];
Packit 1fb8d4
	}
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
- (id)initWithBaseDefaultParameters
Packit 1fb8d4
{
Packit Service 5a9772
	return [self initWithDictionary:[[NSUserDefaults standardUserDefaults]
Packit Service 5a9772
	                                    dictionaryForKey:@"TSXDefaultComputerBookmarkSettings"]];
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
- (id)init
Packit 1fb8d4
{
Packit 1fb8d4
	return [self initWithDictionary:[NSDictionary dictionary]];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (id)initWithConnectionParams:(ConnectionParams *)params
Packit 1fb8d4
{
Packit 1fb8d4
	return [self initWithDictionary:params->_connection_params];
Packit 1fb8d4
}
Packit 1fb8d4
- (void)dealloc
Packit 1fb8d4
{
Packit Service 5a9772
	[_connection_params release];
Packit Service 5a9772
	_connection_params = nil;
Packit 1fb8d4
	[super dealloc];
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
- (id)copyWithZone:(NSZone *)zone
Packit 1fb8d4
{
Packit 1fb8d4
	return [[ConnectionParams alloc] initWithDictionary:_connection_params];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (NSString *)description
Packit 1fb8d4
{
Packit 1fb8d4
	return [NSString stringWithFormat:@"ConnectionParams: %@", [_connection_params description]];
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
#pragma mark -
Packit 1fb8d4
#pragma mark NSCoder
Packit 1fb8d4
Packit 1fb8d4
- (id)initWithCoder:(NSCoder *)decoder
Packit 1fb8d4
{
Packit 1fb8d4
	if ([decoder containsValueForKey:@"connectionParams"])
Packit 1fb8d4
		return [self initWithDictionary:[decoder decodeObjectForKey:@"connectionParams"]];
Packit Service 5a9772
Packit 1fb8d4
	return [self init];
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
- (void)encodeWithCoder:(NSCoder *)coder
Packit Service 5a9772
{
Packit Service 5a9772
	NSSet *unserializable_keys = [NSSet setWithObjects:@"view", nil];
Packit Service 5a9772
	NSMutableDictionary *serializable_params =
Packit Service 5a9772
	    [[NSMutableDictionary alloc] initWithCapacity:[_connection_params count]];
Packit Service 5a9772
Packit Service 5a9772
	for (NSString *k in _connection_params)
Packit Service 5a9772
		if (([k characterAtIndex:0] != '_') && ![unserializable_keys containsObject:k])
Packit 1fb8d4
			[serializable_params setObject:[_connection_params objectForKey:k] forKey:k];
Packit Service 5a9772
Packit 1fb8d4
	if ([serializable_params objectForKey:@"password"] != nil)
Packit Service 5a9772
		[self serializeDecryptedForKey:@"password" forParams:serializable_params];
Packit 1fb8d4
	if ([serializable_params objectForKey:@"tsg_password"] != nil)
Packit Service 5a9772
		[self serializeDecryptedForKey:@"tsg_password" forParams:serializable_params];
Packit Service 5a9772
Packit 1fb8d4
	[coder encodeObject:serializable_params forKey:@"connectionParams"];
Packit 1fb8d4
	[serializable_params release];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (void)serializeDecryptedForKey:(NSString *)key forParams:(NSMutableDictionary *)params
Packit 1fb8d4
{
Packit Service 5a9772
	NSData *encrypted_password = [[[EncryptionController sharedEncryptionController] encryptor]
Packit Service 5a9772
	    encryptString:[params objectForKey:key]];
Packit Service 5a9772
Packit Service 5a9772
	if (encrypted_password)
Packit Service 5a9772
		[params setObject:encrypted_password forKey:key];
Packit Service 5a9772
	else
Packit Service 5a9772
		[params removeObjectForKey:key];
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
#pragma mark -
Packit 1fb8d4
#pragma mark NSKeyValueCoding
Packit 1fb8d4
Packit 1fb8d4
- (void)setValue:(id)value forKey:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	[self willChangeValueForKey:key];
Packit Service 5a9772
Packit 1fb8d4
	if (value == nil)
Packit 1fb8d4
		[self setNilValueForKey:key];
Packit 1fb8d4
	else
Packit 1fb8d4
		[_connection_params setValue:value forKey:key];
Packit Service 5a9772
Packit 1fb8d4
	[self didChangeValueForKey:key];
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
- (void)setValue:(id)value forKeyPath:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	[self willChangeValueForKey:key];
Packit Service 5a9772
Packit 1fb8d4
	if (value == nil)
Packit 1fb8d4
		[self setNilValueForKey:key];
Packit 1fb8d4
	else
Packit 1fb8d4
		[_connection_params setValue:value forKeyPath:key];
Packit Service 5a9772
Packit 1fb8d4
	[self didChangeValueForKey:key];
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
- (void)setNilValueForKey:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	[_connection_params removeObjectForKey:key];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (id)valueForKey:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	return [_connection_params valueForKey:key];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (NSArray *)allKeys
Packit 1fb8d4
{
Packit 1fb8d4
	return [_connection_params allKeys];
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
#pragma mark -
Packit 1fb8d4
#pragma mark KV convenience
Packit 1fb8d4
Packit Service 5a9772
- (BOOL)hasValueForKey:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	return [_connection_params objectForKey:key] != nil;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (void)setInt:(int)integer forKey:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	[self setValue:[NSNumber numberWithInteger:integer] forKey:key];
Packit 1fb8d4
}
Packit Service 5a9772
- (int)intForKey:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	return [[self valueForKey:key] intValue];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (void)setBool:(BOOL)v forKey:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	[self setValue:[NSNumber numberWithBool:v] forKey:key];
Packit 1fb8d4
}
Packit Service 5a9772
- (BOOL)boolForKey:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	return [[_connection_params objectForKey:key] boolValue];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (const char *)UTF8StringForKey:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	id val = [self valueForKey:key];
Packit Service 5a9772
	const char *str;
Packit Service 5a9772
Packit 1fb8d4
	if ([val respondsToSelector:@selector(UTF8String)] && (str = [val UTF8String]))
Packit 1fb8d4
		return str;
Packit Service 5a9772
Packit 1fb8d4
	return "";
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (NSString *)StringForKey:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	return [self valueForKey:key];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (BOOL)hasValueForKeyPath:(NSString *)key
Packit 1fb8d4
{
Packit Service 5a9772
	return [_connection_params valueForKeyPath:key] != nil;
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (void)setInt:(int)integer forKeyPath:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	[self setValue:[NSNumber numberWithInteger:integer] forKeyPath:key];
Packit 1fb8d4
}
Packit Service 5a9772
- (int)intForKeyPath:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	return [[self valueForKeyPath:key] intValue];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (void)setBool:(BOOL)v forKeyPath:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	[self setValue:[NSNumber numberWithBool:v] forKeyPath:key];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (BOOL)boolForKeyPath:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	return [[self valueForKeyPath:key] boolValue];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (const char *)UTF8StringForKeyPath:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	id val = [self valueForKeyPath:key];
Packit Service 5a9772
	const char *str;
Packit Service 5a9772
Packit 1fb8d4
	if ([val respondsToSelector:@selector(UTF8String)] && (str = [val UTF8String]))
Packit 1fb8d4
		return str;
Packit Service 5a9772
Packit 1fb8d4
	return "";
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (NSString *)StringForKeyPath:(NSString *)key
Packit 1fb8d4
{
Packit 1fb8d4
	return [self valueForKeyPath:key];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (int)intForKey:(NSString *)key with3GEnabled:(BOOL)enabled
Packit 1fb8d4
{
Packit Service 5a9772
	if (enabled && [self boolForKey:@"enable_3g_settings"])
Packit Service 5a9772
		return [self intForKeyPath:[NSString stringWithFormat:@"settings_3g.%@", key]];
Packit Service 5a9772
	return [self intForKeyPath:key];
Packit 1fb8d4
}
Packit 1fb8d4
Packit Service 5a9772
- (BOOL)boolForKey:(NSString *)key with3GEnabled:(BOOL)enabled
Packit 1fb8d4
{
Packit Service 5a9772
	if (enabled && [self boolForKey:@"enable_3g_settings"])
Packit Service 5a9772
		return [self boolForKeyPath:[NSString stringWithFormat:@"settings_3g.%@", key]];
Packit Service 5a9772
	return [self boolForKeyPath:key];
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
@end