Пример #1
0
    def __check_user_passwd__(cls, userId, passWord):
        dbPassword, userSignature = TyContext.RedisUser.execute(userId, 'HMGET', 'user:'******'password',
                                                                'userSignature')
        # 补救password没设置值的bug
        # if (dbPassword == None or dbPassword == '') and passWord != None and len(passWord) > 0:
        #     TyContext.RedisUser.execute(userId, 'HSET', 'user:'******'password', passWord)
        #     dbPassword = passWord
        #             TyContext.ftlog.info('__check_user_passwd__ dbPassword is empty', 'userId=', userId, 'dbPassword='******'__check_user_passwd__ error: userId', userId, 'failed password', passWord,
                                 'db password', dbPassword)
            return False

        #         TyContext.ftlog.info('doLoginByTyId->password incorrect', 'userId=', userId, 'dbPassword='******'passWord=', passWord)
        return False
Пример #2
0
    def doSetPasswd(cls, params, mo, checkOldPasswd=True):
        TyContext.ftlog.info(cls.__name__, 'doSetPasswd->rparams=', params)
        userId = cls.__get_param__(params, 'userId')
        oldpasswd = cls.__get_param__(params, 'oldpasswd')
        newpasswd = cls.__get_param__(params, 'newpasswd')

        dbPassword, changePwdCount = TyContext.RedisUser.execute(
            userId, 'HMGET', 'user:'******'password',
            'changePwdCount')
        # 效验旧密码
        if checkOldPasswd and oldpasswd != '':
            m = md5()
            m.update(str(oldpasswd))
            oldPasswordmd5 = m.hexdigest()
            if str(dbPassword) != str(oldpasswd) and str(
                    dbPassword) != oldPasswordmd5:
                mo.setResult('code', AccountConst.CODE_USER_OLD_PWD_ERROR)
                mo.setResult('info', '旧密码输入错误!')
                return
        # 更新玩家密码及更改密码次数
        if changePwdCount == None:
            changePwdCount = 0

        changePwdCount = int(changePwdCount) + 1
        TyContext.RedisUser.execute(userId, 'HMSET', 'user:'******'password', newpasswd, 'userSignature',
                                    AccountVerify.md5(newpasswd),
                                    'changePwdCount', changePwdCount)
        mo.setResult('code', 0)
        mo.setResult('info', '设置密码成功')
        mo.setResult('userId', userId)
        mo.setResult('userPwd', newpasswd)

        return
Пример #3
0
 def check_mobile_password(cls, mobile, password):
     mobilePassword = TyContext.RedisUserKeys.execute(
         'GET', 'mobilepassword:'******'tuyoo:%s:%s' %
                                            (mobile, password)):
         return True
     return False
Пример #4
0
 def set_user_password(cls, userId, password):
     dbPassword, changePwdCount = TyContext.RedisUser.execute(
         userId, 'HMGET', 'user:'******'password',
         'changePwdCount')
     # 更新玩家密码及更改密码次数
     if changePwdCount == None:
         changePwdCount = 0
     changePwdCount = int(changePwdCount) + 1
     TyContext.RedisUser.execute(userId, 'HMSET', 'user:'******'password', password, 'userSignature',
                                 AccountVerify.md5(password),
                                 'changePwdCount', changePwdCount)
Пример #5
0
 def set_mobile_password(cls, mobile, password):
     md5Password = AccountVerify.md5('tuyoo:%s:%s' % (mobile, password))
     TyContext.RedisUserKeys.execute('SET', 'mobilepassword:' + str(mobile),
                                     md5Password)
