Beispiel #1
0
def requestAccountLogin(loginName, password, datas):
    """
	KBEngine method.
	请求登陆账号
	@param loginName: 客户端请求时所提交的名称
	@type  loginName: string
	
	@param password: 密码
	@type  password: string
	
	@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
	@type  datas: bytes
	"""
    INFO_MSG('requestAccountLogin: registerName=%s' % (loginName))

    commitName = loginName

    # 默认账号名就是提交时的名
    realAccountName = commitName

    # 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
    # datas将会回调至客户端
    # 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
    # KBEngine.registerReadFileDescriptor()和KBEngine.registerWriteFileDescriptor()结合
    # tornado异步访问。也可以结合socket模拟http的方式与平台交互。

    KBEngine.accountLoginResponse(commitName, realAccountName, datas,
                                  KBEngine.SERVER_SUCCESS)
Beispiel #2
0
def onRequestAccountLogin(loginName, password, datas):
    """
	KBEngine method.
	请求登陆账号回调
	@param loginName: 客户端请求时所提交的名称
	@type  loginName: string
	
	@param password: 密码
	@type  password: string
	
	@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
	@type  datas: bytes
	"""
    INFO_MSG("onRequestAccountLogin: registerName=%s" % (loginName))

    commitName = loginName

    # 默认账号名就是提交时的名
    realAccountName = commitName

    # 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
    # datas将会回调至客户端
    # 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
    # KBEngine.registerReadFileDescriptor()和KBEngine.registerWriteFileDescriptor()结合
    # tornado异步访问。也可以结合socket模拟http的方式与平台交互。

    # 如果返回码为KBEngine.SERVER_ERR_LOCAL_PROCESSING则表示验证登陆成功,但dbmgr需要检查账号密码,KBEngine.SERVER_SUCCESS则无需再检查密码
    KBEngine.accountLoginResponse(commitName, realAccountName, datas, KBEngine.SERVER_ERR_LOCAL_PROCESSING)
def onRequestAccountLogin(loginName, password, datas):
    """
	KBEngine method.
	请求登陆账号回调
	@param loginName: 客户端请求时所提交的名称
	@type  loginName: string
	
	@param password: 密码
	@type  password: string
	
	@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
	@type  datas: bytes
	"""
    INFO_MSG('onRequestAccountLogin: registerName=%s' % (loginName))

    commitName = loginName

    # 默认账号名就是提交时的名
    realAccountName = commitName

    # 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
    # datas将会回调至客户端
    # 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
    # KBEngine.registerReadFileDescriptor()和KBEngine.registerWriteFileDescriptor()结合
    # tornado异步访问。也可以结合socket模拟http的方式与平台交互。

    # 如果返回码为KBEngine.SERVER_ERR_NEED_CHECK_PASSWORD则表示验证登陆成功,但dbmgr需要检查账号密码,KBEngine.SERVER_SUCCESS则无需再检查密码SERVER_ERR_LOCAL_PROCESSING
    KBEngine.accountLoginResponse(commitName, realAccountName, datas,
                                  KBEngine.SERVER_ERR_LOCAL_PROCESSING)
Beispiel #4
0
def onRequestAccountLogin(loginName, password, datas):
	"""
	KBEngine method.
	请求登陆账号回调
	@param loginName: 客户端请求时所提交的名称
	@type  loginName: string
	
	@param password: 密码
	@type  password: string
	
	@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
	@type  datas: bytes
	"""
	INFO_MSG('onRequestAccountLogin: registerName=%s' % (loginName))
	
	commitName = loginName
	
	# 默认账号名就是提交时的名
	realAccountName = commitName 
	
	# 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
	# datas将会回调至客户端
	# 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
	# KBEngine.urlopen("https://www.baidu.com",onHttpCallback)异步访问。也可以结合异步socket的方式与平台交互(参考Poller.py)。
	
	# 如果返回码为KBEngine.SERVER_ERR_LOCAL_PROCESSING则表示验证登陆成功,但dbmgr需要检查账号密码,KBEngine.SERVER_SUCCESS则无需再检查密码
	KBEngine.accountLoginResponse(commitName, realAccountName, datas, KBEngine.SERVER_ERR_LOCAL_PROCESSING)
