NewsBlur/clients/ios/Other Sources/Overshare Kit/OSKManagedAccountCredential.m
2014-05-19 13:33:42 -07:00

228 lines
9 KiB
Objective-C
Executable file

//
// OSKManagedAccountCredential.m
// Overshare
//
//
// Copyright (c) 2013 Overshare Kit. All rights reserved.
//
#import "OSKManagedAccountCredential.h"
#import "NSDate+OSK_ISO8601.h"
#import "OSKKeychainUtility.h"
NSString * const OSKManagedAccountCredentialBaseKey_accountID = @"OSKManagedAccountCredentialBaseKey_accountID";
NSString * const OSKManagedAccountCredentialBaseKey_username = @"OSKManagedAccountCredentialBaseKey_username";
NSString * const OSKManagedAccountCredentialBaseKey_email = @"OSKManagedAccountCredentialBaseKey_email";
NSString * const OSKManagedAccountCredentialBaseKey_password = @"OSKManagedAccountCredentialBaseKey_password";
NSString * const OSKManagedAccountCredentialBaseKey_token = @"OSKManagedAccountCredentialBaseKey_token";
NSString * const OSKManagedAccountCredentialBaseKey_tokenSecret = @"OSKManagedAccountCredentialBaseKey_tokenSecret";
NSString * const OSKManagedAccountCredentialBaseKey_refreshToken = @"OSKManagedAccountCredentialBaseKey_refreshToken";
NSString * const OSKManagedAccountCredentialBaseKey_expiryDate = @"OSKManagedAccountCredentialBaseKey_expiryDate";
NSString * const OSKManagedAccountCredentialBaseKey_expiringToken = @"OSKManagedAccountCredentialBaseKey_expiringToken";
@interface OSKManagedAccountCredential ()
@property (copy, nonatomic, readwrite) NSString *overshareAccountIdentifier;
@property (copy, nonatomic, readwrite) NSString *accountID;
@property (copy, nonatomic, readwrite) NSString *username;
@property (copy, nonatomic, readwrite) NSString *email;
@property (copy, nonatomic, readwrite) NSString *password;
@property (copy, nonatomic, readwrite) NSString *token;
@property (copy, nonatomic, readwrite) NSString *tokenSecret;
@property (copy, nonatomic, readwrite) NSString *refreshToken; // OAuth2
@property (copy, nonatomic, readwrite) NSDate *expiryDate; // OAuth2
@property (copy, nonatomic, readwrite) NSString *expiringToken; // OAuth2
@end
@implementation OSKManagedAccountCredential
- (instancetype)initWithSavedValuesFromTheKeychain:(NSString *)overshareAccountIdentifier {
self = [super init];
if (self) {
_overshareAccountIdentifier = [overshareAccountIdentifier copy];
[self readAllNonNilValesFromTheKeychain];
}
return self;
}
- (instancetype)initWithOvershareAccountIdentifier:(NSString *)identifier
username:(NSString *)username
password:(NSString *)password {
self = [super init];
if (self) {
_overshareAccountIdentifier = [identifier copy];
_username = [username copy];
_password = [password copy];
[self saveAllNonNilValuesToTheKeychain];
}
return self;
}
- (instancetype)initWithOvershareAccountIdentifier:(NSString *)identifier
email:(NSString *)email
password:(NSString *)password {
self = [super init];
if (self) {
_overshareAccountIdentifier = [identifier copy];
_email = [email copy];
_password = [password copy];
[self saveAllNonNilValuesToTheKeychain];
}
return self;
}
- (instancetype)initWithOvershareAccountIdentifier:(NSString *)identifier
accessToken:(NSString *)accessToken {
self = [super init];
if (self) {
_overshareAccountIdentifier = [identifier copy];
_token = [accessToken copy];
[self saveAllNonNilValuesToTheKeychain];
}
return self;
}
- (instancetype)initWithOvershareAccountIdentifier:(NSString *)identifier
accountID:(NSString *)accountID
accessToken:(NSString *)accessToken {
self = [super init];
if (self) {
_overshareAccountIdentifier = [identifier copy];
_accountID = [accountID copy];
_token = [accessToken copy];
[self saveAllNonNilValuesToTheKeychain];
}
return self;
}
- (instancetype)initWithOvershareAccountIdentifier:(NSString *)identifier
accountID:(NSString *)accountID
OauthToken:(NSString *)accessToken
OauthTokenSecret:(NSString *)accessTokenSecret{
self = [super init];
if (self) {
_overshareAccountIdentifier = [identifier copy];
_accountID = [accountID copy];
_token = [accessToken copy];
_tokenSecret = [accessTokenSecret copy];
[self saveAllNonNilValuesToTheKeychain];
}
return self;
}
- (instancetype)initWithOvershareAccountIdentifier:(NSString *)identifier
accountID:(NSString *)accountID
Oauth2ExpiringToken:(NSString *)expiringToken
refreshToken:(NSString *)refreshToken
expiryDate:(NSDate *)expiryDate {
self = [super init];
if (self) {
_overshareAccountIdentifier = [identifier copy];
_accountID = [accountID copy];
_expiringToken = [expiringToken copy];
_refreshToken = [refreshToken copy];
_expiryDate = [expiryDate copy];
[self saveAllNonNilValuesToTheKeychain];
}
return self;
}
- (void)updateWithNewExpiringToken:(NSString *)expiringToken expiryDate:(NSDate *)expiryDate {
[self setExpiringToken:expiringToken];
[self setExpiryDate:expiryDate];
[self saveAllNonNilValuesToTheKeychain];
}
- (void)saveAllNonNilValuesToTheKeychain {
if (self.accountID.length) {
NSString *key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_accountID];
[OSKKeychainUtility saveString:self.accountID forKey:key];
}
if (self.username.length) {
NSString *key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_username];
[OSKKeychainUtility saveString:self.username forKey:key];
}
if (self.email.length) {
NSString *key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_email];
[OSKKeychainUtility saveString:self.email forKey:key];
}
if (self.password.length) {
NSString *key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_password];
[OSKKeychainUtility saveString:self.password forKey:key];
}
if (self.token.length) {
NSString *key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_token];
[OSKKeychainUtility saveString:self.token forKey:key];
}
if (self.tokenSecret.length) {
NSString *key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_tokenSecret];
[OSKKeychainUtility saveString:self.tokenSecret forKey:key];
}
if (self.refreshToken.length) {
NSString *key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_refreshToken];
[OSKKeychainUtility saveString:self.refreshToken forKey:key];
}
if (self.expiringToken.length) {
NSString *key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_expiringToken];
[OSKKeychainUtility saveString:self.expiringToken forKey:key];
}
if (self.expiryDate) {
NSString *stringFromDate = [NSDate osk_ISO8601stringFromDate:self.expiryDate];
NSString *key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_expiryDate];
[OSKKeychainUtility saveString:stringFromDate forKey:key];
}
}
- (void)readAllNonNilValesFromTheKeychain {
NSString *key = nil;
key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_accountID];
_accountID = [OSKKeychainUtility getStringForKey:key];
key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_username];
_username = [OSKKeychainUtility getStringForKey:key];
key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_email];
_email = [OSKKeychainUtility getStringForKey:key];
key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_password];
_password = [OSKKeychainUtility getStringForKey:key];
key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_token];
_token = [OSKKeychainUtility getStringForKey:key];
key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_tokenSecret];
_tokenSecret = [OSKKeychainUtility getStringForKey:key];
key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_refreshToken];
_refreshToken = [OSKKeychainUtility getStringForKey:key];
key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_expiringToken];
_expiringToken = [OSKKeychainUtility getStringForKey:key];
key = [self composedKeyForBaseKey:OSKManagedAccountCredentialBaseKey_expiryDate];
NSString *dateString = [OSKKeychainUtility getStringForKey:key];
if (dateString.length) {
_expiryDate = [NSDate osk_dateFromISO8601string:dateString];
}
}
- (NSString *)composedKeyForBaseKey:(NSString *)baseKey {
return [NSString stringWithFormat:@"%@_%@", baseKey, self.overshareAccountIdentifier];
}
@end