Пример #6
0
    def fillUserLoginInfoV3(cls, params, mo, userId, isLogin, isCreate):

        # 兼容客户端之前的用户未能在创建时传入imsi
        imsi = TyContext.RedisUser.execute(userId, 'HGET',
                                           'user:'******'imsi')
        if not imsi:
            if 'imsi' in params and params['imsi']:
                TyContext.RedisUser.execute(userId, 'HSET',
                                            'user:'******'imsi',
                                            params['imsi'])

                TyContext.ftlog.debug('fillUserLoginInfoV3 in imsi', imsi,
                                      'params[imsi]', params['imsi'])

        clientIp = TyContext.RunHttp.get_client_ip()

        # IMPORTANT!! used by GDSS statistics
        TyContext.ftlog.info('fillUserLoginInfoV3 in userId=', userId,
                             'isLogin='******'isCreate=', isCreate,
                             'clientId=', params['clientId'], 'clientIp=',
                             clientIp, 'gameId=', params['appId'], 'params=',
                             params)

        appId = params['appId']
        cls.updateUserSessionInfo(appId, userId, params)

        # 查询用户基本信息
        mo.setResult('code', AccountConst.CODE_USER_SUCCESS)
        mo.setResult('userId', userId)
        mo.setResult('appId', appId)

        # 查询用户基本信息
        uname, authorCode, email = TyContext.AuthorCode.creatUserAuthorCodeNew(
            userId)
        uname = TyContext.KeywordFilter.replace(unicode(uname))
        # 如果appId <10000,做用户名检查
        # todo for 104 test add by tcz
        if int(appId) < 10000:
            uname = UsernameGenerator.check_and_save_user_name(uname, userId)
        mo.setResult('authorCode', authorCode)
        mo.setResult('userName', uname)
        mo.setResult('userEmail', unicode(email))

        if isCreate:
            mo.setResult('isCreate', 1)
        else:
            mo.setResult('isCreate', 0)

        # 获取玩家绑定类型
        userType = 0
        bindMobile, userEmail, userSnsId, userDBPwd, changePwdCount, log_report, exception_report, user360Vip = TyContext.RedisUser.execute(
            userId, 'HMGET', 'user:'******'bindMobile', 'email',
            'snsId', 'password', 'changePwdCount', 'log_report',
            'exception_report', '360.vip')
        # set default password
        if not userDBPwd:
            userDBPwd = 'ty' + str(random.randint(100000, 999999))
            TyContext.RedisUser.execute(userId, 'HMSET', 'user:'******'password', userDBPwd, 'userSignature',
                                        AccountVerify.md5(userDBPwd))

        if log_report != 1:
            log_report = 0
        if exception_report != 1:
            exception_report = 0

        if bindMobile != None and len(str(bindMobile)) == 11:
            userType = userType | 1
        if userEmail != None and len(userEmail) > 0:
            userType = userType | 2
        if userSnsId != None and len(str(userSnsId)) > 0:
            userType = userType | 4
        mo.setResult('userType', userType)
        if userSnsId and len(userSnsId) > 0:
            mo.setResult('snsId', userSnsId)
        mo.setResult('userPwd', unicode(userDBPwd))
        mo.setResult('mobile', unicode(bindMobile))
        # 获取玩家修改密码次数
        if changePwdCount == None:
            changePwdCount = 0
        mo.setResult('changePwdCount', changePwdCount)
        mo.setResult('log_report', log_report)
        mo.setResult('exception_report', exception_report)
        # 360V计划,返回vip标示
        if user360Vip != None:
            mo.setResult('360.vip', user360Vip)

        checkcode = ''
        if appId < 10000:
            # 途游自己的游戏
            cls.__append_tcp_infos__(appId, userId, params['clientId'], mo)
            clientId = params.get('clientId', 'unknow')
            AccountHelper.append_ios_idfa_flg(userId, appId, clientId, mo)
            cls.__append_logclient_infos__(userId, clientId, mo)
        else:
            clientId = params.get('clientId', 'unknow')
            AccountHelper.append_ios_idfa_flg(userId, appId, clientId, mo)
            checkcode = TyContext.AuthorCode.makeLoginCode(
                userId, appId, authorCode)
            mo.setResult('usercode', checkcode)

        # 为了兼容使用新登录老支付,当这种结合过期后,删除authInfo字段
        ainfo = {
            'authcode': authorCode,
            'account': email,
            'uid': userId,
            'usercode': checkcode
        }
        ainfo = json.dumps(ainfo)
        mo.setResult('authInfo', ainfo)
        mo.setResult('token', AccountModel.get_user_token(userId))
