You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
4.0 KiB

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