Exemple #1
0
def auth_token_for_oc(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    """论证无账号用户
    """
    print "debug_guochen access_token, openid", access_token, openid
    fg = False
    pid = ''
    msg = ''
    subarea = request.REQUEST.get("subarea", "1") or '1'
    #没有openid时,检查后控制自动分配id的开头是否开启,如果已经关闭,返回提示
    if not openid:
       if game_config.system_config.get('account_assign_switch'):
           fg = True
           pid = get_uuid()
           #验证成功,安装用户
           request.rk_user = UserBase._install(pid,'oc',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
           access_token = get_upwd()
           request.rk_user.account.update_info(pid, access_token)
       else:
           msg = get_msg('login','cannot_register')
           return fg,pid,msg
    if not check_openid(openid):
        msg = get_msg('login','cannot_register')
        return fg,pid,msg
    #有openid时,检查access_token是否正确
    account = AccountMapping.get(openid)
    if not account: 
        if game_config.system_config.get('account_assign_switch'):
            fg = True
            pid = openid
            #验证成功,安装用户
            request.rk_user = UserBase._install(pid,'oc',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
            # debug 模式下,将传入的access_token 作为新用户taken
            if settings.DEBUG is True:
                access_token = access_token or get_upwd()
            else:
                access_token = get_upwd()
            request.rk_user.account.update_info(pid, access_token)
            account = request.rk_user.account
            print "debug_guochen_new_token pid, access_token, openid", pid, access_token, openid
        else:
            msg = get_msg('login','cannot_register')
            return fg,pid,msg

    elif account.access_token == access_token:
        fg = True
        pid = openid
        #验证成功,安装用户
        request.rk_user = UserBase._install(pid, 'oc', subarea=subarea)
    else:
        print "debug_guochen_erro_token pid, access_token, openid", pid, access_token, openid
        msg = get_msg('login','session_overdue')
    return fg,pid,msg
Exemple #2
0
def _bind_new_platform(request, platform_name, platform_openId, old_account,
                       result):
    subarea = request.REQUEST.get("subarea", "1")
    fg = False
    msg = ''
    pid = md5.md5(platform_name + str(platform_openId)).hexdigest()
    #检查新账户是否已经被关联
    account_mapping_obj = AccountMapping.get(pid)
    if account_mapping_obj:
        msg = get_msg('login', 'already_bind')
        return fg, pid, msg
    #检查被绑定用户类型是否是oc
    old_user_obj = UserBase.get(old_account.get_subarea_uid(subarea))
    if old_user_obj.baseinfo['platform'] != 'oc':
        msg = get_msg('login', 'already_bind')
        return fg, pid, msg
    fg = True
    #创建新账户,将旧账户uid关联到新账户后,删除旧账户
    account_mapping_obj = AccountMapping.create(pid)
    account_mapping_obj.subarea_uids = old_account.subarea_uids
    account_mapping_obj.put()
    #删除oc账户
    old_account.delete()
    #给request安装用户
    request.rk_user = UserBase._install(pid, platform_name, subarea=subarea)
    request.rk_user.baseinfo['pid'] = pid
    request.rk_user.baseinfo['platform'] = platform_name
    request.rk_user.baseinfo['bind_time'] = int(time.time())
    request.rk_user.put()
    update_function = request.rk_user.update_platform_openid(
        platform_name, platform_openId)
    if update_function:
        update_function(result)
    return fg, pid, msg
Exemple #3
0
    def new_func(request,*args,**argw):
        pid = request.REQUEST.get("pid")
        platform = request.REQUEST.get("platform")
        subarea = request.REQUEST.get("subarea", "1")

        if pid and platform:
            request.rk_user = UserBase._install(pid, platform, subarea=subarea)
            frozen_msg = get_frozen_msg(request.rk_user)
            if frozen_msg:
                data = {
                    'rc': 10,
                    'data': {
                        'msg': frozen_msg,
                        'server_now': int(time.time())
                    }
                }
                return HttpResponse(
                    json.dumps(data, indent=1),
                    content_type='application/x-javascript',
                )
        else:
            #print '#### set_user, rc: 6'
            data = {
                'rc': 6,
                'data': {
                    'msg': get_msg('login', 'platform_overdue'),
                    'server_now': int(time.time())
                }
            }
            return HttpResponse(
                json.dumps(data, indent=1),
                content_type='application/x-javascript',
            )
        return func(request, *args, **argw)
Exemple #4
0
def auth_token_for_91(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    """验证91平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    OPEN_URL = 'http://service.sj.91.com/usercenter/AP.aspx'
    #request_url = '%s?AppId=%s&Act=4&Uin=%s&SessionId=%s&Sign=%s'
    sign = md5.new(settings.APP_ID_91 + '4' + openid + access_token\
     + settings.APP_KEY_91).hexdigest()
    data = dict(    
        AppId = settings.APP_ID_91,
        Act = '4',
        Uin = openid,
        SessionId = access_token,
        Sign = sign,
    )
    pairs = urllib.urlencode(data)
    request_url = OPEN_URL + '?' + pairs
    url_request = urllib2.urlopen(request_url, timeout=12)
    rc,res = url_request.code, url_request.read()
    res_dict = json.loads(res)
    if rc == 200 and res_dict['ErrorCode'] == '1':
        fg = True
        pid = md5.md5('91'+str(openid)).hexdigest()
        #给request安装用户
        request.rk_user = UserBase._install(pid, '91',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
        #检查用户是否账户被冻结
        if not request.rk_user.frozen:
            #更新用户的openid和access_token
            request.rk_user.account.update_info(openid,access_token)
            #更新用户平台信息
            request.rk_user.update_user_from_91(openid)
    return fg,pid
Exemple #5
0
def auth_token_for_fb(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    """论证fb开放平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1") or '1'
    user_info_url = 'https://graph.facebook.com/me?access_token=%s' % str(access_token)
    res = urllib2.urlopen(user_info_url, timeout=12).read()
    res = res.strip()
    res = res.replace('false','False')
    res = res.replace('true','True')
    res = res.replace('null','None')
    exec('result = %s' % res)
    if 'error' not in result:
        get_openid = str(result.get('id'))
        openid = get_openid
        if get_openid == openid:
            fg = True
            pid = md5.md5('fb' + str(openid)).hexdigest()
            #给request安装用户
            request.rk_user = UserBase._install(pid,'fb',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
            #数据校正
            if request.rk_user.baseinfo['platform'] != 'fb':
                request.rk_user.baseinfo['platform'] = 'fb'
            #检查用户是否账户被冻结
            if not request.rk_user.frozen:
                #更新用户的openid和access_token
                request.rk_user.account.update_info(openid,access_token)
                # request.rk_user.update_user_from_fb(result)
    return fg,pid
Exemple #6
0
def auth_token_for_pp(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")

    pp_url = 'http://passport_i.25pp.com:8080/index?tunnel-command=2852126756'
    headers = {"Host":"passport_i.25pp.com","Content-Length":"32"}
    req = urllib2.Request(pp_url, str(access_token))
    url_request = urllib2.urlopen(req, timeout=12)
    rc, res = url_request.code, url_request.read()
    if rc != 200:
        return fg, pid 
    res = res.strip()
    res = "{" + res + "}"
    result = {}
    exec('result = %s' % res)
    status = result.get('status', 1)
    if status != 0:
        return fg, pid
    
    get_openid = str(result.get('userid'))
    if get_openid != openid:
        return fg, pid
    pid = md5.md5('pp' + str(openid)).hexdigest()
    request.rk_user = UserBase._install(pid, 'pp',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
    #数据校正
    if request.rk_user.baseinfo['platform'] != 'pp':
        request.rk_user.baseinfo['platform'] = 'pp'
    #检查用户是否账户被冻结
    if not request.rk_user.frozen:
        #更新用户的openid和access_token
        request.rk_user.account.update_info(openid,access_token)
        request.rk_user.update_user_from_pp(get_openid)
    fg = True
    return fg, pid
Exemple #7
0
def _bind_new_platform(request, platform_name, platform_openId, old_account, result):
    subarea = request.REQUEST.get("subarea", "1")
    fg = False
    msg = ''
    pid = md5.md5(platform_name + str(platform_openId)).hexdigest()
    #检查新账户是否已经被关联
    account_mapping_obj = AccountMapping.get(pid)
    if account_mapping_obj:
        msg = get_msg('login', 'already_bind')
        return fg, pid, msg
    #检查被绑定用户类型是否是oc
    old_user_obj = UserBase.get(old_account.get_subarea_uid(subarea))
    if old_user_obj.baseinfo['platform'] != 'oc':
        msg = get_msg('login', 'already_bind')
        return fg, pid, msg
    fg = True
    #创建新账户,将旧账户uid关联到新账户后,删除旧账户
    account_mapping_obj = AccountMapping.create(pid)
    account_mapping_obj.subarea_uids = old_account.subarea_uids
    account_mapping_obj.put()
    #删除oc账户
    old_account.delete()
    #给request安装用户
    request.rk_user = UserBase._install(pid, platform_name, subarea=subarea)
    request.rk_user.baseinfo['pid'] = pid
    request.rk_user.baseinfo['platform'] = platform_name
    request.rk_user.baseinfo['bind_time'] = int(time.time())
    request.rk_user.put()
    update_function = request.rk_user.update_platform_openid(platform_name, platform_openId)
    if update_function:
        update_function(result)
    return fg, pid, msg
Exemple #8
0
def auth_token_for_qq(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    """论证qq开放平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    user_info_url = 'https://open.t.qq.com/api/user/info?format=json&oauth_consumer_key=%s&access_token=%s&openid=%s&oauth_version=2.a&scope=all' % (settings.QQ_APP_ID,access_token,openid)
    url_request = urllib2.urlopen(str(user_info_url), timeout=12)
    rc = url_request.code
    res  = url_request.read()

    if rc == 200:
        res = res.strip()
        res = res.replace('false','False')
        res = res.replace('true','True')
        res = res.replace('null','None')
        exec('result = %s' % res)
        if not result['ret']:
            get_openid = str(result['data']['openid'])
            if get_openid == openid:
                fg = True
                pid = md5.md5('qq' + str(openid)).hexdigest()
                #给request安装用户
                request.rk_user = UserBase._install(pid,'qq',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
                #数据校正
                if request.rk_user.baseinfo['platform'] != 'qq':
                    request.rk_user.baseinfo['platform'] = 'qq'
                #检查用户是否账户被冻结
                if not request.rk_user.frozen:
                    #更新用户的openid和access_token
                    request.rk_user.account.update_info(openid,access_token)
                    request.rk_user.update_user_from_qq(result)
    return fg,pid
Exemple #9
0
    def new_func(request, *args, **argw):
        pid = request.REQUEST.get("pid")
        platform = request.REQUEST.get("platform")
        subarea = request.REQUEST.get("subarea", "1")

        if pid and platform:
            request.rk_user = UserBase._install(pid, platform, subarea=subarea)
            frozen_msg = get_frozen_msg(request.rk_user)
            if frozen_msg:
                data = {
                    'rc': 10,
                    'data': {
                        'msg': frozen_msg,
                        'server_now': int(time.time())
                    }
                }
                return HttpResponse(
                    json.dumps(data, indent=1),
                    content_type='application/x-javascript',
                )
        else:
            #print '#### set_user, rc: 6'
            data = {
                'rc': 6,
                'data': {
                    'msg': get_msg('login', 'platform_overdue'),
                    'server_now': int(time.time())
                }
            }
            return HttpResponse(
                json.dumps(data, indent=1),
                content_type='application/x-javascript',
            )
        return func(request, *args, **argw)
Exemple #10
0
def auth_token_for_360(request, access_token, openid, uuid, mktid, version,
                       client_type, macaddr, idfa, ios_ver):
    #print '##### in auth_token_for_360'
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")

    #360平台验证
    if not 'access_token' in request.REQUEST:
        return fg, pid
    else:
        access_token = str(request.REQUEST['access_token'])

    platform = str(request.REQUEST['platform'])
    if access_token:
        url_360 = 'https://openapi.360.cn/user/me.json'
        code_url = '%s?access_token=%s&fields=id,name,avatar,sex,area' % (
            url_360, access_token)
        url_request = urllib2.urlopen(code_url, timeout=12)
        code, res = url_request.code, url_request.read()

        #print '#### 360, code, res=', code, res
        #可能360不需要refresh_token ?
        #refresh_token = str(request.REQUEST['refresh_token'])
        refresh_token = ''
        #print '#### refresh_token=', refresh_token
        #expires_in = float(request.REQUEST['expires_in'])  # "['123.45']" ?
        #print '#### expires_in=', request.REQUEST['expires_in']
        expires_in = 24 * 3600

        if code == 200:
            res_dict = json.loads(res)
            #print '#### 360, res_dict=', res_dict

            fg = True
            openid = str(res_dict['id'])
            pid = md5.md5('360' + openid).hexdigest()
            request.rk_user = UserBase._install(pid,
                                                platform,
                                                uuid,
                                                mktid,
                                                version,
                                                client_type,
                                                macaddr,
                                                idfa,
                                                ios_ver,
                                                subarea=subarea)
            #检查用户是否账户被冻结
            if not request.rk_user.frozen:
                #更新用户的openid和access_token
                request.rk_user.account.update_info(openid, access_token)
                request.rk_user.update_user_from_360(res_dict)
                expires_time = time.time() + expires_in

                #print '##### 360 start set session'
                Session.set(platform, pid, access_token, refresh_token,
                            expires_time)
    return fg, pid
Exemple #11
0
def auth_token_for_sina(request, access_token, openid, uuid, mktid, version,
                        client_type, macaddr, idfa, ios_ver):
    """论证新浪开放平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    SINA_OPEN_URL = 'https://api.weibo.com/2/account/get_uid.json'
    request_url = '%s?access_token=%s' % (SINA_OPEN_URL, str(access_token))
    user_info_url = 'https://api.weibo.com/2/users/show.json?access_token=%s&uid=%s'
    url_request = urllib2.urlopen(request_url, timeout=12)
    rc, res = url_request.code, url_request.read()
    if rc == 200:
        res = res.strip()
        res = res.replace('false', 'False')
        res = res.replace('true', 'True')
        res = res.replace('null', 'None')
        exec('result = %s' % res)
        get_openid = str(result.get('uid'))
        if get_openid == openid:
            fg = True
            pid = md5.md5('sina' + str(openid)).hexdigest()
            #给request安装用户
            request.rk_user = UserBase._install(pid,
                                                'sina',
                                                uuid,
                                                mktid,
                                                version,
                                                client_type,
                                                macaddr,
                                                idfa,
                                                ios_ver,
                                                subarea=subarea)
            #数据校正
            if request.rk_user.baseinfo['platform'] != 'sina':
                request.rk_user.baseinfo['platform'] = 'sina'
            #检查用户是否账户被冻结
            if not request.rk_user.frozen:
                #更新用户的openid和access_token
                request.rk_user.account.update_info(openid, access_token)
                #调用平台的api,取得用户名等信息,并且更新,但非必须
                try:
                    user_info_url = user_info_url % (str(access_token),
                                                     str(openid))
                    res = urllib2.urlopen(str(user_info_url),
                                          timeout=12).read()
                    res = res.strip()
                    res = res.replace('false', 'False')
                    res = res.replace('true', 'True')
                    res = res.replace('null', 'None')
                    exec('result = %s' % res)
                    request.rk_user.update_user_from_sina(result)
                except:
                    pass
    return fg, pid
Exemple #12
0
def auth_token_for_mi(request, access_token, openid, uuid, mktid, version,
                      client_type, macaddr, idfa, ios_ver):
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    #mi平台验证

    client_id = settings.MI_APP_ID
    url_mi = 'http://mis.migc.xiaomi.com/api/biz/service/verifySession.do'
    ready_signature = 'appId=%s&session=%s&uid=%s' % (client_id, access_token,
                                                      openid)

    signature = hmac.new(settings.MI_SECRET_KEY, ready_signature,
                         hashlib.sha1).hexdigest()

    data = dict(
        appId=client_id,
        session=access_token,
        uid=openid,
        signature=signature,
    )
    pairs = urllib.urlencode(data)
    code_url = url_mi + '?' + pairs
    url_request = urllib2.urlopen(code_url, timeout=12)
    code, res = url_request.code, url_request.read()
    res_dict = json.loads(res)
    if code == 200 and res_dict['errcode'] == 200:

        pid = md5.md5('mi' + str(openid)).hexdigest()
        request.rk_user = UserBase._install(pid,
                                            'mi',
                                            uuid,
                                            mktid,
                                            version,
                                            client_type,
                                            macaddr,
                                            idfa,
                                            ios_ver,
                                            subarea=subarea)
        #数据校正
        if request.rk_user.baseinfo['platform'] != 'mi':
            request.rk_user.baseinfo['platform'] = 'mi'
        #检查用户是否账户被冻结
        if not request.rk_user.frozen:
            #更新用户的openid和access_token
            request.rk_user.account.update_info(openid, access_token)
            res_dict['openid'] = openid
            request.rk_user.update_user_from_mi(res_dict)
        fg = True
    return fg, pid
Exemple #13
0
def auth_token_for_360(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    #print '##### in auth_token_for_360'
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")

    #360平台验证
    if not 'access_token' in request.REQUEST:
        return fg, pid
    else:
        access_token = str(request.REQUEST['access_token'])

    platform = str(request.REQUEST['platform'])
    if access_token:
        url_360 = 'https://openapi.360.cn/user/me.json'
        code_url = '%s?access_token=%s&fields=id,name,avatar,sex,area' % (url_360, access_token)
        url_request = urllib2.urlopen(code_url, timeout=12)
        code, res = url_request.code, url_request.read()

        #print '#### 360, code, res=', code, res
        #可能360不需要refresh_token ?
        #refresh_token = str(request.REQUEST['refresh_token'])
        refresh_token = ''
        #print '#### refresh_token=', refresh_token
        #expires_in = float(request.REQUEST['expires_in'])  # "['123.45']" ?
        #print '#### expires_in=', request.REQUEST['expires_in']
        expires_in = 24*3600

        if code == 200:
            res_dict = json.loads(res)
            #print '#### 360, res_dict=', res_dict

            fg = True
            openid = str(res_dict['id'])
            pid = md5.md5('360' + openid).hexdigest()
            request.rk_user = UserBase._install(pid, platform,uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
            #检查用户是否账户被冻结
            if not request.rk_user.frozen:
                #更新用户的openid和access_token
                request.rk_user.account.update_info(openid,access_token)
                request.rk_user.update_user_from_360(res_dict)
                expires_time = time.time() + expires_in

                #print '##### 360 start set session'
                Session.set(platform, pid, access_token, refresh_token, expires_time)
    return fg,pid
Exemple #14
0
def auth_token_for_pp(request, access_token, openid, uuid, mktid, version,
                      client_type, macaddr, idfa, ios_ver):
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")

    pp_url = 'http://passport_i.25pp.com:8080/index?tunnel-command=2852126756'
    headers = {"Host": "passport_i.25pp.com", "Content-Length": "32"}
    req = urllib2.Request(pp_url, str(access_token))
    url_request = urllib2.urlopen(req, timeout=12)
    rc, res = url_request.code, url_request.read()
    if rc != 200:
        return fg, pid
    res = res.strip()
    res = "{" + res + "}"
    result = {}
    exec('result = %s' % res)
    status = result.get('status', 1)
    if status != 0:
        return fg, pid

    get_openid = str(result.get('userid'))
    if get_openid != openid:
        return fg, pid
    pid = md5.md5('pp' + str(openid)).hexdigest()
    request.rk_user = UserBase._install(pid,
                                        'pp',
                                        uuid,
                                        mktid,
                                        version,
                                        client_type,
                                        macaddr,
                                        idfa,
                                        ios_ver,
                                        subarea=subarea)
    #数据校正
    if request.rk_user.baseinfo['platform'] != 'pp':
        request.rk_user.baseinfo['platform'] = 'pp'
    #检查用户是否账户被冻结
    if not request.rk_user.frozen:
        #更新用户的openid和access_token
        request.rk_user.account.update_info(openid, access_token)
        request.rk_user.update_user_from_pp(get_openid)
    fg = True
    return fg, pid
Exemple #15
0
def auth_token_for_91(request, access_token, openid, uuid, mktid, version,
                      client_type, macaddr, idfa, ios_ver):
    """验证91平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    OPEN_URL = 'http://service.sj.91.com/usercenter/AP.aspx'
    #request_url = '%s?AppId=%s&Act=4&Uin=%s&SessionId=%s&Sign=%s'
    sign = md5.new(settings.APP_ID_91 + '4' + openid + access_token\
     + settings.APP_KEY_91).hexdigest()
    data = dict(
        AppId=settings.APP_ID_91,
        Act='4',
        Uin=openid,
        SessionId=access_token,
        Sign=sign,
    )
    pairs = urllib.urlencode(data)
    request_url = OPEN_URL + '?' + pairs
    url_request = urllib2.urlopen(request_url, timeout=12)
    rc, res = url_request.code, url_request.read()
    res_dict = json.loads(res)
    if rc == 200 and res_dict['ErrorCode'] == '1':
        fg = True
        pid = md5.md5('91' + str(openid)).hexdigest()
        #给request安装用户
        request.rk_user = UserBase._install(pid,
                                            '91',
                                            uuid,
                                            mktid,
                                            version,
                                            client_type,
                                            macaddr,
                                            idfa,
                                            ios_ver,
                                            subarea=subarea)
        #检查用户是否账户被冻结
        if not request.rk_user.frozen:
            #更新用户的openid和access_token
            request.rk_user.account.update_info(openid, access_token)
            #更新用户平台信息
            request.rk_user.update_user_from_91(openid)
    return fg, pid
Exemple #16
0
def auth_token_for_qq(request, access_token, openid, uuid, mktid, version,
                      client_type, macaddr, idfa, ios_ver):
    """论证qq开放平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    user_info_url = 'https://open.t.qq.com/api/user/info?format=json&oauth_consumer_key=%s&access_token=%s&openid=%s&oauth_version=2.a&scope=all' % (
        settings.QQ_APP_ID, access_token, openid)
    url_request = urllib2.urlopen(str(user_info_url), timeout=12)
    rc = url_request.code
    res = url_request.read()

    if rc == 200:
        res = res.strip()
        res = res.replace('false', 'False')
        res = res.replace('true', 'True')
        res = res.replace('null', 'None')
        exec('result = %s' % res)
        if not result['ret']:
            get_openid = str(result['data']['openid'])
            if get_openid == openid:
                fg = True
                pid = md5.md5('qq' + str(openid)).hexdigest()
                #给request安装用户
                request.rk_user = UserBase._install(pid,
                                                    'qq',
                                                    uuid,
                                                    mktid,
                                                    version,
                                                    client_type,
                                                    macaddr,
                                                    idfa,
                                                    ios_ver,
                                                    subarea=subarea)
                #数据校正
                if request.rk_user.baseinfo['platform'] != 'qq':
                    request.rk_user.baseinfo['platform'] = 'qq'
                #检查用户是否账户被冻结
                if not request.rk_user.frozen:
                    #更新用户的openid和access_token
                    request.rk_user.account.update_info(openid, access_token)
                    request.rk_user.update_user_from_qq(result)
    return fg, pid
Exemple #17
0
def auth_token_for_sina(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    """论证新浪开放平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    SINA_OPEN_URL = 'https://api.weibo.com/2/account/get_uid.json'
    request_url = '%s?access_token=%s' % (SINA_OPEN_URL, str(access_token))
    user_info_url = 'https://api.weibo.com/2/users/show.json?access_token=%s&uid=%s'
    url_request = urllib2.urlopen(request_url, timeout=12)
    rc,res = url_request.code, url_request.read()
    if rc == 200:
        res = res.strip()
        res = res.replace('false','False')
        res = res.replace('true','True')
        res = res.replace('null','None')
        exec('result = %s' % res)
        get_openid = str(result.get('uid'))
        if get_openid == openid:
            fg = True
            pid = md5.md5('sina' + str(openid)).hexdigest()
            #给request安装用户
            request.rk_user = UserBase._install(pid,'sina',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
            #数据校正
            if request.rk_user.baseinfo['platform'] != 'sina':
                request.rk_user.baseinfo['platform'] = 'sina'
            #检查用户是否账户被冻结
            if not request.rk_user.frozen:
                #更新用户的openid和access_token
                request.rk_user.account.update_info(openid,access_token)
                #调用平台的api,取得用户名等信息,并且更新,但非必须
                try:
                    user_info_url = user_info_url % (str(access_token),str(openid))
                    res = urllib2.urlopen(str(user_info_url), timeout=12).read()
                    res = res.strip()
                    res = res.replace('false','False')
                    res = res.replace('true','True')
                    res = res.replace('null','None')
                    exec('result = %s' % res)
                    request.rk_user.update_user_from_sina(result)
                except:
                    pass
    return fg,pid
Exemple #18
0
def auth_token_for_fb(request, access_token, openid, uuid, mktid, version,
                      client_type, macaddr, idfa, ios_ver):
    """论证fb开放平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1") or '1'
    user_info_url = 'https://graph.facebook.com/me?access_token=%s' % str(
        access_token)
    res = urllib2.urlopen(user_info_url, timeout=12).read()
    res = res.strip()
    res = res.replace('false', 'False')
    res = res.replace('true', 'True')
    res = res.replace('null', 'None')
    exec('result = %s' % res)
    if 'error' not in result:
        get_openid = str(result.get('id'))
        openid = get_openid
        if get_openid == openid:
            fg = True
            pid = md5.md5('fb' + str(openid)).hexdigest()
            #给request安装用户
            request.rk_user = UserBase._install(pid,
                                                'fb',
                                                uuid,
                                                mktid,
                                                version,
                                                client_type,
                                                macaddr,
                                                idfa,
                                                ios_ver,
                                                subarea=subarea)
            #数据校正
            if request.rk_user.baseinfo['platform'] != 'fb':
                request.rk_user.baseinfo['platform'] = 'fb'
            #检查用户是否账户被冻结
            if not request.rk_user.frozen:
                #更新用户的openid和access_token
                request.rk_user.account.update_info(openid, access_token)
                # request.rk_user.update_user_from_fb(result)
    return fg, pid
Exemple #19
0
def auth_token_for_mi(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    #mi平台验证 

    client_id = settings.MI_APP_ID
    url_mi = 'http://mis.migc.xiaomi.com/api/biz/service/verifySession.do'
    ready_signature = 'appId=%s&session=%s&uid=%s' % (client_id, access_token, openid)

    signature = hmac.new(settings.MI_SECRET_KEY, ready_signature, hashlib.sha1).hexdigest()

    data = dict(    
        appId = client_id,
        session = access_token,
        uid = openid,
        signature = signature,
    )
    pairs = urllib.urlencode(data)
    code_url = url_mi + '?' + pairs
    url_request = urllib2.urlopen(code_url, timeout=12)
    code, res = url_request.code, url_request.read()
    res_dict = json.loads(res)
    if code == 200 and res_dict['errcode'] == 200:

        pid = md5.md5('mi' + str(openid)).hexdigest()
        request.rk_user = UserBase._install(pid, 'mi',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
        #数据校正
        if request.rk_user.baseinfo['platform'] != 'mi':
            request.rk_user.baseinfo['platform'] = 'mi'
        #检查用户是否账户被冻结
        if not request.rk_user.frozen:
            #更新用户的openid和access_token
            request.rk_user.account.update_info(openid,access_token)
            res_dict['openid'] = openid
            request.rk_user.update_user_from_mi(res_dict)
        fg = True
    return fg, pid
Exemple #20
0
def auth_token_for_oc(request, access_token, openid, uuid, mktid, version,
                      client_type, macaddr, idfa, ios_ver):
    """论证无账号用户
    """
    print "debug_guochen access_token, openid", access_token, openid
    fg = False
    pid = ''
    msg = ''
    subarea = request.REQUEST.get("subarea", "1") or '1'
    #没有openid时,检查后控制自动分配id的开头是否开启,如果已经关闭,返回提示
    if not openid:
        if game_config.system_config.get('account_assign_switch'):
            fg = True
            pid = get_uuid()
            #验证成功,安装用户
            request.rk_user = UserBase._install(pid,
                                                'oc',
                                                uuid,
                                                mktid,
                                                version,
                                                client_type,
                                                macaddr,
                                                idfa,
                                                ios_ver,
                                                subarea=subarea)
            access_token = get_upwd()
            request.rk_user.account.update_info(pid, access_token)
        else:
            msg = get_msg('login', 'cannot_register')
            return fg, pid, msg
    if not check_openid(openid):
        msg = get_msg('login', 'cannot_register')
        return fg, pid, msg
    #有openid时,检查access_token是否正确
    account = AccountMapping.get(openid)
    if not account:
        if game_config.system_config.get('account_assign_switch'):
            fg = True
            pid = openid
            #验证成功,安装用户
            request.rk_user = UserBase._install(pid,
                                                'oc',
                                                uuid,
                                                mktid,
                                                version,
                                                client_type,
                                                macaddr,
                                                idfa,
                                                ios_ver,
                                                subarea=subarea)
            # debug 模式下,将传入的access_token 作为新用户taken
            if settings.DEBUG is True:
                access_token = access_token or get_upwd()
            else:
                access_token = get_upwd()
            request.rk_user.account.update_info(pid, access_token)
            account = request.rk_user.account
            print "debug_guochen_new_token pid, access_token, openid", pid, access_token, openid
        else:
            msg = get_msg('login', 'cannot_register')
            return fg, pid, msg

    elif account.access_token == access_token:
        fg = True
        pid = openid
        #验证成功,安装用户
        request.rk_user = UserBase._install(pid, 'oc', subarea=subarea)
    else:
        print "debug_guochen_erro_token pid, access_token, openid", pid, access_token, openid
        msg = get_msg('login', 'session_overdue')
    return fg, pid, msg