Exemplo n.º 1
0
    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}
Exemplo n.º 2
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
Exemplo n.º 3
0
    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}
Exemplo n.º 4
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
Exemplo n.º 5
0
    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}
Exemplo n.º 6
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}
Exemplo n.º 7
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 {}
Exemplo n.º 8
0
    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}
Exemplo n.º 9
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}
Exemplo n.º 10
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)
Exemplo n.º 11
0
    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}
Exemplo n.º 12
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
Exemplo n.º 13
0
 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