Beispiel #5
0
def requestAccountLogin(loginName, password, datas):
	"""
	KBEngine method.
	请求登陆账号
	@param loginName: 客户端请求时所提交的名称
	@type  loginName: string
	
	@param password: 密码
	@type  password: string
	
	@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
	@type  datas: bytes
	"""
	INFO_MSG('requestAccountLogin: registerName=%s' % (loginName))
	
	commitName = loginName
	
	# 默认账号名就是提交时的名
	realAccountName = commitName 
	
	# 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
	# datas将会回调至客户端
	
	
	KBEngine.accountLoginResponse(commitName, realAccountName, datas, KBEngine.SERVER_SUCCESS)
Beispiel #6
0
def onRequestAccountLogin(loginName, password, datas):
    commitName = loginName
    realAccountName = loginName
    #wetchat = '%d' % GameConfigs.WECHAT_GAME
    #param = eval(datas.decode('utf8'))
    #isWeiXinLogin = False

    # callback = lambda _commitName, _realAccountName, _datas, _result:{
    # 				KBEngine.accountLoginResponse(_commitName, _realAccountName, _datas, _result)
    # 			}
    # g_LoginPoller.wxLogin(loginName, callback)

    #if param["platform"] == wetchat:
    # callback = lambda _commitName, _realAccountName, _datas, _result:{
    # 			KBEngine.accountLoginResponse(_commitName, _realAccountName, _datas, _result)
    # 		}
    # g_LoginPoller.wxLogin(loginName, callback)
    #else:
    #	KBEngine.accountLoginResponse(commitName, realAccountName, datas, KBEngine.SERVER_ERR_LOCAL_PROCESSING)

    # if param["platform"] == wetchat:
    # 		values = {}
    # 		values['appid'] = GameConfigs.APPID
    # 		values['secret'] = GameConfigs.APP_SECRET
    # 		values['js_code'] = loginName
    # 		values['grant_type'] = 'authorization_code'
    # 		query_string = parse.urlencode(values)
    # 		#构建微信接口URL: https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
    # 		url = GameConfigs.WEI_XIN_URL + "?" + query_string

    # 		try:
    # 			DEBUG_MSG("visist wei xin server ....")
    # 			#阻塞同步访问,大量用户访问时,会造成性能下降,建议使用异步访问
    # 			#向微信服务器请求session_key和openid
    # 			start = time.clock()
    # 			respone = request.urlopen(url).read().decode("utf8")
    # 			end = time.clock()
    # 			DEBUG_MSG("visit weixin time %f" % (end - start))
    # 			userInfo = eval(respone)
    # 			if respone:
    # 				isWeiXinLogin = True
    # 				realAccountName = userInfo["openid"]
    # 				datas = str(userInfo).encode()

    # 		except Exception as err:
    # 			isWeiXinLogin = False
    # 			DEBUG_MSG("weixin Error: " + str(err))

    # if not isWeiXinLogin:
    # 	datas = bytes()

    KBEngine.accountLoginResponse(commitName, realAccountName, datas,
                                  KBEngine.SERVER_ERR_LOCAL_PROCESSING)
