def login(cls, para): if not checkPara(para, ['version', 'did', ('type', lambda x: x in [cls.DEVICE_TYPE, cls.FB_TYPE])]): return Error.INVALID_PARAM version = para['version'] did = para['did'] if para['type'] == cls.DEVICE_TYPE: (uid, is_new) = Login.device_login(did) else: if para['fb_id'] in para['frd_list']: return Error.INVALID_PARAM (uid, is_new) = Login.fb_login(did, para['fb_id'], para['fb_name'], para['frd_list']) sid = Session.gen_session(uid) ret = {'uid': uid, 'sid': sid} user_info = User(uid).get(['coin', 'level', 'exp', 'name'], True) user_info['exp'] /= 100 ret.update(user_info) if version < Config.LATEST_VERSION: ret['update'] = Config.PKG_URL User(uid).login_time = int(time.time()) if 'ip' in para: g = cls.GEO.city(para['ip']) Location.update(uid, g['country_code'], g['region']) return ret