def get(self, user_name, code, *args, **kwargs): sql = "SELECT * FROM {tbl} where code='{code}' limit 1".format( tbl=DB_TBL_ETICKET, code=code) logger.debug('ETicketAddHandler select::user=%r, code=%r, sql=%r' % (user_name, code, sql)) ret_list = DBBeiqiSspInst.query(sql) if ret_list: return {"status": 1} sql = "insert into {tbl} (code, stat) values ('{code}', {stat})".format( tbl=DB_TBL_ETICKET, code=code, stat=1) logger.debug('ETicketAddHandler insert::user=%r, code=%r, sql=%r' % (user_name, code, sql)) DBBeiqiSspInst.query(sql) return {"status": 0}
def get(self, user_name, album_id, page_idx=1, *args, **kwargs): sql = "SELECT * FROM {tbl} WHERE album_id = '{album_id}' limit {start},{end}"\ .format(tbl=DB_TBL_RESOURCE, album_id=album_id, start=PAGE_COUNT * (page_idx - 1), end=PAGE_COUNT) logger.debug('AudioListHandler::user=%r, sql=%r' % (user_name, sql)) ret_list = DBBeiqiSspInst.query(sql) return ret_list
def get(self, user_name, code, *args, **kwargs): sql = "SELECT * FROM {tbl} where code='{code}' limit 1".format( tbl=DB_TBL_ETICKET, code=code) logger.debug('ETicketCheckHandler select::user=%r, code=%r, sql=%r' % (user_name, code, sql)) ret_list = DBBeiqiSspInst.query(sql) if not ret_list: return {"status": 1} stat = int(ret_list[0]['stat']) if stat == ETS_DISABLE: return {"status": 2} if stat == ETS_CHECKED: return {"status": 3} sql = "UPDATE {tbl} SET stat={stat} WHERE code='{code}'".format( tbl=DB_TBL_ETICKET, stat=ETS_CHECKED, code=code) logger.debug('ETicketCheckHandler update::user=%r, code=%r, sql=%r' % (user_name, code, sql)) DBBeiqiSspInst.query(sql) return {"status": 0}
def post(self, user_name, receivers, duplicate_to, topic, text, type, files, *args, **kwargs): ts = float('%0.2f' % time.time()) letter_id = ':'.join(('letter', str(ts), user_name, receivers)) GDevRdsInts.send_cmd( *save_letter_info(letter_id, ':'.join((topic, text, type, files)))) GDevRdsInts.send_cmd(*add_letter_outbox(user_name, letter_id, ts)) receivers = ujson.loads(receivers) logger.debug('receivers={0}'.format(receivers)) acc_noexist_list = [] for acc in receivers: acc = bs2utf8(acc) account_exist = GAccRdsInts.send_cmd(*exist_account(acc)) if not account_exist: # not in redis, check mysql sql = "select * from {db} where user_name='{user_name}'".format( db='ssp_user_login', user_name=acc) res = DBBeiqiSspInst.query(sql) if len(res) == 0: # not in mysql, so we check if it's a sn if not is_email(acc): primary = GDevRdsInts.send_cmd(*get_dev_primary(acc)) if not primary: # no primary, illegal logger.debug('acc={0} not exist'.format(acc)) acc_noexist_list.append(acc) continue else: # exist in mysql, so we cache it in redis pwd = res[0].get('password').encode('utf8') GAccRdsInts.send_cmd(*set_account_pwd(acc, pwd)) GDevRdsInts.send_cmd(*add_letter_inbox(acc, letter_id, ts)) GMQDispRdsInts.send_cmd(*shortcut_mq( 'cloud_push', # sourcer, cb, from, description push_pack(user_name, 'letter', 2, ':'.join((letter_id, topic, text, type, files)), account=acc))) return acc_noexist_list
def get(self, user_name, sn, *args, **kwargs): sql = "SELECT 1 FROM {db} WHERE sn = '{sn}'".format( db=DB_TBL_DEVICE_INFO, sn=sn) ret_list = DBBeiqiSspInst.query(sql) if len(ret_list) == 0: return {'status': 1} primary = GDevRdsInts.send_cmd(*get_dev_primary(sn)) if primary is None: return {'status': 1} logger.debug('check dev args: pid: {0}, acc: {1}'.format( sn, user_name)) GMQDispRdsInts.send_cmd(*shortcut_mq( 'cloud_push', push_pack(user_name, 'check_dev_args', 2, '', account=sn))) return {'status': 0}
def post(self, account, api_key, *args, **kwargs): """ 密码丢失 :param account: :param args: :param kwargs: :return: """ cur_account = fix_account_postfix(account) if not GAccRdsInts.send_cmd(*exist_account(cur_account)): sql = "select password from {db} where username='******'".format( db=DB_TBL_SSP_USR_LOGIN, username=cur_account) expect_pwd = DBBeiqiSspInst.query(sql) if len(expect_pwd) == 0: return {'status': 1} mobile = get_mobile(GAccRdsInts, api_key, cur_account) if not mobile: return {'status': 2} sms_speed = GDevRdsInts.send_cmd(*get_sms_speed()) if sms_speed is None: GDevRdsInts.send_multi_cmd(*combine_redis_cmds(init_sms_speed())) elif sms_speed >= SMS_SPEED_MAX: return {'status': 3} else: GDevRdsInts.send_cmd(*incr_sms_speed()) ts = GDevRdsInts.send_cmd(*get_user_veri_sms_time(mobile)) if ts is not None: logger.debug('veri sms, ts={0}'.format(ts)) return {'status': 4} else: GDevRdsInts.send_multi_cmd(*combine_redis_cmds( set_user_veri_sms_time(mobile, time.time()))) val = ''.join((str(random.randint(0, 9)) for _ in xrange(6))) logger.debug('lost pwd val: {0}'.format(val)) GAccRdsInts.send_multi_cmd( *combine_redis_cmds(gen_lostpwd_val(cur_account, val))) GMQDispRdsInts.send_cmd( *shortcut_mq('sms_notify', sms_notify_pack(mobile, 2, cur_account, mobile, val))) return {'status': 0}
def get(self, user_name, sn, *args, **kwargs): """ """ expect_pa, sub_ok = GDevRdsInts.send_multi_cmd(*combine_redis_cmds(get_dev_primary(sn), test_user_follow_group(user_name, sn))) if not expect_pa: logger.warn('{0} not bound'.format(sn)) self.set_status(400) return if not (expect_pa.split(':')[-1] == user_name or sub_ok): logger.warn('{0} not bound, not sa'.format(sn)) self.set_status(400) return sql = "select longitude, latitude, altitude, accuracy, address, ad_code," \ "src_ts as timestamp " \ "from {db} where sn = '{sn}'" \ "order by src_ts desc " \ "limit 1" sql = sql.format(db=DB_TBL_LOCATION, sn=sn) rec = DBBeiqiSspInst.query(sql) return mongo2utf8(rec[0]) if rec else {}
def post(self, account, *args, **kwargs): """ 帐号状态,是否已存在 """ if not is_email(account): return {'status': 1} #帐号存在并已激活 account_exist = GAccRdsInts.send_cmd(*exist_account(account)) if account_exist: return {'status': 2} sql = "select * from {db} where username='******'".format( db=DB_TBL_SSP_USR_LOGIN, user_name=account) res = DBBeiqiSspInst.query(sql) if len(res) != 0: # exist in mysql, so we cache it pwd = res[0].get('password').encode('utf8') GAccRdsInts.send_cmd(*set_account_pwd(account, pwd)) return {'status': 2} return {'status': 0}
def post(self, user_name, sn, payload, *args, **kwargs): logger.debug('change dev args: sn: {0}, payload: {1}, acc: {2}'.format( sn, payload, user_name)) if not user_name or not sn or not payload: self.set_status(400) return sql = "SELECT 1 FROM {db} WHERE sn = '{sn}'".format( db=DB_TBL_DEVICE_INFO, sn=sn) ret_list = DBBeiqiSspInst.query(sql) if len(ret_list) == 0: return {'status': 1} primary = GDevRdsInts.send_cmd(*get_dev_primary(sn)) if primary is None: return {'status': 1} GMQDispRdsInts.send_cmd(*shortcut_mq( 'cloud_push', push_pack(user_name, 'change_dev_args', 2, payload, account=sn))) logger.debug('cloud_push doing') return {'state': 0}
def get(self, username, api_key, pwd="", *args, **kwargs): """ 生成SSO认证token :param username: :param api_key: :param pwd: device no pwd, app account has pwd :param args: :param kwargs: :return: """ user_agent = urllib.unquote(bs2utf8( self.request.headers['user-agent'])) api_ob = beiqi_keys.get(api_key) if not api_ob: logger.warn("gen_tk api_ob:%s, api_key:%s" % (api_ob, api_key)) self.set_status(401) return remote_ip = bs2utf8(self.request.remote_ip) if not is_email(username): # 设备没有pid时登录 rc4_key = api_ob.get('rc4_key') if rc4_key is None: logger.debug( 'api_key={0}, username={1} rc4_key not exists'.format( api_key, username)) self.set_status(400) return sn, ts = decrypt_username(username, rc4_key) sql = "SELECT 1 FROM {db} WHERE sn = '{sn}'".format( db=DB_TBL_DEVICE_INFO, sn=sn) ret_list = DBBeiqiSspInst.query(sql) if len(ret_list) == 0: logger.debug('ret_list={0}, sn={1}'.format(ret_list, sn)) self.set_status(400) return saved_ts = GDevRdsInts.send_cmd(*get_tk_time(sn)) if saved_ts == ts: logger.debug('ts={0} the same with saved_ts'.format(ts)) self.set_status(400) return GDevRdsInts.send_cmd(*set_tk_time(sn, ts)) login_ts = time.strftime(fmt, time.gmtime()) GMQDispRdsInts.send_cmd(*shortcut_mq( 'gen_mysql', mysql_pack(DB_TBL_USER_INFO, { 'last_login_ts': login_ts, 'last_login_ip': remote_ip, 'last_login_agent': user_agent }, action=2, ref_kvs={'username': sn}))) return gen_token(api_ob.get('s'), sn, 1, account_rds=GAccRdsInts) gid = username.split('@')[0] if len(gid) == 6: # 设备登录 sn = GDevRdsInts.send_cmd(*get_sn_of_gid(gid)) logger.debug('beiqi sso, username=%r, gid=%r, sn=%r' % (username, gid, sn)) # primary = dev_filter.send_cmd(*get_dev_primary(pid)) if sn: # django used gmttime, so we'd better use gmttime. login_ts = time.strftime(fmt, time.gmtime()) GMQDispRdsInts.send_cmd(*shortcut_mq( 'gen_mysql', mysql_pack(DB_TBL_USER_INFO, { 'last_login_ts': login_ts, 'last_login_ip': remote_ip, 'last_login_agent': user_agent }, action=2, ref_kvs={'username': username}))) return gen_token(api_ob.get('s'), username, 1, account_rds=GAccRdsInts) else: logger.debug('gid={0} invalid no sn'.format(gid)) self.set_status(403) return expect_pwd = GAccRdsInts.send_cmd(*get_pwd(username)) if expect_pwd is not None: if expect_pwd != cipher_pwd(pwd): logger.warn( 'pwd incorrect: username = {0}, pwd={1}, expect_pwd={2}'. format(username, cipher_pwd(pwd), expect_pwd)) self.set_status(401) return else: # not in redis, check mysql sql = "select password from {db} where username='******'".format( db='ssp_user_login', username=username) expect_pwd = DBBeiqiSspInst.query(sql) if len(expect_pwd) == 0: logger.debug('account={0} not exist'.format(username)) self.set_status(401) return else: pwd_inmysql = expect_pwd[0].get('password') pwd_inmysql = pwd_inmysql.encode( 'utf8') if pwd_inmysql is not None else pwd_inmysql if pwd_inmysql != cipher_pwd(pwd): logger.debug( 'pwd incorrect: username = {0}, pwd={1}, expect_pwd={2}' .format(username, cipher_pwd(pwd), expect_pwd)) self.set_status(401) return login_ts = time.strftime(fmt, time.gmtime()) GMQDispRdsInts.send_cmd(*shortcut_mq( 'gen_mysql', mysql_pack(DB_TBL_USER_INFO, { 'last_login_ts': login_ts, 'last_login_ip': remote_ip, 'last_login_agent': user_agent }, action=2, ref_kvs={'username': username}))) return gen_token(api_ob.get('s'), username, 1, account_rds=GAccRdsInts)
def get(self, user_name, sn, *args, **kwargs): sql = "SELECT 1 FROM {db_name} WHERE sn = '{sn}'".format( db_name=DB_TBL_DEVICE_INFO, sn=sn) ret_list = DBBeiqiSspInst.query(sql) if len(ret_list) == 0: return {'status': 1} gid = GDevRdsInts.send_cmd(*get_gid_of_sn(sn)) primary = GDevRdsInts.send_cmd( *get_group_primary(gid)) if gid is not None else None if primary is None: # unbound if gid is None: # generate gid while True: tmp_gid = str(randint(1, 9)) tmp_gid = tmp_gid + ''.join( [str(randint(0, 9)) for i in xrange(5)]) sn_of_gid = GDevRdsInts.send_cmd(*get_sn_of_gid(tmp_gid)) if sn_of_gid is None: # tmp_pid is not used. sql = 'select * from {db} WHERE gid = {gid}'.format( db=DB_TBL_GID_INFO, gid=tmp_gid) query_result = DBBeiqiSspInst.query(sql) if query_result and query_result[0].get( 'gid_kind') == 1: # tmp_pid is a nice number continue gid = tmp_gid GDevRdsInts.send_multi_cmd( *combine_redis_cmds(set_gid_of_sn(sn, tmp_gid), set_sn_of_gid(tmp_gid, sn))) break #update mysql data GMQDispRdsInts.send_multi_cmd(*combine_redis_cmds( shortcut_mq( 'gen_mysql', mysql_pack(DB_TBL_DEVICE_INFO, {'gid': gid}, action=2, ref_kvs={'sn': sn})), shortcut_mq( 'gen_mysql', mysql_pack(DB_TBL_GID_INFO, { 'sn': sn, 'status': 'used' }, action=2, ref_kvs={'gid': gid})))) ic = GDevRdsInts.send_cmd(*get_sn_ic(sn)) if not ic: # no ic in storage. while True: ic = ''.join([str(randint(0, 9)) for i in xrange(9)]) ic_exist = GDevRdsInts.send_cmd(*get_ic_sn(ic)) if not ic_exist: break logger.debug('sign in, gid={0}, ic={1}'.format(gid, ic)) GDevRdsInts.send_multi_cmd( *combine_redis_cmds(set_sn_ic(sn, ic), set_ic_sn(ic, sn))) return {'binding': 0, 'ic': ic, 'gid': gid, 'status': 0} else: logger.debug('sign in, pid={0}, sn={1}, binded'.format(gid, sn)) return {'binding': 1, 'gid': gid, 'status': 0}
def get(self, user_name, cls_id, *args, **kwargs): sql = "SELECT * FROM {tbl} WHERE cls_id = '{cls_id}'".format( tbl=DB_TBL_RES_ALBUM, cls_id=cls_id) logger.debug('AudioAlbumHandler::user=%r, sql=%r' % (user_name, sql)) ret_list = DBBeiqiSspInst.query(sql) return ret_list
def get(self, user_name, *args, **kwargs): sql = "SELECT * FROM {tbl}".format(tbl=DB_TBL_RES_CLS) logger.debug('AudioClsHandler::user=%r, sql=%r' % (user_name, sql)) ret_list = DBBeiqiSspInst.query(sql) return ret_list