Пример #7
0
    def check_userv4(cls, rpath):
        # cls.__init_checker__()

        if not AccountVerify.sing_verify(rpath):
            return True, cls.error_sing

        params = TyContext.RunHttp.convertArgsToDict()
        # 检查登录参数
        appId = TyContext.RunHttp.getRequestParamInt('appId', 0)
        if appId <= 0:
            return True, cls.error_param_appid
        params['appId'] = appId

        userId = TyContext.RunHttp.getRequestParamInt('userId', 0)
        params['userId'] = userId

        # bindOrderId = TyContext.RunHttp.getRequestParam('bindOrderId')
        # if bindOrderId is not None:
        #    params['bindOrderId'] = bindOrderId

        params['loginFlag'] = TyContext.RunHttp.getRequestParamInt(
            'loginFlag', 0)
        clientId = TyContext.RunHttp.getRequestParam('clientId', '')
        try:
            datas = clientId.split('_')
            clientSystem = datas[0]
            clientVersion = TyContext.ClientUtils.getVersionFromClientId(
                clientId)
            clientChannel = datas[2]
        except:
            return True, cls.error_param_clientid

        params['clientId'] = clientId
        params['clientSystem'] = clientSystem
        params['clientVersion'] = clientVersion
        params['clientChannel'] = clientChannel

        imei = TyContext.RunHttp.getRequestParam('imei', '')
        #         TyContext.ftlog.debug('imei=', imei)
        imei = AccountVerify.decode_item(imei)
        #         TyContext.ftlog.debug('imei=', imei)
        if len(imei) < 12 or len(imei) > 32:
            imei = ''
        # TyContext.ftlog.debug('imei=', imei)

        imsi = TyContext.RunHttp.getRequestParam('imsi', '')
        #         TyContext.ftlog.debug('imsi=', imsi)
        imsi = AccountVerify.decode_item(imsi)
        #         TyContext.ftlog.debug('imsi=', imei)
        if len(imsi) == 0 or len(imsi) > 15:
            imsi = ''
        # TyContext.ftlog.debug('imsi=', imsi)

        androidId = TyContext.RunHttp.getRequestParam('androidId', '')
        #         TyContext.ftlog.debug('androidId=', androidId)
        androidId = AccountVerify.decode_item(androidId)
        #         TyContext.ftlog.debug('androidId=', androidId)
        if len(androidId) < 12 or len(androidId) > 32:
            androidId = ''
        # TyContext.ftlog.debug('androidId=', androidId)
        idfa = AccountVerify.decode_item(
            TyContext.RunHttp.getRequestParam('idfa', ''))
        params['idfa'] = idfa
        mac = TyContext.RunHttp.getRequestParam('mac', '')
        #         TyContext.ftlog.debug('mac=', mac)
        mac = AccountVerify.decode_item(mac)
        #         TyContext.ftlog.debug('mac=', mac)

        # 获取不到时,mac可能为00:00:00:00:00:00或02:00:00:00:00:00
        # 下面的判断似有问题,但不能改,否则用户下次登录会生成不同的deviceId
        # 而丢失老账户
        mac = mac.replace(':', '')
        badmacs_an = TyContext.Configure.get_global_item_json(
            'badmacs_android', ['000000000000'])
        badmacs_ios = TyContext.Configure.get_global_item_json(
            'badmacs_ios', ['020000000000'])
        if mac in badmacs_ios:  # 如果IOS的mac取不到或者变化020000000000,那么需要加到badmacs_ios集合中
            params['macmd5'] = ''
        else:
            if mac != "" and mac not in badmacs_an:  # 如果安卓的mac取值出现问题,那么需要将错误值加入badmacs_an
                mac = mac.replace(':', '')
                if len(mac) != 12:
                    TyContext.ftlog.info('the mac is error ! [', mac, ']')
                    mac = ''
            else:
                TyContext.ftlog.info('the mac is error ! [', mac, ']')
                mac = ''
                #         TyContext.ftlog.debug('mac=', mac)

        uuid = TyContext.RunHttp.getRequestParam('uuid', '')
        #         TyContext.ftlog.debug('uuid=', uuid)
        if len(uuid) != 32:
            uuid = ''

        if mac in badmacs_ios:
            uuid = uuid.lower()

        id_str = mac + '|' + imei + '|' + androidId + '|' + uuid
        TyContext.ftlog.info('deviceId str=', id_str)
        _devid = AccountVerify.md5(id_str)
        params['deviceId'] = _devid
        TyContext.ftlog.debug('after check user params-->', params)
        return False, params
