FLEXKeychain.m 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. //
  2. // SSKeychain.m
  3. // SSKeychain
  4. //
  5. // Created by Sam Soffes on 5/19/10.
  6. // Copyright (c) 2010-2014 Sam Soffes. All rights reserved.
  7. //
  8. #import "FLEXKeychain.h"
  9. #import "FLEXKeychainQuery.h"
  10. NSString *const kSSKeychainErrorDomain = @"com.samsoffes.sskeychain";
  11. NSString *const kSSKeychainAccountKey = @"acct";
  12. NSString *const kSSKeychainCreatedAtKey = @"cdat";
  13. NSString *const kSSKeychainClassKey = @"labl";
  14. NSString *const kSSKeychainDescriptionKey = @"desc";
  15. NSString *const kSSKeychainLabelKey = @"labl";
  16. NSString *const kSSKeychainLastModifiedKey = @"mdat";
  17. NSString *const kSSKeychainWhereKey = @"svce";
  18. #if __IPHONE_4_0 && TARGET_OS_IPHONE
  19. static CFTypeRef SSKeychainAccessibilityType = NULL;
  20. #endif
  21. @implementation FLEXKeychain
  22. + (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account {
  23. return [self passwordForService:serviceName account:account error:nil];
  24. }
  25. + (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error {
  26. FLEXKeychainQuery *query = [[FLEXKeychainQuery alloc] init];
  27. query.service = serviceName;
  28. query.account = account;
  29. [query fetch:error];
  30. return query.password;
  31. }
  32. + (NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account {
  33. return [self passwordDataForService:serviceName account:account error:nil];
  34. }
  35. + (NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error {
  36. FLEXKeychainQuery *query = [[FLEXKeychainQuery alloc] init];
  37. query.service = serviceName;
  38. query.account = account;
  39. [query fetch:error];
  40. return query.passwordData;
  41. }
  42. + (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account {
  43. return [self deletePasswordForService:serviceName account:account error:nil];
  44. }
  45. + (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error {
  46. FLEXKeychainQuery *query = [[FLEXKeychainQuery alloc] init];
  47. query.service = serviceName;
  48. query.account = account;
  49. return [query deleteItem:error];
  50. }
  51. + (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account {
  52. return [self setPassword:password forService:serviceName account:account error:nil];
  53. }
  54. + (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error {
  55. FLEXKeychainQuery *query = [[FLEXKeychainQuery alloc] init];
  56. query.service = serviceName;
  57. query.account = account;
  58. query.password = password;
  59. return [query save:error];
  60. }
  61. + (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account {
  62. return [self setPasswordData:password forService:serviceName account:account error:nil];
  63. }
  64. + (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error {
  65. FLEXKeychainQuery *query = [[FLEXKeychainQuery alloc] init];
  66. query.service = serviceName;
  67. query.account = account;
  68. query.passwordData = password;
  69. return [query save:error];
  70. }
  71. + (NSArray *)allAccounts {
  72. return [self allAccounts:nil];
  73. }
  74. + (NSArray *)allAccounts:(NSError *__autoreleasing *)error {
  75. return [self accountsForService:nil error:error];
  76. }
  77. + (NSArray *)accountsForService:(NSString *)serviceName {
  78. return [self accountsForService:serviceName error:nil];
  79. }
  80. + (NSArray *)accountsForService:(NSString *)serviceName error:(NSError *__autoreleasing *)error {
  81. FLEXKeychainQuery *query = [[FLEXKeychainQuery alloc] init];
  82. query.service = serviceName;
  83. return [query fetchAll:error];
  84. }
  85. #if __IPHONE_4_0 && TARGET_OS_IPHONE
  86. + (CFTypeRef)accessibilityType {
  87. return SSKeychainAccessibilityType;
  88. }
  89. + (void)setAccessibilityType:(CFTypeRef)accessibilityType {
  90. CFRetain(accessibilityType);
  91. if (SSKeychainAccessibilityType) {
  92. CFRelease(SSKeychainAccessibilityType);
  93. }
  94. SSKeychainAccessibilityType = accessibilityType;
  95. }
  96. #endif
  97. @end