Beispiel #7
0
def __getUserCallBack(loginName, password, clientData, httpcode, data, headers, success, url):
	"""
	参数1:HTTP请求返回码 这个结果集合参数是一个整形值
	参数2:返回的内容 它是一个字符串
	参数3:服务器返回的HTTP协议头,如:{"Content-Type": "application/x-www-form-urlencoded"} 它是一个字典
	参数4:执行是否成功,当请求执行有错误时为False 可以通过httpcode进一步判断错误信息
	参数5:请求所用的网址
	"""
	INFO_MSG('__getUserCallBack: loginName=%s, httpcode=%s, success=%s' % (loginName, httpcode, success))

	# 如果获取微信信息失败
	if not success:
		KBEngine.accountLoginResponse(loginName, loginName, clientData, KBEngine.SERVER_ERR_USER1)
		return

	# 数据转换
	data = GTools.json_load(data)

	# 获取用户信息失败
	if 'errcode' in data and data['errcode'] != 0:
		ERROR_MSG('__getUserCallBack: data=%s' % (data))
		KBEngine.accountLoginResponse(loginName, loginName, clientData, KBEngine.SERVER_ERR_USER1)
		return

	# 检查加密数据
	
	key = GTools.getSha1Str(GTools.byteToStr(clientData) + data['session_key'])
	ERROR_MSG("clientData(%s) session_key(%s) key(%s) password(%s)" % (clientData, data['session_key'], key, password))
	
	if key == password:
		INFO_MSG("__getUserCallBack::SERVER_SUCCESS. loginName=%s, openid=%s" % (loginName, data['openid']))
		KBEngine.accountLoginResponse(loginName, data['openid'], clientData, KBEngine.SERVER_SUCCESS)
	else:
		ERROR_MSG("__getUserCallBack::SERVER_ERR_NAME_PASSWORD. loginName=%s, openid=%s" % (loginName, data['openid']))
		KBEngine.accountLoginResponse(loginName, loginName, clientData, KBEngine.SERVER_ERR_NAME_PASSWORD)
    def processData(self):
        """
        处理接收数据
        从接收数据中截取json串并解析
        """
        _index1 = self._recv_str.find('{')
        _index2 = self._recv_str.rfind('}')

        _bodyStr = self._recv_str[_index1:_index2 + 1]
        DEBUG_MSG("_bodyStr: %s" % _bodyStr)
        self._recv_data = json.loads(_bodyStr)
        DEBUG_MSG("self._recv_data: %s" % str(self._recv_data))
        KBEngine.accountLoginResponse('chongxin', 'chongxin',
                                      KBEngine.SERVER_ERR_LOCAL_PROCESSING)
Beispiel #9
0
 def callback(response):
     serverData = {}
     realAccountName = loginName
     if response.code == 200:
         user_data = AsyncHttp.parse_json(response.body)
         pk = user_data.pop("pk", None)
         if pk:
             realAccountName = str(pk)
             code = KBEngine.SERVER_SUCCESS
         else:
             code = KBEngine.SERVER_ERR_NAME_PASSWORD
         serverData = user_data
     else:
         code = KBEngine.SERVER_ERR_OP_FAILED
     KBEngine.accountLoginResponse(loginName, realAccountName,
                                   Bytes(**serverData).dumps(), code)
