Index: remoting/client/ios/host_preferences.mm |
diff --git a/remoting/client/ios/host_preferences.mm b/remoting/client/ios/host_preferences.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7795491884597d357a8b632335c2cce321a47bd8 |
--- /dev/null |
+++ b/remoting/client/ios/host_preferences.mm |
@@ -0,0 +1,91 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
+#import "remoting/client/ios/host_preferences.h" |
+ |
+#import "base/logging.h" |
+ |
+namespace { |
+static NSString* const kHostPreferencesDataKeyHostDictionary = |
+ @"kHostPreferencesDataKeyHostDictionary"; |
+static NSString* const kHostPreferencesHostIdKey = @"HostId"; |
+static NSString* const kHostPreferencesPairIdKey = @"PairId"; |
+static NSString* const kHostPreferencesPairSecretKey = @"PairSecret"; |
+} // namespace |
+ |
+@interface HostPreferences () |
+ |
+// Load the known hosts from the Keychain. |
+// If no data exists, return an empty dictionary |
++ (NSMutableDictionary*)loadHosts; |
+ |
+@end |
+ |
+@implementation HostPreferences |
+ |
+@synthesize hostId = _hostId; |
+@synthesize pairId = _pairId; |
+@synthesize pairSecret = _pairSecret; |
+ |
+#pragma mark - Public |
+ |
+- (void)saveToKeychain { |
+ NSMutableDictionary* hosts = [HostPreferences loadHosts]; |
+ [hosts setObject:self forKey:_hostId]; |
+ |
+ NSData* writeData = [NSKeyedArchiver archivedDataWithRootObject:hosts]; |
+ |
+ NSError* keychainError = |
+ remoting::ios::writeHostPreferencesToKeychain(writeData); |
+ |
+ DLOG_IF(ERROR, !keychainError) << "Could not write to keychain."; |
+} |
+ |
++ (HostPreferences*)hostForId:(NSString*)hostId { |
+ NSMutableDictionary* hosts = [HostPreferences loadHosts]; |
+ HostPreferences* host = hosts[hostId]; |
+ if (!host) { |
+ host = [[HostPreferences alloc] init]; |
+ host.hostId = hostId; |
+ host.pairId = @""; |
+ host.pairSecret = @""; |
+ } |
+ return host; |
+} |
+ |
+#pragma mark - Private |
+ |
++ (NSMutableDictionary*)loadHosts { |
+ NSData* readData = remoting::ios::readHostPreferencesFromKeychain(); |
+ if (readData) { |
+ return [NSKeyedUnarchiver unarchiveObjectWithData:readData]; |
+ } else { |
+ return [[NSMutableDictionary alloc] init]; |
+ } |
+} |
+ |
+#pragma mark - NSCoding |
+ |
+- (instancetype)initWithCoder:(NSCoder*)coder { |
+ self = [super init]; |
+ if (self) { |
+ [self setHostId:[coder decodeObjectForKey:kHostPreferencesHostIdKey]]; |
+ [self setPairId:[coder decodeObjectForKey:kHostPreferencesPairIdKey]]; |
+ [self |
+ setPairSecret:[coder decodeObjectForKey:kHostPreferencesPairSecretKey]]; |
+ } |
+ return self; |
+} |
+ |
+- (void)encodeWithCoder:(NSCoder*)coder { |
+ [coder encodeObject:_hostId forKey:kHostPreferencesHostIdKey]; |
+ [coder encodeObject:_pairId forKey:kHostPreferencesPairIdKey]; |
+ [coder encodeObject:_pairSecret forKey:kHostPreferencesPairSecretKey]; |
+} |
+ |
+@end |