X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/80e2389990082500d76eb566d4946be3e786c3ef..d8f41ccd20de16f8ebe2ccc84d47bf1cb2b26bbb:/Keychain/ToolsViewController.m diff --git a/Keychain/ToolsViewController.m b/Keychain/ToolsViewController.m new file mode 100644 index 00000000..48db7f45 --- /dev/null +++ b/Keychain/ToolsViewController.m @@ -0,0 +1,180 @@ +// +// ToolsViewController.m +// Keychain +// +// Created by john on 10/22/12. +// +// + +#import "ToolsViewController.h" +#import "MyKeychain.h" + +#include +#include +#include +#include +#include +//#include + +#include +#include + +#import +#include +#include +#include +//#import "PeerListCell.h" + +static const uint64_t maxTimeToWaitInSeconds = 30ull * NSEC_PER_SEC; + +static bool testClearAll(void *sender) +{ + __block bool result = false; + dispatch_queue_t processQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + dispatch_semaphore_t waitSemaphore = dispatch_semaphore_create(0); + dispatch_time_t finishTime = dispatch_time(DISPATCH_TIME_NOW, maxTimeToWaitInSeconds); + + SOSCloudKeychainClearAll(processQueue, ^(CFDictionaryRef returnedValues, CFErrorRef error) + { + result = true; +// secerror("SOSCloudKeychainClearAll returned: %@", error); + dispatch_async(dispatch_get_main_queue(), + ^{ + NSLog(@"Updating because of notification"); + }); + + dispatch_semaphore_signal(waitSemaphore); + }); + + dispatch_semaphore_wait(waitSemaphore, finishTime); +//ARC dispatch_release(waitSemaphore); +// secerror("SOSCloudKeychainClearAll exit"); + return result; +} + +static void apply_block_1(const void *value, void *context) +{ + return ((__bridge void (^)(const void *value))context)(value); +} + +static inline void CFArrayForEach(CFArrayRef array, void (^operation)(const void *value)) { + CFArrayApplyFunction(array, CFRangeMake(0, CFArrayGetCount(array)), apply_block_1, (__bridge void *)(operation)); +} + +static void dumpCircleInfo() +{ + CFErrorRef error = NULL; + CFArrayRef applicantPeerInfos = NULL; + CFArrayRef peerInfos = NULL; + int idx; + + NSArray *ccmsgs = @[@"Error", @"InCircle", @"NotInCircle", @"RequestPending", @"CircleAbsent" ]; + + SOSCCStatus ccstatus = SOSCCThisDeviceIsInCircle(&error); + NSLog(@"ccstatus: %d, error: %@", ccstatus, error); + idx = ccstatus-kSOSCCError; + if (0<=idx && idx<(int)[ccmsgs count]) + NSLog(@"ccstatus: %d (%@)", ccstatus, ccmsgs[idx]); + + // Now look at current applicants + applicantPeerInfos = SOSCCCopyApplicantPeerInfo(&error); + if (applicantPeerInfos) + { + NSLog(@"Applicants: %ld, error: %@", (long)CFArrayGetCount(applicantPeerInfos), error); + CFArrayForEach(applicantPeerInfos, ^(const void *value) { + SOSPeerInfoRef peer = (SOSPeerInfoRef)value; + CFStringRef peerName = SOSPeerInfoGetPeerName(peer); + NSLog(@"Applicant: %@", peerName); + }); + } + else + NSLog(@"No applicants, error: %@", error); + + + peerInfos = SOSCCCopyPeerPeerInfo(&error); + if (peerInfos) + { + NSLog(@"Peers: %ld, error: %@", (long)CFArrayGetCount(peerInfos), error); + CFArrayForEach(peerInfos, ^(const void *value) { + SOSPeerInfoRef peer = (SOSPeerInfoRef)value; + CFStringRef peerName = SOSPeerInfoGetPeerName(peer); + NSLog(@"Peer: %@", peerName); + }); + } + else + NSLog(@"No peers, error: %@", error); +} + + +@interface ToolsViewController () +@end + +@implementation ToolsViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. + [self setStatus:@"Idle…"]; +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void)addPasswordItem:(NSString *)account service:(NSString *)service password:(NSString *) thePassword +{ + [[MyKeychain sharedInstance] setPasswordFull:account service:service password:thePassword]; +} + +- (IBAction)handleAutoPopulate:(id)sender +{ + [self addPasswordItem:@"12345678" service:@"Evernote" password:@"fiord42/sate"]; + [self addPasswordItem:@"acct2433" service:@"SwissBank" password:@"nerd0)sorely"]; + [self addPasswordItem:@"QR49BZQ77" service:@"Wells Fargo" password:@"per1}bargirl"]; + [self addPasswordItem:@"03991993-9291" service:@"Bank of America" password:@"dabs35\angst"]; + [self addPasswordItem:@"followme" service:@"Twitter" password:@"mica86[board"]; + [self addPasswordItem:@"j18373@apple.com" service:@"Mail" password:@"macro13:VIII"]; + [self addPasswordItem:@"j18373" service:@"Facebook" password:@"vow5:karakul"]; + [self addPasswordItem:@"lonely22" service:@"G+Circles" password:@"vclub17'earls"]; + [self addPasswordItem:@"yoyo9182" service:@"Skype" password:@"Andy137#FAQs"]; + [self addPasswordItem:@"terminator3828" service:@"Blizzard" password:@"David95?hive"]; +} + +- (IBAction)handleClearKeychain:(id)sender +{ + NSLog(@"Clear All Keychain Items"); + [[MyKeychain sharedInstance] clearAllKeychainItems]; +} + +- (IBAction)handleClearKVS:(id)sender +{ + testClearAll((__bridge void *)(self)); +} + +- (IBAction)resetToEmpty:(id)sender +{ + SOSCCResetToEmpty(NULL); +} + +- (IBAction)handleDumpButton:(id)sender +{ + dumpCircleInfo(); +} + +- (IBAction)handleSync:(id)sender +{ + //SOSCCSyncWithAllPeers(); +} + +//bool +- (void)setStatus:(NSString *)message +{ + NSLog(@"%@", message); + _statusMessage.text = message; +} + +@end +