// // KWMUserDao.m // iOrangeBusiness // // Created by Yaotian on 10/28/14. // Copyright (c) 2014 kwm. All rights reserved. // #import "KWMUserDao.h" #import "KWMStringUtil.h" #import "KWMUser.h" #import "NSString+SAMAdditions.h" #import "KWMAPIManager.h" #import "AppDelegate.h" //#import "JPUSHService.h" #import "PSPDFAlertView.h" #import "KWMStringUtil.h" #define SESSID @"PHPSESSID" static NSString *kwmKeySessionId = @"sessionId"; static NSString *kwmKeyUser = @"KWMUser"; static NSString *kwmKeyExchangeRate = @"KWMExangeRate"; static NSString *kwmKeyCheckoutCache = @"KWMCheckoutCache"; static NSString *kwmKeySavedAccountPassword = @"savedAccountPassword"; //static NSString *secretKey = @"!@#EQRGEQ$#Y%>O:"; @interface KWMUserDao () @end @implementation KWMUserDao { KWMUser *current; NSString *sessionId; NSString *hxAccount; NSString *hxPassword; NSDictionary *_savedAccountPassword; BOOL isSkipLoginChat; BOOL isLoginedChat; BOOL isLogingChat; } + (KWMUserDao *)shareDao { static KWMUserDao *_userDao = nil; static dispatch_once_t oncePredicate; dispatch_once(&oncePredicate, ^{ _userDao =[[self alloc] init]; // _userDao->isSkipLoginChat = NO; //#ifdef DEBUG // _userDao->isSkipLoginChat = YES; //#endif [[NSNotificationCenter defaultCenter] addObserverForName:KWMReceiverNoLogin object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { if ([_userDao isLogin]) { [_userDao logout]; AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate; // [app toLogin]; } }]; }); return _userDao; } - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self name:KWMReceiverNoLogin object:nil]; } - (BOOL)checkSession { if ([KWMStringUtil isEmpty:sessionId]) { NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; sessionId = [defaults objectForKey:kwmKeySessionId]; } [self updateSession:sessionId]; return ![KWMStringUtil isEmpty:sessionId]; } - (void)deleteSession { //#ifdef DEBUG // NSAssert(NO, @"不许登出"); //#endif sessionId = @""; NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; [defaults setObject:@"" forKey:kwmKeySessionId]; [defaults synchronize]; } - (void)saveSession:(NSString *)value { NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; sessionId = value; [defaults setObject:value forKey:kwmKeySessionId]; [defaults synchronize]; } - (void)saveImageUrl:(NSString *)imageUrl key:(NSString *)key{ NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; [defaults setObject:imageUrl forKey:key]; [defaults synchronize]; } - (NSString *)getImageUrl:(NSString *)key{ NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; NSString *exists = [defaults objectForKey:key]; if (![KWMStringUtil isEmpty:exists]) { return exists; }else{ return @""; } } - (KWMUser *)loginUser { NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; NSString *userJSON = [defaults objectForKey:kwmKeyUser]; NSData *jsonData = userJSON != nil ? [userJSON dataUsingEncoding:NSUTF8StringEncoding] : nil; if (jsonData) { NSError *error; NSDictionary *userDict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&error]; if (!error) { KWMUser *tmpUser = [[KWMUser alloc]initWithDictionary:userDict error:&error]; if (!error && [tmpUser isValidated]) { current = tmpUser; } } } return current; } - (void)setLoginUser:(KWMUser *)user session:(NSString *)session{ current = user; if (current == nil || ![current isValidated]) { [self logout]; return; } [self saveUser:user]; [self saveSession:session]; } - (void)saveUser:(KWMUser *)user { NSString *userJSON = user.toJSONString; NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; [defaults setObject:userJSON forKey:kwmKeyUser]; [defaults synchronize]; // [self registerJpush]; } - (void)deleteUser { NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; [defaults removeObjectForKey:kwmKeyUser]; } -(NSDictionary *)checkOutCache{ NSString *filePath = [self getCheckoutCachePath]; // 解档 NSData *cacheData = [NSData dataWithContentsOfFile:filePath]; if(!cacheData){ return nil; } NSDictionary *checkout = [NSJSONSerialization JSONObjectWithData:cacheData options:NSJSONReadingMutableContainers error:nil]; return checkout; // if(checkout){ // return [[BUYModelManager modelManager] insertCheckoutWithJSONDictionary:checkout]; // }else{ // return nil; // } } -(void)saveCheckoutCache:(NSDictionary *)dictionary{ if(dictionary){ NSData *cacheData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:nil]; if([cacheData writeToFile:[self getCheckoutCachePath] atomically:YES]){ NSLog(@"订单缓存成功"); }else{ NSLog(@"订单缓存失败"); } } } -(void)deleteCheckoutCache{ NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL isDelete=[fileManager removeItemAtPath:[self getCheckoutCachePath] error:nil]; } - (void)saveExchangeRate:(NSNumber *)exchangeRate { if(exchangeRate == nil){ return; } NSString *exchangeString = exchangeRate.stringValue; NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; [defaults setObject:exchangeString forKey:kwmKeyExchangeRate]; [defaults synchronize]; } - (NSNumber *)exchangeRate { NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; NSString *exchageRateString = [defaults objectForKey:kwmKeyExchangeRate]; return [KWMStringUtil stringToNumber:exchageRateString]; } -(void)saveCollectionCache:(NSArray *)products collectionId:(NSNumber *)collectionId tags:(NSArray *)tags{ if(!products || products.count == 0){ return; } if(!collectionId){ return; } //初始化用于保存数据的key NSString *filePath= [self getCollectionCachePath:collectionId tags:tags]; //用于保存的字典列表 NSMutableArray *cacheArray =[NSMutableArray arrayWithCapacity:20]; for(BUYProduct *product in products){ if(product.JSONDictionary!=nil){ [cacheArray addObject:product.JSONDictionary]; } } if (![cacheArray writeToFile:filePath atomically:YES]){ NSLog(@"缓存失败"); } } -(NSArray *)getCollectionCache:(NSNumber *)collectionId tags:(NSArray *)tags{ NSString *filePath = [self getCollectionCachePath:collectionId tags:tags]; // 解档 NSArray *arr = [NSArray arrayWithContentsOfFile:filePath]; if(!arr||arr.count == 0){ return nil; } NSArray *cacheArr = [[BUYModelManager modelManager] insertProductsWithJSONArray:arr]; return cacheArr; } -(NSString *)getCollectionCachePath:(NSNumber *)collectionId tags:(NSArray *)tags{ if(!collectionId){ return @" "; } //初始化用于保存数据的key NSString *key =collectionId.stringValue; if(tags && tags.count>0){ for(NSString *tag in tags){ key = [NSString stringWithFormat:@"%@、%@",key,tag]; } } NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject; NSString *filePath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",key]]; return filePath; } -(NSString *)getCheckoutCachePath{ NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject; NSString *filePath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",kwmKeyCheckoutCache]]; return filePath; } - (BOOL)isLogin { return [self.loginUser isValidated] && [self checkSession]; } - (void)logout{ [self deleteSession]; // [self unRegisterJpush]; [self deleteUser]; // [self logoutChat]; } #pragma mark DES encrypt & decrypt /** * DES加密 * * @param plain data * * @return secret data */ //- (NSData *)DES_Encrypt:(NSData *)plainData{ // if (!plainData) { // return plainData; // } // // NSData *keyData = [secretKey dataUsingEncoding:NSASCIIStringEncoding]; // Byte iv[]={0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef}; // NSData *ivData = [NSData dataWithBytes:iv length:sizeof(iv)]; // // NSData *secretData = [STEncryptorDES encryptData:plainData key:keyData iv:ivData]; // return secretData; //} /** * DES解密 * * @param secret data * * @return plain data */ //- (NSData *)DES_DEcrypt:(NSData *)secretData{ // if (!secretData) { // return secretData; // } // // NSData *keyData = [secretKey dataUsingEncoding:NSASCIIStringEncoding]; // Byte iv [] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef}; // NSData *ivData = [NSData dataWithBytes:iv length:sizeof(iv)]; // NSData *plainData = [STEncryptorDES decryptData:secretData key:keyData iv:ivData]; // return plainData; //} #pragma mark JPush // //-(void)registerJpush{ // NSString *alias = [KWMStringUtil MD5:[NSString stringWithFormat:@"%@", self.loginUser.id.stringValue]]; // // NSSet *tags = [NSSet setWithArray:@[]]; // //注册极光推送 // [JPUSHService setTags:nil alias:alias callbackSelector:@selector(registerCallbackJpushAlias:tags:alias:) object:self]; //} // //-(void)unRegisterJpush{ // //反注册极光推送 // NSString *alias = @""; // NSSet *tags = [NSSet setWithArray:@[]]; // [JPUSHService setTags:nil alias:alias callbackSelector:@selector(unRegisterCallbackJpushAlias:tags:alias:) object:self]; //} // //- (void)registerCallbackJpushAlias:(int)iResCode tags:(NSSet*)tags alias:(NSString*)alias { // if(iResCode == 6002){//如果返回 6002 (超时)则建议重试 // [self registerJpush]; // return; // } // // NSLog(@"++++registerJpush: registrationID=%@", [JPUSHService registrationID]); //} // //- (void)unRegisterCallbackJpushAlias:(int)iResCode tags:(NSSet*)tags alias:(NSString*)alias { // if(iResCode == 6002){//如果返回 6002 (超时)则建议重试 // [self unRegisterJpush]; // return; // } //} #pragma mark login session - (void (^)(NSURLSessionDataTask *, KWMRequestResult *))getLoginSuccessCallback:(void (^)(NSURLSessionDataTask *task, KWMRequestResult *result))callback { __weak KWMUserDao *weakSelf = self; void (^success)(NSURLSessionDataTask *, KWMRequestResult *) = ^(NSURLSessionDataTask *task, KWMRequestResult *result) { BOOL isSuccess = result != nil && result.code == 0; if (isSuccess) { KWMUser *user = (KWMUser *)result.data; if (user != nil) { [weakSelf fetchSession:(NSHTTPURLResponse *)task.response user:user]; } } if (callback != nil) { callback(task, result); } }; return success; } - (void)fetchSession:(NSHTTPURLResponse *)httpResponse user:(KWMUser *)user { NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; NSArray<NSHTTPCookie *> *cookies = cookieStorage.cookies; for (NSHTTPCookie *cookie in cookies) { if ([SESSID isEqualToString:cookie.name] && [API_HOST isEqualToString:cookie.domain]) { NSString *session = cookie.value; KWMUserDao *userDao = [KWMUserDao shareDao]; [userDao setLoginUser:user session:session]; break; } } } - (void)updateSession:(NSString *)session { NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; NSArray<NSHTTPCookie *> *cookies = cookieStorage.cookies; //delete if empty if ([KWMStringUtil isEmpty:session]) { for (NSHTTPCookie *cookie in cookies) { [cookieStorage deleteCookie:cookie]; } return; } BOOL isExists = NO; //1.check if exists for (NSHTTPCookie *cookie in cookies) { if ([SESSID isEqualToString:cookie.name]) { NSString *exists = cookie.value; isExists = [session isEqualToString:exists]; break; } } //2.set session value if (!isExists) { for (NSHTTPCookie *cookie in cookies) { [cookieStorage deleteCookie:cookie]; } NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:@{ NSHTTPCookieName : SESSID, NSHTTPCookieValue : session, NSHTTPCookieDomain : API_HOST, NSHTTPCookiePath : @"/" }]; [cookieStorage setCookie:cookie]; } } @end