Beispiel #10
0
def onRequestAccountLogin(loginName, password, datas):
    commitName = loginName
    realAccountName = copy.deepcopy(commitName)
    wetchat = '%d' % GameConfigs.WECHAT_GAME
    isWeiXinLogin = False
    param = eval(datas.decode('utf8'))

    if param["platform"] == wetchat:
        callback = lambda _commitName, _realAccountName, _datas, _result: {
            KBEngine.accountLoginResponse(_commitName, _realAccountName,
                                          _datas, _result)
        }
        g_LoginPoller.wxLogin(loginName, callback)
    else:
        KBEngine.accountLoginResponse(commitName, realAccountName, datas,
                                      KBEngine.SERVER_ERR_LOCAL_PROCESSING)
    """
Beispiel #11
0
def onRequestAccountLogin(loginName, password, datas):
    commitName = loginName
    if loginName.find('yk') != -1:
        realAccountName = commitName
        #生成账号
        if len(loginName) == 2:
            UUID = KBEngine.genUUID64()
            commitName = 'yk'
            realAccountName = 'yk' + str(UUID)
        INFO_MSG('游客登录: loginName=%s,commitName=%s,realAccountName=%s' %
                 (loginName, commitName, realAccountName))
        KBEngine.accountLoginResponse(commitName, realAccountName, datas,
                                      KBEngine.SERVER_ERR_LOCAL_PROCESSING)
    else:  #http请求,跟第三方平台对接登录
        callback = lambda _commitName, _realAccountName, _datas, _result: {
            KBEngine.accountLoginResponse(_commitName, _realAccountName,
                                          _datas, _result)
        }
        g_LoginPoller.ZLLogin(loginName, password, datas, callback)
Beispiel #12
0
def onRequestAccountLogin(loginName, password, datas):
    """
	KBEngine method.
	请求登陆账号回调
	@param loginName: 客户端请求时所提交的名称
	@type  loginName: string
	
	@param password: 密码
	@type  password: string
	
	@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
	@type  datas: bytes
	"""
    INFO_MSG('onRequestAccountLogin: registerName=%s' % (loginName))

    commitName = loginName

    # 默认账号名就是提交时的名
    realAccountName = commitName

    # 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
    # datas将会回调至客户端
    # 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
    # KBEngine.registerReadFileDescriptor()和KBEngine.registerWriteFileDescriptor()结合
    # tornado异步访问。也可以结合socket模拟http的方式与平台交互。

    # 如果返回码为KBEngine.SERVER_ERR_LOCAL_PROCESSING则表示验证登陆成功,但dbmgr需要检查账号密码,KBEngine.SERVER_SUCCESS则无需再检查密码
    if "test" in commitName:
        KBEngine.accountLoginResponse(commitName, realAccountName, datas,
                                      KBEngine.SERVER_ERR_LOCAL_PROCESSING)
    else:
        import urllib.request as urllib
        import json
        print(urllib)
        res = json.loads(
            urllib.urlopen(
                "http://ncf.cz-studio.cn/check-user/?user_email={user}&user_password={pw}"
                .format(user=loginName, pw=password)).read().decode('utf-8'))
        if res['passport'] == "1":
            realAccountName = res['username']
            if res['usertype'] in ["8", "9"]:
                KBEngine.accountLoginResponse(commitName, realAccountName,
                                              datas, KBEngine.SERVER_SUCCESS)
            else:
                KBEngine.accountLoginResponse(
                    commitName, realAccountName, datas,
                    KBEngine.SERVER_ERR_ACCOUNT_NOT_ACTIVATED)
        else:
            KBEngine.accountLoginResponse(commitName, realAccountName, datas,
                                          KBEngine.SERVER_ERR_NAME_PASSWORD)
Beispiel #13
0
def onRequestAccountLogin(loginName, password, datas):
	"""
	KBEngine method.
	请求登陆账号回调
	@param loginName: 客户端请求时所提交的名称 - 微信登陆获得的code
	@type  loginName: string
	
	@param password: 密码 - sha1( datas + sessionkey )
	@type  password: string
	
	@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台 - 用户信息字符串
	@type  datas: bytes
	"""
	INFO_MSG('onRequestAccountLogin: loginName=%s' % (loginName))
	
	# 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
	# datas将会回调至客户端
	# 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
	# KBEngine.registerReadFileDescriptor()和KBEngine.registerWriteFileDescriptor()结合
	# KBEngine.urlopen("https://www.baidu.com",onHttpCallback)异步访问。也可以结合socket的方式与平台交互。

	# 如果返回码为KBEngine.SERVER_ERR_LOCAL_PROCESSING 则表示验证登陆成功,但dbmgr需要检查账号密码
	# KBEngine.SERVER_SUCCESS 则无需再检查密码

	loginNameList = loginName.split(':')

	# 0 登陆方式为账号登陆
	if loginNameList[0] == '0':
		KBEngine.accountLoginResponse(loginName, loginName, datas, KBEngine.SERVER_ERR_LOCAL_PROCESSING)

	# 1 登陆方式为微信登陆
	elif loginNameList[0] == '1':
		# 换取用户唯一标识 OpenID 和会话密钥 session_key
		url = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code" \
				% (GServerCfg.GC_APPInfo['appID'], GServerCfg.GC_APPInfo['AppSecret'], loginNameList[1])
		
		KBEngine.urlopen(url, GTools.functor(__getUserCallBack, loginName, password, datas))
Beispiel #14
0
def onRequestAccountLogin(loginName, password, datas):
    """
    KBEngine method.
    请求登陆账号回调
    @param loginName: 客户端请求时所提交的名称
    @type  loginName: string

    @param password: 密码
    @type  password: string

    @param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
    @type  datas: bytes
    """
    data = Bytes(datas)
    if not settings.Account.needWebAuth:
        return KBEngine.accountLoginResponse(
            loginName, data.get("username", loginName),
            Bytes(username=loginName, password=loginName, typeList=[]).dumps(),
            KBEngine.SERVER_SUCCESS)

    def callback(response):
        serverData = {}
        realAccountName = loginName
        if response.code == 200:
            user_data = AsyncHttp.parse_json(response.body)
            pk = user_data.pop("pk", None)
            if pk:
                realAccountName = str(pk)
                code = KBEngine.SERVER_SUCCESS
            else:
                code = KBEngine.SERVER_ERR_NAME_PASSWORD
            serverData = user_data
        else:
            code = KBEngine.SERVER_ERR_OP_FAILED
        KBEngine.accountLoginResponse(loginName, realAccountName,
                                      Bytes(**serverData).dumps(), code)

    AsyncHttp().post(settings.Account.url.authUser, callback, data)
Beispiel #15
0
def onRequestAccountLogin(loginName, password, datas):
    """
	KBEngine method.
	请求登陆账号回调
	@param loginName: 客户端请求时所提交的名称
	@type  loginName: string
	
	@param password: 密码
	@type  password: string
	
	@param datas: 客户端请求时所附带的数据,可将数据转发第三方平台
	@type  datas: bytes
	"""

    commitName = loginName
    INFO_MSG('onRequestAccountLogin: loginName=%s' % (loginName))
    INFO_MSG('onRequestAccountLogin: commitName=%s' % (commitName))
    INFO_MSG(datas)

    # 默认账号名就是提交时的名
    realAccountName = copy.deepcopy(commitName)

    wetchat = '%d' % GameConfigs.WECHAT_GAME
    code = None
    IsWeiWinLogin = False

    param = datas.decode()
    params = param.split('&')
    INFO_MSG(params)

    isWeiXinLogin = False

    if params and len(params) >= 2:
        param1 = params[0].split('=')
        param2 = params[1].split('=')

        if param1[0] == 'platform' and param1[1] == wetchat and param2[
                0] == 'code' and param2[1] != 'null':
            code = param2[1]
            values = {}
            values['appid'] = GameConfigs.APPID
            values['secret'] = GameConfigs.APP_SECRET
            values['js_code'] = code
            values['grant_type'] = 'authorization_code'
            query_string = parse.urlencode(values)
            url = GameConfigs.WEI_XIN_URL + "?" + query_string

            try:
                INFO_MSG("vist weixin : " + url)

                #阻塞同步访问,大量用户访问时,会造成性能下降,建议使用异步访问
                respone = request.urlopen(url).read().decode("utf8")
                userInfo = eval(respone)

                INFO_MSG("wei_xin_server respone= " + respone)
                INFO_MSG(userInfo)
                isWeiXinLogin = True
                if respone:
                    sessionId = get3rdSession(respone)
                    realAccountName = userInfo["openid"]
                    if not sessionId in g_3rdSession:
                        g_3rdSession[sessionId] = userInfo
                        userInfo['3rdSessionId'] = sessionId
                        datas = str(userInfo).encode()
                        INFO_MSG(datas)

            except Exception as err:
                isWeiXinLogin = False
                INFO_MSG("weixin Error: " + str(err))

    # 此处可通过http等手段将请求提交至第三方平台,平台返回的数据也可放入datas
    # datas将会回调至客户端
    # 如果使用http访问,因为interfaces是单线程的,同步http访问容易卡住主线程,建议使用
    # KBEngine.registerReadFileDescriptor()和KBEngine.registerWriteFileDescriptor()结合
    # tornado异步访问。也可以结合socket模拟http的方式与平台交互。

    # 如果返回码为KBEngine.SERVER_ERR_LOCAL_PROCESSING则表示验证登陆成功,但dbmgr需要检查账号密码,KBEngine.SERVER_SUCCESS则无需再检查密码
    if not isWeiXinLogin:
        INFO_MSG("Clear datas")
        datas = bytes()
    KBEngine.accountLoginResponse(commitName, realAccountName, datas,
                                  KBEngine.SERVER_ERR_LOCAL_PROCESSING)
    INFO_MSG("accountLoginResponse, data:")
    INFO_MSG(datas)