| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790 |
- //
- // JXLoginServer.m
- // shiku_im
- //
- // Created by p on 2019/7/23.
- // Copyright © 2019 Reese. All rights reserved.
- //
- #import "JXLoginServer.h"
- #import "MD5Util.h"
- #import "AESUtil.h"
- #import "NSMutableDictionary+NSMutableDictionary_SK.h"
- #import "JXKeyChainStore.h"
- #import "JXUUIDModel.h"
- @interface JXLoginServer()
- @property (nonatomic, weak) id toView;
- @property (nonatomic, copy) NSString *memberAccount;// 会员账号
- @property (nonatomic, copy) NSString *password; // 手动登录登录密码
- @property (nonatomic, copy) NSString *areaCode; // 区号
- @property (nonatomic, copy) NSString *account; // 手机号
- @property (nonatomic, copy) NSString *userId; // 用户ID
- @property (nonatomic, copy) NSString *model; // 手机号
- @property (nonatomic, copy) NSString *security; // 用户ID
- @property (nonatomic, copy) NSString *code; // 用户code
- @property (nonatomic, strong) NSData *codeData; // code解码后data
- @property (nonatomic, copy) NSString *salt; // 毫秒级时间
- @property (nonatomic, strong) NSMutableDictionary *param; // 接口参数
- @property (nonatomic,copy) NSString *loginToken; //登录返回的token用于自动登录验参
- @property (nonatomic,copy) NSString *loginKey; // 登录返回的key用于自动登录验参
- @property (nonatomic,copy) NSString *verificationCode; // 短信登录验证码
- @property (nonatomic, assign) BOOL isThird;
- @end
- @implementation JXLoginServer
- + (instancetype)sharedManager {
-
- static dispatch_once_t onceToken;
- static JXLoginServer *instance;
- dispatch_once(&onceToken, ^{
- instance = [[JXLoginServer alloc] init];
- });
- return instance;
-
- }
- - (instancetype)init {
- if ([super init]) {
- }
- return self;
- }
- // 登录接口方法
- - (void)loginWithUser:(JXUserObject *)user password:(NSString *)password areaCode:(NSString *)areaCode account:(NSString *)account toView:(id)toView{
-
- self.isThird = NO;
- long time = (long)[[NSDate date] timeIntervalSince1970];
- time = time *1000 + g_server.timeDifference;
- self.salt = [NSString stringWithFormat:@"%ld",time];
- self.toView = toView;
- self.password = password;
- self.areaCode = areaCode;
- self.account = account;
- self.param = [self getLoginParamWithUser:user];
-
- NSString *mac = [self getCodeMac];
- [g_server authGetLoginCodeWithAreaCode:areaCode account:account salt:self.salt deviceId:@"ios" mac:mac toView:self];
- }
- - (void)loginWithUserNew:(JXUserObject *)user password:(NSString *)password areaCode:(NSString *)areaCode account:(NSString *)account model:(NSString *)model security:(NSString *)securityStr toView:(id)toView{
-
-
- self.isThird = NO;
- long time = (long)[[NSDate date] timeIntervalSince1970];
- time = time *1000 + g_server.timeDifference;
- self.salt = [NSString stringWithFormat:@"%ld",time];
- self.toView = toView;
- self.password = password;
- self.areaCode = areaCode;
- self.account = account;
- self.model = model;
- self.security = securityStr;
- _param = [self getLoginParamWithUser:user];
- NSString *mac = [self getCodeMac];
-
-
- [g_server authGetLoginCodeWithAreaCodeXX:areaCode account:account salt:self.salt deviceId:@"ios" model:model security:securityStr mac:mac toView:self];
- }
- // 自动登录
- - (void)autoLoginWithToView:(id)toView {
-
- long time = (long)[[NSDate date] timeIntervalSince1970];
- time = time *1000 + g_server.timeDifference;
- self.salt = [NSString stringWithFormat:@"%ld",time];
- self.toView = toView;
- self.param = [self getAutoLoginParam];
- self.loginToken = [g_default objectForKey:kMY_USER_LOGINTOKEN];
- if (!self.loginToken) {
- self.loginToken = @"";
- }
- self.loginKey = [g_default objectForKey:kMY_USER_LOGINKEY];
- if (!self.loginKey) {
- self.loginKey = @"";
- }
- self.userId = MY_USER_ID;
- NSString *data = [self getDataString:YES];
- [g_server autoLoginV1:self.loginToken salt:self.salt data:data toView:self];
- }
- // 手动登录参数
- - (NSMutableDictionary *)getLoginParamWithUser:(JXUserObject *)user {
-
- NSString *identifier = [[NSBundle mainBundle] bundleIdentifier];
-
- NSMutableDictionary *dict = [NSMutableDictionary dictionary];
- if (user.verificationCode) {
- [dict setObject:user.verificationCode forKey:@"verificationCode"];
- }
- [dict setObject:@"client_credentials" forKey:@"grant_type"];
- if (user.model) {
- [dict setObject:user.model forKey:@"model"];
- }
- if (user.osVersion) {
- [dict setObject:user.osVersion forKey:@"osVersion"];
- }
- if (user.security) {
- [dict setObject:user.security forKey:@"security"];
- }
-
- //[JXUUIDModel getDeviceIDInKeychain]
-
- [dict setObject:[JXKeyChainStore getUUIDByKeyChain] forKey:@"serial"];
- [dict setObject:[NSNumber numberWithDouble:g_server.latitude] forKey:@"latitude"];
- [dict setObject:[NSNumber numberWithDouble:g_server.longitude] forKey:@"longitude"];
- if (user.location) {
- [dict setObject:user.location forKey:@"location"];
- }
- [dict setObject:identifier forKey:@"appId"];
- [dict setObject:[NSNumber numberWithInt:1] forKey:@"xmppVersion"];
-
- // 登录类型 0:账号密码登录,1:短信验证码登录
- if (user.verificationCode.length > 0) {
- [dict setObject:@1 forKey:@"loginType"];
- }else {
- [dict setObject:@0 forKey:@"loginType"];
- }
- // 是否开启集群
- if ([g_config.isOpenCluster integerValue] == 1) {
- NSString *area = [g_default objectForKey:kLocationArea];
- if (area) {
- [dict setObject:area forKey:@"area"];
- }
- }
-
- return dict;
- }
- // 自动登录参数
- - (NSMutableDictionary *)getAutoLoginParam{
-
- NSString *identifier = [[NSBundle mainBundle] bundleIdentifier];
-
- NSMutableDictionary *dict = [NSMutableDictionary dictionary];
- [dict setObject:g_macAddress forKey:@"serial"];
- [dict setObject:[NSNumber numberWithDouble:g_server.latitude] forKey:@"latitude"];
- [dict setObject:[NSNumber numberWithDouble:g_server.longitude] forKey:@"longitude"];
- [dict setObject:[NSNumber numberWithInt:1] forKey:@"xmppVersion"];
- [dict setObject:identifier forKey:@"appId"];
- // 是否开启集群
- if ([g_config.isOpenCluster integerValue] == 1) {
- NSString *area = [g_default objectForKey:kLocationArea];
- if (area) {
- [dict setObject:area forKey:@"area"];
- }
- }
-
- return dict;
- }
- - (NSString *)getCodeMac{
-
- NSMutableString *macStr = [NSMutableString string];
- [macStr appendString:APIKEY];
- //[macStr appendString:self.areaCode];
- [macStr appendString:@"86"];
- [macStr appendString:self.account];
- [macStr appendString:self.salt];
-
- NSData *aesData = [AESUtil encryptAESData:[MD5Util getMD5DataWithString:self.password] key:[MD5Util getMD5DataWithString:self.password]];
- NSData *macData = [g_securityUtil getHMACMD5:[macStr dataUsingEncoding:NSUTF8StringEncoding] key:[[MD5Util getMD5StringWithData:aesData] dataUsingEncoding:NSUTF8StringEncoding]];
- NSString *mac = [macData base64EncodedStringWithOptions:0];
-
- return mac;
- }
- - (NSString *)getLoginMac:(BOOL)isAutoLogin {
- NSMutableString *macStr = [NSMutableString string];
- [macStr appendString:APIKEY];
- [macStr appendString:self.userId];
- if (isAutoLogin) {
- [macStr appendString:self.loginToken];
- }
- NSString *paramStr = [self getParamStr];
- [macStr appendString:paramStr];
- [macStr appendString:self.salt];
-
- NSData *macData;
- if (!isAutoLogin) {
-
- NSData *aesData = [AESUtil encryptAESData:[MD5Util getMD5DataWithString:self.password] key:[MD5Util getMD5DataWithString:self.password]];
- [macStr appendString:[MD5Util getMD5StringWithData:aesData]];
- macData = [g_securityUtil getHMACMD5:[macStr dataUsingEncoding:NSUTF8StringEncoding] key:self.codeData];
- }else {
-
- NSData *keyData = [[NSData alloc] initWithBase64EncodedString:self.loginKey options:NSDataBase64DecodingIgnoreUnknownCharacters];
- macData = [g_securityUtil getHMACMD5:[macStr dataUsingEncoding:NSUTF8StringEncoding] key:keyData];
- }
-
-
- NSString *mac = [macData base64EncodedStringWithOptions:0];
-
- return mac;
- }
- // 参数按顺序拼接
- - (NSString *)getParamStr {
-
- NSMutableString *paramStr = [NSMutableString string];
-
- NSArray *keys = [[self.param allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
- for (NSInteger i = 0; i < keys.count; i ++) {
- NSString *key = keys[i];
- NSString *value = self.param[key];
- if ([self.param[key] isKindOfClass:[NSNumber class]]) {
- NSNumber *num = self.param[key];
- value = [num stringValue];
- }
- [paramStr appendString:value];
- [self.param setObject:value forKey:key];
- }
-
- return [paramStr copy];
- }
- - (NSString *)getDataString:(BOOL)isAutoLogin {
-
- NSString *mac = [self getLoginMac:isAutoLogin];
- NSMutableDictionary *dict = [self.param mutableCopy];
- [dict setObject:mac forKey:@"mac"];
-
- SBJsonWriter * OderJsonwriter = [SBJsonWriter new];
- NSString * jsonString = [OderJsonwriter stringWithObject:dict];
-
- NSData *aesJsonData;
- if (isAutoLogin) {
- NSData *data = [[NSData alloc] initWithBase64EncodedString:self.loginKey options:NSDataBase64DecodingIgnoreUnknownCharacters];
- aesJsonData = [AESUtil encryptAESData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] key:data];
- }else {
- aesJsonData = [AESUtil encryptAESData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] key:self.codeData];
- }
-
- return [aesJsonData base64EncodedStringWithOptions:0];
- }
- #pragma mark ----- 短信登录
- // 短信登录接口
- - (void)smsLoginWithUser:(JXUserObject *)user areaCode:(NSString *)areaCode account:(NSString *)account toView:(id)toView {
-
- long time = (long)[[NSDate date] timeIntervalSince1970];
- time = time *1000 + g_server.timeDifference;
- self.salt = [NSString stringWithFormat:@"%ld",time];
- self.toView = toView;
- self.areaCode = areaCode;
- self.account = account;
- self.verificationCode = user.verificationCode;
- self.param = [self getLoginParamWithUser:user];
- NSString *data = [self getSMSDataStr];
-
- [g_server userSMSLogin:self.areaCode account:self.account salt:self.salt data:data toView:self];
- }
- // 获取短信登录data
- - (NSString *)getSMSDataStr {
-
- NSString *mac = [self getSMSMac];
- NSMutableDictionary *dict = [self.param mutableCopy];
- [dict setObject:mac forKey:@"mac"];
-
- SBJsonWriter * OderJsonwriter = [SBJsonWriter new];
- NSString * jsonString = [OderJsonwriter stringWithObject:dict];
-
- NSData *aesJsonData = [AESUtil encryptAESData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] key:[MD5Util getMD5DataWithString:self.verificationCode]];
-
- return [aesJsonData base64EncodedStringWithOptions:0];
- }
- // 获取短信登录Mac
- - (NSString *)getSMSMac{
- NSMutableString *macStr = [NSMutableString string];
- [macStr appendString:APIKEY];
- [macStr appendString:self.areaCode];
- [macStr appendString:self.account];
- NSString *paramStr = [self getParamStr];
- [macStr appendString:paramStr];
- [macStr appendString:self.salt];
-
- NSData *macData = [g_securityUtil getHMACMD5:[macStr dataUsingEncoding:NSUTF8StringEncoding] key:[MD5Util getMD5DataWithString:self.verificationCode]];
-
- NSString *mac = [macData base64EncodedStringWithOptions:0];
-
- return mac;
- }
- #pragma mark ----- 第三方绑定
- // 第三方绑定手机号
- -(void)thirdLoginV1:(JXUserObject*)user password:(NSString *)password type:(NSInteger)type openId:(NSString *)openId isLogin:(BOOL)isLogin toView:(id)toView {
-
- self.isThird = YES;
-
- long time = (long)[[NSDate date] timeIntervalSince1970];
- time = time *1000 + g_server.timeDifference;
- self.salt = [NSString stringWithFormat:@"%ld",time];
- self.password = password;
- self.toView = toView;
- self.param = [self getThirdLoginParamWithUser:user type:type openId:openId isLogin:isLogin];
- self.areaCode = user.areaCode;
- self.account = user.telephone;
-
- NSString *mac = [self getCodeMac];
-
- [g_server authGetLoginCodeWithAreaCode:self.areaCode account:self.account salt:self.salt deviceId:@"ios" mac:mac toView:self];
- }
- // 第三方绑定参数
- - (NSMutableDictionary *)getThirdLoginParamWithUser:(JXUserObject *)user type:(NSInteger)type openId:(NSString *)openId isLogin:(BOOL)isLogin {
-
- NSString *identifier = [[NSBundle mainBundle] bundleIdentifier];
- NSMutableDictionary *p = [NSMutableDictionary dictionary];
- [p setNotNullObject:[NSNumber numberWithInteger:type] forKey:@"type"];
- [p setNotNullObject:openId forKey:@"loginInfo"];
- if (g_server.openId.length > 0 ) {
- NSString *tel = [NSString stringWithFormat:@"%@%@",user.areaCode,user.telephone];
- [p setNotNullObject:tel forKey:@"telephone"];
- }else {
- [p setNotNullObject:user.telephone forKey:@"telephone"];
- }
-
- NSData *aesData = [AESUtil encryptAESData:[MD5Util getMD5DataWithString:self.password] key:[MD5Util getMD5DataWithString:self.password]];
- [p setObject:[MD5Util getMD5StringWithData:aesData]forKey:@"password"];
- // 没有在登录后 绑定 才需要传下面的参数
- if (!isLogin) {
- [p setNotNullObject:user.areaCode forKey:@"areaCode"];
- [p setNotNullObject:@"client_credentials" forKey:@"grant_type"];
- [p setNotNullObject:user.model forKey:@"model"];
- [p setNotNullObject:user.osVersion forKey:@"osVersion"];
- [p setNotNullObject:g_macAddress forKey:@"serial"];
- [p setNotNullObject:[NSNumber numberWithDouble:g_server.latitude] forKey:@"latitude"];
- [p setNotNullObject:[NSNumber numberWithDouble:g_server.longitude] forKey:@"longitude"];
- [p setNotNullObject:user.location forKey:@"location"];
- [p setNotNullObject:identifier forKey:@"appId"];
- [p setNotNullObject:[NSNumber numberWithInt:1] forKey:@"xmppVersion"];
- [p setNotNullObject:[JXKeyChainStore getUUIDByKeyChain] forKey:@"serial"];
-
- // 是否开启集群
- if ([g_config.isOpenCluster integerValue] == 1) {
- NSString *area = [g_default objectForKey:kLocationArea];
- [p setNotNullObject:area forKey:@"area"];
- }
- }
-
- return p;
- }
- // 获取第三方绑定data
- - (NSString *)getThirdDataStr {
-
- NSString *mac = [self getThirdMac];
- NSMutableDictionary *dict = [self.param mutableCopy];
- [dict setObject:mac forKey:@"mac"];
-
- SBJsonWriter * OderJsonwriter = [SBJsonWriter new];
- NSString * jsonString = [OderJsonwriter stringWithObject:dict];
-
- NSData *aesJsonData = [AESUtil encryptAESData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] key:self.codeData];
-
- return [aesJsonData base64EncodedStringWithOptions:0];
- }
- // 获取第三方绑定Mac
- - (NSString *)getThirdMac{
- NSMutableString *macStr = [NSMutableString string];
- [macStr appendString:APIKEY];
- [macStr appendString:self.userId];
- NSString *paramStr = [self getParamStr];
- [macStr appendString:paramStr];
- [macStr appendString:self.salt];
-
- NSData *aesData = [AESUtil encryptAESData:[MD5Util getMD5DataWithString:self.password] key:[MD5Util getMD5DataWithString:self.password]];
- [macStr appendString:[MD5Util getMD5StringWithData:aesData]];
-
- NSData *macData = [g_securityUtil getHMACMD5:[macStr dataUsingEncoding:NSUTF8StringEncoding] key:self.codeData];
-
- NSString *mac = [macData base64EncodedStringWithOptions:0];
-
- return mac;
- }
- #pragma mark -------微信登录
- // 微信登录
- - (void)wxSdkLoginV1:(JXUserObject *)user type:(NSInteger)type openId:(NSString *)openId toView:(id)toView {
-
- long time = (long)[[NSDate date] timeIntervalSince1970];
- time = time *1000 + g_server.timeDifference;
- self.salt = [NSString stringWithFormat:@"%ld",time];
- self.toView = toView;
- self.account = openId;
- self.param = [self getWXSdkLoginParamWithUser:user type:type openId:openId];
-
- NSString *data = [self getWXSdkLoginDataStr];
-
- [g_server wxSdkLoginV1:self.salt data:data toView:self];
-
- }
- // 微信登录参数
- - (NSMutableDictionary *)getWXSdkLoginParamWithUser:(JXUserObject *)user type:(NSInteger)type openId:(NSString *)openId{
-
- NSString *identifier = [[NSBundle mainBundle] bundleIdentifier];
-
- NSMutableDictionary *p = [NSMutableDictionary dictionary];
- [p setNotNullObject:[NSNumber numberWithInteger:type] forKey:@"type"];
- [p setNotNullObject:openId forKey:@"loginInfo"];
- // [p setNotNullObject:user forKey:@"UserExample"];
- [p setNotNullObject:user.areaCode forKey:@"areaCode"];
- [p setNotNullObject:user.verificationCode forKey:@"verificationCode"];
- [p setNotNullObject:@"client_credentials" forKey:@"grant_type"];
- [p setNotNullObject:user.model forKey:@"model"];
- [p setNotNullObject:user.osVersion forKey:@"osVersion"];
- [p setNotNullObject:g_macAddress forKey:@"serial"];
- [p setNotNullObject:[NSNumber numberWithDouble:g_server.latitude] forKey:@"latitude"];
- [p setNotNullObject:[NSNumber numberWithDouble:g_server.longitude] forKey:@"longitude"];
- [p setNotNullObject:user.location forKey:@"location"];
- [p setNotNullObject:identifier forKey:@"appId"];
- [p setNotNullObject:[NSNumber numberWithInt:1] forKey:@"xmppVersion"];
- [p setNotNullObject:[JXKeyChainStore getUUIDByKeyChain] forKey:@"serial"];
-
- // 是否开启集群
- if ([g_config.isOpenCluster integerValue] == 1) {
- NSString *area = [g_default objectForKey:kLocationArea];
- [p setNotNullObject:area forKey:@"area"];
- }
- return p;
- }
- // 获取微信登录data
- - (NSString *)getWXSdkLoginDataStr {
-
- NSString *mac = [self getWXSdkLogindMac];
- NSMutableDictionary *dict = [self.param mutableCopy];
- [dict setObject:mac forKey:@"mac"];
-
- SBJsonWriter * OderJsonwriter = [SBJsonWriter new];
- NSString * jsonString = [OderJsonwriter stringWithObject:dict];
-
- NSData *aesJsonData = [AESUtil encryptAESData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] key:[MD5Util getMD5DataWithString:APIKEY]];
-
- return [aesJsonData base64EncodedStringWithOptions:0];
- }
- // 获取微信登录Mac
- - (NSString *)getWXSdkLogindMac{
- NSMutableString *macStr = [NSMutableString string];
- [macStr appendString:APIKEY];
- NSString *paramStr = [self getParamStr];
- [macStr appendString:paramStr];
- [macStr appendString:self.salt];
-
- NSData *macData = [g_securityUtil getHMACMD5:[macStr dataUsingEncoding:NSUTF8StringEncoding] key:[MD5Util getMD5DataWithString:APIKEY]];
-
- NSString *mac = [macData base64EncodedStringWithOptions:0];
-
- return mac;
- }
- // 注册
- -(void)registerUserV1:(JXUserObject*)user type:(int)type inviteCode:(NSString *)inviteCode workexp:(int)workexp diploma:(int)diploma isSmsRegister:(BOOL)isSmsRegister smsCode:(NSString *)smsCode password:(NSString *)password memberAccount:(NSString *)memberAccount toView:(id)toView {
-
- long time = (long)[[NSDate date] timeIntervalSince1970];
- time = time *1000 + g_server.timeDifference;
- self.salt = [NSString stringWithFormat:@"%ld",time];
- self.password = password;
- self.toView = toView;
- self.memberAccount = memberAccount;
- self.param = [self getRegisterParamWithUser:user type:type inviteCode:inviteCode workexp:workexp diploma:diploma isSmsRegister:isSmsRegister smsCode:smsCode memberAccount:memberAccount];
-
- NSString *data = [self getRegisterDataStr];
-
- [g_server registerUser:self.salt data:data toView:self];
- }
- // 第三方注册参数
- - (NSMutableDictionary *)getRegisterParamWithUser:(JXUserObject *)user type:(int)type inviteCode:(NSString *)inviteCode workexp:(int)workexp diploma:(int)diploma isSmsRegister:(BOOL)isSmsRegister smsCode:(NSString *)smsCode memberAccount:(NSString *)memberAccount {
-
- NSMutableDictionary *p = [NSMutableDictionary dictionary];
- if (g_server.openId.length <= 0) {
- }else {
- [p setNotNullObject:[NSNumber numberWithInteger:type] forKey:@"type"];
- [p setNotNullObject:g_server.openId forKey:@"loginInfo"];
- }
- [p setNotNullObject:user.telephone forKey:@"telephone"];
-
- NSData *aesData = [AESUtil encryptAESData:[MD5Util getMD5DataWithString:self.password] key:[MD5Util getMD5DataWithString:self.password]];
- [p setNotNullObject:[MD5Util getMD5StringWithData:aesData] forKey:@"password"];
- [p setNotNullObject:user.areaCode forKey:@"areaCode"];
- [p setNotNullObject:user.userType forKey:@"userType"];
- [p setNotNullObject:user.userNickname forKey:@"nickname"];
- [p setNotNullObject:user.userDescription forKey:@"description"];
- [p setNotNullObject:[NSNumber numberWithLongLong:[user.birthday timeIntervalSince1970]] forKey:@"birthday"];
- [p setNotNullObject:user.sex forKey:@"sex"];
- [p setNotNullObject:user.companyId forKey:@"companyId"];
- [p setNotNullObject:user.countryId forKey:@"countryId"];
- [p setNotNullObject:user.provinceId forKey:@"provinceId"];
- if ([user.cityId integerValue] > 0) {
- [p setNotNullObject:user.cityId forKey:@"cityId"];
- }else {
- [p setNotNullObject:[NSNumber numberWithInt:g_server.cityId] forKey:@"cityId"];
- }
- [p setNotNullObject:user.areaId forKey:@"areaId"];
- [p setNotNullObject:user.model forKey:@"model"];
- [p setNotNullObject:user.osVersion forKey:@"osVersion"];
- [p setNotNullObject:user.serialNumber forKey:@"serialNumber"];
- [p setNotNullObject:user.latitude forKey:@"latitude"];
- [p setNotNullObject:user.longitude forKey:@"longitude"];
- [p setNotNullObject:user.location forKey:@"location"];
- [p setNotNullObject:[NSNumber numberWithInt:workexp] forKey:@"w"];
- [p setNotNullObject:[NSNumber numberWithInt:diploma] forKey:@"d"];
- [p setNotNullObject:[NSNumber numberWithInt:1] forKey:@"xmppVersion"];
- [p setNotNullObject:[NSNumber numberWithInt:(isSmsRegister ? 1 : 0)] forKey:@"isSmsRegister"];
- [p setNotNullObject:inviteCode forKey:@"inviteCode"];
- [p setNotNullObject:smsCode forKey:@"smsCode"];
- [p setNotNullObject:[JXKeyChainStore getUUIDByKeyChain] forKey:@"serial"];
- [p setNotNullObject:memberAccount forKey:@"membershipAccount"];
-
- #ifdef IS_MsgEncrypt
-
- // 上传消息加密的DH公私钥
- [g_msgUtil generatekeyPairsDH];
- NSData *dhPriData = [[NSData alloc] initWithBase64EncodedString:g_msgUtil.dhPrivateKey options:NSDataBase64DecodingIgnoreUnknownCharacters];
- NSData *dhPriAesData = [AESUtil encryptAESData:dhPriData key:[MD5Util getMD5DataWithString:self.password]];
- NSString *dhPriStr = [dhPriAesData base64EncodedStringWithOptions:0];
- [p setNotNullObject:dhPriStr forKey:@"dhPrivateKey"];
- [p setNotNullObject:g_msgUtil.dhPublicKey forKey:@"dhPublicKey"];
-
- // 上传群组消息加密的RSA公私钥
- [g_msgUtil generatekeyPairsRSA];
- NSData *rsaPriData = [[NSData alloc] initWithBase64EncodedString:g_msgUtil.rsaPrivateKey options:NSDataBase64DecodingIgnoreUnknownCharacters];
- NSData *rsaPriAesData = [AESUtil encryptAESData:rsaPriData key:[MD5Util getMD5DataWithString:self.password]];
- NSString *rsaPriStr = [rsaPriAesData base64EncodedStringWithOptions:0];
- [p setNotNullObject:rsaPriStr forKey:@"rsaPrivateKey"];
- [p setNotNullObject:g_msgUtil.rsaPublicKey forKey:@"rsaPublicKey"];
-
- #endif
-
- return p;
- }
- // 获取注册data
- - (NSString *)getRegisterDataStr {
-
- NSString *mac = [self getRegisterMac];
- NSMutableDictionary *dict = [self.param mutableCopy];
- [dict setObject:mac forKey:@"mac"];
-
- SBJsonWriter * OderJsonwriter = [SBJsonWriter new];
- NSString * jsonString = [OderJsonwriter stringWithObject:dict];
-
- NSData *aesJsonData = [AESUtil encryptAESData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] key:[MD5Util getMD5DataWithString:APIKEY]];
-
- return [aesJsonData base64EncodedStringWithOptions:0];
- }
- // 获取微信登录Mac
- - (NSString *)getRegisterMac{
- NSMutableString *macStr = [NSMutableString string];
- [macStr appendString:APIKEY];
- NSString *paramStr = [self getParamStr];
- [macStr appendString:paramStr];
- [macStr appendString:self.salt];
-
- NSData *macData = [g_securityUtil getHMACMD5:[macStr dataUsingEncoding:NSUTF8StringEncoding] key:[MD5Util getMD5DataWithString:APIKEY]];
-
- NSString *mac = [macData base64EncodedStringWithOptions:0];
-
- return mac;
- }
- #pragma mark - 服务器返回数据
- -(void) didServerResultSucces:(JXConnection*)aDownload dict:(NSDictionary*)dict array:(NSArray*)array1{
-
- if( [aDownload.action isEqualToString:act_AuthGetLoginCode] ){
-
-
- self.userId = dict[@"userId"];
-
- // 如果没有code 说明服务器上没有上传公私钥
- if (!dict[@"code"]) {
- // 获取私钥
- SecKeyRef privateKey = [g_securityUtil getRSAPrivateKey];
- SecKeyRef publicKey = [g_securityUtil getRSAPublicKeyWithPrivateKey:privateKey];
- // 获取通用公钥base64
- NSString *publicKeyStr = [g_securityUtil getKeyForJavaServer:[g_securityUtil getKeyBitsFromKey:publicKey]];
- // 获取私钥data
- NSData *privateKeyData = [g_securityUtil getKeyBitsFromKey:privateKey];
- // 私钥aes加密
- NSData *privateAesData = [AESUtil encryptAESData:privateKeyData key:[MD5Util getMD5DataWithString:self.password]];
- NSString *privateAes = [privateAesData base64EncodedStringWithOptions:0];
-
- // mac验签(拼接私钥+公钥)
- NSMutableString *macStr = [NSMutableString string];
- [macStr appendString:APIKEY];
- [macStr appendString:self.userId];
- [macStr appendString:privateAes];
- [macStr appendString:publicKeyStr];
- [macStr appendString:_salt];
-
-
- NSData *aesData = [AESUtil encryptAESData:[MD5Util getMD5DataWithString:self.password] key:[MD5Util getMD5DataWithString:self.password]];
- NSData *macData = [g_securityUtil getHMACMD5:[macStr dataUsingEncoding:NSUTF8StringEncoding] key:[[MD5Util getMD5StringWithData:aesData] dataUsingEncoding:NSUTF8StringEncoding]];
- NSString *mac = [macData base64EncodedStringWithOptions:0];
-
- // 上传公钥和私钥 -- Mac验签
- [g_server authkeysUploadLoginKeyWithUserId:self.userId salt:self.salt privateKey:privateAes publicKey:publicKeyStr mac:mac toView:self];
- }else { // 如果获取到code
- self.code = dict[@"code"];
- NSMutableString *macStr = [NSMutableString string];
- [macStr appendString:APIKEY];
- [macStr appendString:self.userId];
- [macStr appendString:self.salt];
- NSData *aesData = [AESUtil encryptAESData:[MD5Util getMD5DataWithString:self.password] key:[MD5Util getMD5DataWithString:self.password]];
- NSData *macData = [g_securityUtil getHMACMD5:[macStr dataUsingEncoding:NSUTF8StringEncoding] key:[[MD5Util getMD5StringWithData:aesData] dataUsingEncoding:NSUTF8StringEncoding]];
- NSString *mac = [macData base64EncodedStringWithOptions:0];
-
- // 去服务器获取已上传的私钥
- [g_server authkeysGetLoginPrivateKeyWithUserId:self.userId salt:self.salt mac:mac toView:self];
- }
- }
-
- if ([aDownload.action isEqualToString:act_AuthkeysUploadLoginKey]) {
-
- // 上传私钥公私钥成功后重新获取code
- NSString *mac = [self getCodeMac];
- [g_server authGetLoginCodeWithAreaCode:self.areaCode account:self.account salt:self.salt deviceId:@"ios" mac:mac toView:self];
- // [g_server transactionGetCodeWithSalt:salt mac:mac toView:self];
- }
-
- if ([aDownload.action isEqualToString:act_AuthkeysGetLoginPrivateKey]) {
-
- // 从服务器获取公私钥成功后调用支付通用接口
- NSString *privateAesStr = dict[@"privateKey"];
- NSData *privateAesData = [[NSData alloc] initWithBase64EncodedString:privateAesStr options:NSDataBase64DecodingIgnoreUnknownCharacters];
- NSData *privateData = [AESUtil decryptAESData:privateAesData key:[MD5Util getMD5DataWithString:self.password]];
- NSString *privateBase64 = [privateData base64EncodedStringWithOptions:0];
- SecKeyRef privateKey = [g_securityUtil getRSAKeyWithBase64Str:privateBase64 isPrivateKey:YES];
-
- NSData *codeData = [[NSData alloc] initWithBase64EncodedString:self.code options:NSDataBase64DecodingIgnoreUnknownCharacters];
- self.codeData = [g_securityUtil decryptMessageRSA:codeData withPrivateKey:privateKey];
- if (self.isThird) {
-
- NSString *data = [self getThirdDataStr];
- if (data) {
- [g_server thirdLoginV1:self.userId salt:self.salt data:data toView:self];
- }
- }else {
-
- NSString *data = [self getDataString:NO];
- if (data) {
-
- [g_server loginV1:self.userId salt:self.salt data:data model:_model secrity:_security toView:self];
- // [g_server loginV1:self.userId salt:self.salt data:data toView:self];
- }
- }
- }
-
- if ([aDownload.action isEqualToString:act_UserLoginV1] || [aDownload.action isEqualToString:act_thirdLoginV1]) {
-
- NSString *dataStr = [dict objectForKey:@"data"];
- NSData *data = [[NSData alloc] initWithBase64EncodedString:dataStr options:NSDataBase64DecodingIgnoreUnknownCharacters];
- NSData *jsonData = [AESUtil decryptAESData:data key:self.codeData];
- NSString *json = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
- SBJsonParser * resultParser = [[SBJsonParser alloc] init];
- NSDictionary *resultObject = [resultParser objectWithString:json];
- if( [self.toView respondsToSelector:@selector(didServerResultSucces:dict:array:)] )
- [self.toView didServerResultSucces:aDownload dict:resultObject array:nil];
- }
-
- if ([aDownload.action isEqualToString:act_userLoginAutoV1]) {
-
- NSString *dataStr = [dict objectForKey:@"data"];
- NSData *data = [[NSData alloc] initWithBase64EncodedString:dataStr options:NSDataBase64DecodingIgnoreUnknownCharacters];
- NSData *keyData = [[NSData alloc] initWithBase64EncodedString:self.loginKey options:NSDataBase64DecodingIgnoreUnknownCharacters];
- NSData *jsonData = [AESUtil decryptAESData:data key:keyData];
- NSString *json = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
- SBJsonParser * resultParser = [[SBJsonParser alloc] init];
- NSDictionary *resultObject = [resultParser objectWithString:json];
- if (!resultObject) {
- resultObject = [resultParser objectWithString:dataStr];
- }
- if( [self.toView respondsToSelector:@selector(didServerResultSucces:dict:array:)] )
- [self.toView didServerResultSucces:aDownload dict:resultObject array:nil];
- }
-
- if ([aDownload.action isEqualToString:act_UserSMSLogin]) {
-
- NSString *dataStr = [dict objectForKey:@"data"];
- NSData *data = [[NSData alloc] initWithBase64EncodedString:dataStr options:NSDataBase64DecodingIgnoreUnknownCharacters];
- NSData *jsonData = [AESUtil decryptAESData:data key:[MD5Util getMD5DataWithString:self.verificationCode]];
- NSString *json = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
- SBJsonParser * resultParser = [[SBJsonParser alloc] init];
- NSDictionary *resultObject = [resultParser objectWithString:json];
- if( [self.toView respondsToSelector:@selector(didServerResultSucces:dict:array:)] )
- [self.toView didServerResultSucces:aDownload dict:resultObject array:nil];
- }
-
- if ([aDownload.action isEqualToString:act_sdkLoginV1] || [aDownload.action isEqualToString:act_RegisterV1] || [aDownload.action isEqualToString:act_registerSDKV1]) {
-
- NSString *dataStr = [dict objectForKey:@"data"];
- NSData *data = [[NSData alloc] initWithBase64EncodedString:dataStr options:NSDataBase64DecodingIgnoreUnknownCharacters];
- NSData *jsonData = [AESUtil decryptAESData:data key:[MD5Util getMD5DataWithString:APIKEY]];
- NSString *json = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
- SBJsonParser * resultParser = [[SBJsonParser alloc] init];
- NSDictionary *resultObject = [resultParser objectWithString:json];
- if( [self.toView respondsToSelector:@selector(didServerResultSucces:dict:array:)] )
- [self.toView didServerResultSucces:aDownload dict:resultObject array:nil];
-
- #ifdef IS_MsgEncrypt
- // 保存私钥
- NSString *userId = [[dict objectForKey:@"userId"] stringValue];
- NSData *dhPriData = [[NSData alloc] initWithBase64EncodedString:g_msgUtil.dhPrivateKey options:NSDataBase64DecodingIgnoreUnknownCharacters];
- NSData *dhPriAesData = [AESUtil encryptAESData:dhPriData key:[userId dataUsingEncoding:NSUTF8StringEncoding]];
- NSString *dhPriStr = [dhPriAesData base64EncodedStringWithOptions:0];
- [g_default setObject:dhPriStr forKey:kMY_USER_PrivateKey_DH];
-
- NSData *rsaPriData = [[NSData alloc] initWithBase64EncodedString:g_msgUtil.rsaPrivateKey options:NSDataBase64DecodingIgnoreUnknownCharacters];
- NSData *rsaPriAesData = [AESUtil encryptAESData:rsaPriData key:[userId dataUsingEncoding:NSUTF8StringEncoding]];
- NSString *rsaPriStr = [rsaPriAesData base64EncodedStringWithOptions:0];
- [g_default setObject:rsaPriStr forKey:kMY_USER_PrivateKey_RSA];
- #endif
- }
- }
- -(int) didServerResultFailed:(JXConnection*)aDownload dict:(NSDictionary*)dict{
-
- if( [self.toView respondsToSelector:@selector(didServerResultFailed:dict:)] ) {
- [self.toView didServerResultFailed:aDownload dict:dict];
- }
- return show_error;
- }
- -(int) didServerConnectError:(JXConnection*)aDownload error:(NSError *)error{//error为空时,代表超时
-
- if ([self.toView respondsToSelector:@selector(didServerConnectError:error:)]) {
- [self.toView didServerConnectError:aDownload error:error];
- }
-
- return show_error;
- }
- -(void) didServerConnectStart:(JXConnection*)aDownload{
-
- if ([self.toView respondsToSelector:@selector(didServerConnectStart:)]) {
- [self.toView didServerConnectStart:aDownload];
- }
- }
- // 获取修改密码和忘记密码验签
- - (NSString *)getUpdatePWDMacWithValue:(NSString *)value password:(NSString *)password {
- NSData *encryptPWDData = [AESUtil encryptAESData:[MD5Util getMD5DataWithString:password] key:[MD5Util getMD5DataWithString:password]];
- NSString *encryptPWD = [MD5Util getMD5StringWithData:encryptPWDData];
-
- NSData *aesKey = [[NSData alloc] initWithBase64EncodedString:encryptPWD options:NSDataBase64DecodingIgnoreUnknownCharacters];
- NSData *macValue = [AESUtil encryptAESData:[APIKEY dataUsingEncoding:NSUTF8StringEncoding] key:aesKey];
- NSData *macData = [g_securityUtil getHMACMD5:macValue key:[value dataUsingEncoding:NSUTF8StringEncoding]];
- NSString *mac = [macData base64EncodedStringWithOptions:0];
-
- return mac;
- }
- @end
|