Пример #8
0
    def login_check(cls, rpath, loginType):

        # cls.__init_checker__()

        # 输入参数校验
        if AccountVerify.sing_verify(rpath) != True:
            return True, cls.error_sing

        # 检查是否可以登录
        loginForbid = TyContext.ServerControl.checkLoginForbid(rpath)
        if loginForbid != False:
            return True, loginForbid

        params = TyContext.RunHttp.convertArgsToDict()
        # params = {}
        # 检查登录参数
        appId = TyContext.RunHttp.getRequestParamInt('appId', 0)
        if appId <= 0:
            return True, cls.error_param_appid
        params['appId'] = appId

        clientId = TyContext.RunHttp.getRequestParam('clientId', '')
        try:
            datas = clientId.split('_')
            clientSystem = datas[0]
            clientVersion = TyContext.ClientUtils.getVersionFromClientId(
                clientId)
            clientChannel = datas[2]
        except:
            return True, cls.error_param_clientid

        check_clientid_number = TyContext.Configure.get_global_item_int(
            'check_clientid_num_before_login', 0)
        if appId < 10000 and check_clientid_number:
            if not TyContext.BiUtils.clientIdToNumber(appId, clientId):
                return True, cls.error_param_clientid

        params['clientId'] = clientId
        params['clientSystem'] = clientSystem
        params['clientVersion'] = clientVersion
        params['clientChannel'] = clientChannel

        imei = TyContext.RunHttp.getRequestParam('imei', '')
        #         TyContext.ftlog.debug('imei=', imei)
        imei = AccountVerify.decode_item(imei)
        #         TyContext.ftlog.debug('imei=', imei)
        if len(imei) < 12 or len(imei) > 32:
            imei = ''
        #         TyContext.ftlog.debug('imei=', imei)

        imsi = TyContext.RunHttp.getRequestParam('imsi', '')
        #         TyContext.ftlog.debug('imsi=', imsi)
        imsi = AccountVerify.decode_item(imsi)
        #         TyContext.ftlog.debug('imsi=', imei)
        if len(imsi) == 0 or len(imsi) > 15:
            imsi = ''
        #        TyContext.ftlog.debug('imsi=', imsi)

        androidId = TyContext.RunHttp.getRequestParam('androidId', '')
        #         TyContext.ftlog.debug('androidId=', androidId)
        androidId = AccountVerify.decode_item(androidId)
        #         TyContext.ftlog.debug('androidId=', androidId)
        if len(androidId) < 12 or len(androidId) > 32:
            androidId = ''
        #         TyContext.ftlog.debug('androidId=', androidId)

        idfa = AccountVerify.decode_item(
            TyContext.RunHttp.getRequestParam('idfa', ''))
        params['idfa'] = idfa
        TyContext.ftlog.debug('idfa=', idfa)

        mac = TyContext.RunHttp.getRequestParam('mac', '')
        #         TyContext.ftlog.debug('mac=', mac)
        mac = AccountVerify.decode_item(mac)
        #         TyContext.ftlog.debug('mac=', mac)

        params['macmd5'] = AccountVerify.md5(mac)

        # 获取不到时,mac可能为00:00:00:00:00:00或02:00:00:00:00:00
        # 下面的判断似有问题,但不能改,否则用户下次登录会生成不同的deviceId
        # 而丢失老账户
        mac = mac.replace(':', '')
        badmacs_an = TyContext.Configure.get_global_item_json(
            'badmacs_android', ['000000000000'])
        badmacs_ios = TyContext.Configure.get_global_item_json(
            'badmacs_ios', ['020000000000'])
        if mac in badmacs_ios:  # 如果IOS的mac取不到或者变化020000000000,那么需要加到badmacs_ios集合中
            params['macmd5'] = ''
        else:
            if mac != "" and mac not in badmacs_an:  # 如果安卓的mac取值出现问题,那么需要将错误值加入badmacs_an
                mac = mac.replace(':', '')
                if len(mac) != 12:
                    TyContext.ftlog.info('the mac is error ! [', mac, ']')
                    mac = ''
            else:
                TyContext.ftlog.info('the mac is error ! [', mac, ']')
                mac = ''
            #         TyContext.ftlog.debug('mac=', mac)

        uuid = TyContext.RunHttp.getRequestParam('uuid', '')
        #         TyContext.ftlog.debug('uuid=', uuid)
        if len(uuid) != 32:
            uuid = ''

        if mac in badmacs_ios:
            uuid = uuid.lower()

        svninfo = TyContext.RunHttp.getRequestParam('svninfo', '')
        if svninfo:
            params['svninfo'] = svninfo

        iccid = TyContext.RunHttp.getRequestParam('iccid', '')
        TyContext.ftlog.debug('paramiccid=', iccid)
        iccid = AccountVerify.decode_item(iccid)
        TyContext.ftlog.debug('iccid=', iccid)

        params['mac'] = mac
        if is_valid_iccid(iccid):
            params['iccid'] = iccid
        else:
            try:
                del params['iccid']
            except:
                pass
        # params['macmd5'] = AccountVerify.md5(mac)
        params['imei'] = imei
        params['imsi'] = imsi
        params['androidId'] = androidId
        params['uuid'] = uuid
        id_str = mac + '|' + imei + '|' + androidId + '|' + uuid
        TyContext.ftlog.info('deviceId str=', id_str)
        _devid = AccountVerify.md5(id_str)
        params['deviceId'] = _devid
        TyContext.ftlog.debug('login_check mac', mac, 'imei', imei,
                              'androidId', androidId, 'uuid', uuid,
                              'calculated deviceId', _devid)
        params['phoneType'] = TyContext.RunHttp.getRequestParam(
            'phoneType', '')
        params['detect_phonenumber'] = TyContext.RunHttp.getRequestParam(
            'detect_phonenumber', '')
        params['lang'] = TyContext.RunHttp.getRequestParam('lang', '')
        password = None

        if loginType == 1:
            '''
            游客登录
            '''
            password = None
            if len(mac) + len(imei) + len(androidId) + len(uuid) == 0:
                return True, cls.error_param_device
            params['deviceName'] = TyContext.RunHttp.getRequestParam(
                'deviceName', '')

        elif loginType == 2:
            '''
            手机号登录
            '''
            isReturn, mobile = cls.check_param_mobile(rpath)
            if isReturn:
                return True, mobile
            params['mobile'] = mobile

            password = 1
        elif loginType == 3:
            '''
            tuyooid登录
            '''
            tuyooId = TyContext.RunHttp.getRequestParam('tuyooId', '')
            tuyooId = AccountVerify.decode_item(tuyooId)
            try:
                tuyooId = int(tuyooId)
            except:
                pass
            if tuyooId <= 10000:
                return True, cls.error_param_tuyooid
            params['tuyooId'] = tuyooId

            password = 1
        elif loginType == 4:
            '''
            邮箱登录
            '''
            isReturn, mail = cls.check_param_mail(rpath)
            if isReturn:
                return True, mail
            params['mail'] = mail

            password = 1
        elif loginType == 5:
            '''
            snsid登录
            '''
            isReturn, snsId = cls.check_param_snsid(rpath)
            if isReturn:
                return True, snsId
            params['snsId'] = snsId
            params['snsToken'] = TyContext.RunHttp.getRequestParam('snsToken')
            params['snsAppId'] = TyContext.RunHttp.getRequestParam('snsAppId')

            password = None
        elif loginType == 6:
            '''
            Account登录
            '''
            isReturn, account = cls.check_param_account(rpath)
            if isReturn:
                return True, account
            params['account'] = account

            password = 1
        elif loginType == 7:
            '''
            新建账户
            '''
            pass

        if password != None:
            isReturn, passwd = cls.check_param_password(rpath)
            if isReturn:
                return True, passwd
            params['passwd'] = passwd

        return False, params