// // ApplicationModel.m // FirstLink // // Created by unicode on 14-9-28. // Copyright (c) 2014年 FirstLink. All rights reserved. // #import "FKUserManager.h" #import "UserDefaultManager.h" #import @interface FKUserManager () @property (nonatomic, strong) User* user; @property (nonatomic, strong) UICKeyChainStore *keychain; @end @implementation FKUserManager + (FKUserManager *)sharedManager { static FKUserManager *sharedUserManagerInstance = nil; static dispatch_once_t once_token; dispatch_once(&once_token, ^{ sharedUserManagerInstance = [[self alloc] init]; }); return sharedUserManagerInstance; } - (instancetype)init { self = [super init]; if (self) { _keychain = [UICKeyChainStore keyChainStoreWithService:@"com.firstlink.duoshoubang.mobile"]; } return self; } #pragma mark - User + (NSString*)userArchivePath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *homePath = [paths objectAtIndex:0]; return [homePath stringByAppendingPathComponent:@"user.archive"]; } - (User*)unarchiveUser { User *user = [NSKeyedUnarchiver unarchiveObjectWithFile:[FKUserManager userArchivePath]]; return user; } - (User*)user { if (_user != nil) { return _user; } else { // 为兼容归档文件向kechain迁移 NSFileManager *manager = [NSFileManager defaultManager]; if ([manager fileExistsAtPath:[FKUserManager userArchivePath]]) { _user = [[FKUserManager sharedManager] unarchiveUser]; [manager removeItemAtPath:[FKUserManager userArchivePath] error:nil]; [self saveUser:_user]; } else { _user = [[User alloc] init]; _user.isNew = self.keychain[kIsNew]; _user.headurl = self.keychain[kHeadURL]; _user.mobile = self.keychain[kMobile]; _user.nickName = self.keychain[kNickName]; _user.status = self.keychain[kStatus]; _user.level = self.keychain[kLevel]; _user.token = self.keychain[kToken]; _user.userID = self.keychain[kUserID]; _user.introduce = self.keychain[kIntroduce]; NSString *type = self.keychain[kLoginType]; if (type.length == 0) { _user.lastLoginType = UserLoginTypeMobile; } else { _user.lastLoginType = (UserLoginType)[type intValue]; } } } return _user; } - (BOOL)saveUser:(User *)user { _user = [user mutableCopy]; self.keychain[kIsNew] = _user.isNew; self.keychain[kHeadURL] = _user.headurl; self.keychain[kMobile] = _user.mobile; self.keychain[kNickName] = _user.nickName; self.keychain[kStatus] = _user.status; self.keychain[kLevel] = _user.level; self.keychain[kToken] = _user.token; self.keychain[kUserID] = _user.userID; self.keychain[kIntroduce] = _user.introduce; self.keychain[kLoginType] = [NSString stringWithFormat:@"%@", @(_user.lastLoginType)]; return TRUE; } - (BOOL)clearUser { _user = nil; self.keychain[kIsNew] = nil; self.keychain[kHeadURL] = nil; self.keychain[kMobile] = nil; self.keychain[kNickName] = nil; self.keychain[kStatus] = nil; self.keychain[kLevel] = nil; self.keychain[kToken] = nil; self.keychain[kUserID] = nil; self.keychain[kIntroduce] = nil; self.keychain[kLoginType] = nil; NSFileManager *manager = [NSFileManager defaultManager]; if ([manager fileExistsAtPath:[FKUserManager userArchivePath]]) { [manager removeItemAtPath:[FKUserManager userArchivePath] error:nil]; } return TRUE; } + (BOOL)isUserLogin { User *user = [FKUserManager sharedManager].user; if (user == nil || user.token == nil) { return FALSE; } return TRUE; } - (ApplicationMode)applicationMode { if ([FKUserManager isUserLogin]) { return ApplicationModeLogin; } return ApplicationModeVisitor; } - (BOOL)localLogout { User *user = [[User alloc] init]; user.mobile = self.user.mobile; user.nickName = self.user.nickName; user.headurl = self.user.headurl; user.lastLoginType = self.user.lastLoginType; [self saveUser:user]; [SystemUtil asyncRequestUserAuthority]; return NO; } + (void)remoteLogout:(void (^)(MSGHeader *, id))success failure:(void (^)(MSGHeader *, NSError *))failure { NSString *URLString = [NSString stringWithFormat:@"%@/link-site/api/user/logout.json?d_id=%@&umtk=%@", [[FKServerUtil sharedInstance] apiServer], [FLStringHelper replaceNilWithEmpty:[SystemUtil getIdentifierForVendor]], [[UserDefaultManager sharedManager] getUserDefaultObject:REMOTE_NOTIFICATION_TOKEN] ]; FLDataCenter *dataCenter = [FLDataCenter sharedDataCenter]; [dataCenter POST:URLString parameters:[FLRequestHelper commonParamater] success:^(MSGHeader *header, id responseObject) { if ([header.code intValue] == RESPONSE_MSG_NORMAL) { success(header, responseObject); } else { success(header, responseObject); } } failure:^(MSGHeader *header, NSError *error) { failure(header, error); }]; } @end