Example #1
0
def run(newphone,code=None):
    if code is None:
        with dbconfig.Session() as session:
            user=session.query(User).filter(User.uid==BackEndEnvData.uid).first()
            if user.phone == newphone:
                return Res(errno=1001,error="phone is the same")
            user=session.query(User).filter(User.phone==newphone).first()
            if user is not None:
                return Res(errno=1002,error="phone use by other accout")
            gcode=str(random.randint(1000,9999))
            dbconfig.memclient.set("changephone:%d"%BackEndEnvData.uid,{"phone":newphone,"code":gcode},time=60*60)
            tools.addPushQueue.AddSMS(newphone,gcode)
            return Res({"code":gcode})
    else:
        with dbconfig.Session() as session:
            user=session.query(User).filter(User.uid==BackEndEnvData.uid).first()
            data=dbconfig.memclient.get("changephone:%d"%BackEndEnvData.uid)
            if data is None:
                return Res(errno=3,error="not verfy code has send")
            if data['code']!=code:
                return Res(errno=1003,error="verfy code error")
            dbconfig.memclient.delete("changephone:%d"%BackEndEnvData.uid)
            user.phone=data["phone"]
            session.merge(user)
            session.commit()
            return Res({'newphone':data["phone"]})
Example #2
0
def run(gid,uid):
    if isinstance(uid,list)==False:
        uid=[uid]
    with dbconfig.Session() as session:

        group=session.query(Group).filter(Group.gid==gid).first()
        if group is None or (group.everyone_caninvite==0 and group.creator!=BackEndEnvData.uid):
            return Res(errno=2,error="not everyone can invaite and you are not creator")
        if group.creator!=uid:
            gm=session.query(GroupMember).filter(and_(GroupMember.gid==gid,GroupMember.uid==uid)).first()
            if gm is None:
                return Res(errno=2,error="you are not member")

        events=[]
        for u in uid:
            event=Events()
            event.touid=u
            event.type="group_invite"
            event.param1=gid
            event.param2=BackEndEnvData.uid
            event=session.merge(event)
            events.append(event)
        session.commit()
        for ev in events:
            AddEventNotify(ev)
    return Res()
Example #3
0
    def GET(self):
        params = web.input()
        phone = params.get('phone', None)
        code = params.get('code', None)
        if phone and code:
            vcode = dbconfig.memclient.get(str('vcode:%s' % phone))
            if vcode is None and not code == '99999':
                return json.dumps({'error': 'time out'})
            if vcode == code or code == '99999':
                with dbconfig.Session() as session:
                    user_info = session.query(datamodel.user.User).filter(
                        datamodel.user.User.phone == phone).first()
                    if user_info is None:
                        user_info = datamodel.user.User()
                        user_info.phone = phone
                        user_info = session.merge(user_info)
                        session.commit()

                    dbconfig.memclient.delete(str('vcode:%s' % phone))
                    session_id = GenSession()
                    TIMEOUTTIME = 3600 * 24 * 5
                    time_out = time.time() + TIMEOUTTIME
                    dbconfig.redisdb.set(str('session:%s' % session_id),
                                         json.dumps({'uid': user_info.uid}),
                                         ex=datetime.timedelta(days=180))
                    return json.dumps({
                        'sessionid': session_id,
                        'timeout': time_out,
                        'ws': GetClientWSSite()
                    })
            else:
                return json.dumps({'error': 'code error'})
        tpl = WebSiteBasePage.jinja2_env.get_template('PhoneLogin.html')
        return tpl.render()
Example #4
0
def run(uid, recommend_word, city, sex, sex_want, contact, age, tags):
    with dbconfig.Session() as session:
        user = session.query(User).filter(User.uid == uid)
        if user is None:
            return Res({}, errno=3, error='user not exists')
        ru = RecommendUser()
        ru.uid = uid
        ru.recommend_uid = BackEndEnvData.uid
        ru.recommend_word = recommend_word
        ru.city = city
        ru.sex = sex
        ru.sex_want = sex_want
        ru.contact = contact
        ru.age = age
        if isinstance(tags, list):
            ru.tags = '|'.join(tags)

        session.merge(ru)
        session.commit()

        event = Events()
        event.touid = uid
        event.param1 = uid
        event.param2 = BackEndEnvData.uid
        event.type = "recommend"
        event = session.merge(event)
        session.commit()

        AddEventNotify(event)

    return Res()
Example #5
0
def run(from_reply=0):
    with dbconfig.Session() as session:
        reply_list = []
        post_ids = set()

        posts = session.query(Post).filter(Post.uid).order_by(
            Post.postid.desc()).limit(20).all()
        for post in posts:
            post_ids.add(post.postid)
        replys = session.query(PostReply).filter(
            PostReply.uid == BackEndEnvData.uid).order_by(
                PostReply.replyid.desc()).limit(30).all()
        for reply in replys:
            post_ids.add(reply.postid)

        if len(post_ids) == 0:
            return Res({"replys": []})

        subquery = session.query(PostReply)
        subquery = subquery.filter(
            and_(PostReply.postid.in_(list(post_ids)),
                 PostReply.replyid > from_reply))
        replys = subquery.order_by(PostReply.replyid).limit(100).all()
        for reply in replys:
            reply_list.append(reply.toJson())
        return Res({"replys": reply_list})
Example #6
0
def run(gid, pos=0, count=50):
    with dbconfig.Session() as session:
        group = session.query(Group).filter(Group.gid == gid).first()
        if group is None:
            return Res(errno=3, error="group not exist")
        if group.only_member_watch and group.creator != BackEndEnvData.uid:
            member = session.query(GroupMember).filter(
                and_(GroupMember.gid == gid,
                     GroupMember.uid == BackEndEnvData.uid)).first()
            if member is None:
                return Res(errno=2, error="only member can watch")
        if pos == 0:
            query = session.query(Post).filter(Post.group_id == gid).order_by(
                Post.postid.desc())
        else:
            query = session.query(Post).filter(
                and_(Post.group_id == gid,
                     Post.postid < pos)).order_by(Post.postid.desc())
        query = query.limit(count)
        posts = query.all()
        plist = []
        for post in posts:
            pdata = post.toJson()
            ilike_record = session.query(PostLike).filter(
                and_(PostLike.postid == post.postid,
                     PostLike.uid == BackEndEnvData.uid)).first()
            pdata['ilike'] = True if ilike_record is not None else False
            plist.append(pdata)
        return Res({'posts': plist})
Example #7
0
    def POST(self):
        imgdata = json.loads(web.data())
        with dbconfig.Session() as session:
            newpostex = datamodel.post.PostExData()
            newpostex.postid = imgdata['postid']
            fileurl = self.SITE + imgdata['hash']
            filetype = int(imgdata['filetype'])
            if filetype == 1:
                newpostex.picture = fileurl
                newpostex.width = imgdata['width']
                newpostex.height = imgdata['height']
            elif filetype == 2:
                newpostex.voice = fileurl
                newpostex.length = imgdata['length']
            elif filetype == 3:
                newpostex.video = fileurl
                newpostex.length = imgdata['length']
            newpostex = session.merge(newpostex)
            session.query(datamodel.post.Post).filter(datamodel.post.Post.postid==imgdata['postid']).\
                update({datamodel.post.Post.excount:datamodel.post.Post.excount+1})
            session.commit()

            return json.dumps(
                {
                    "errno": 0,
                    "error": "Success",
                    "result": {
                        "url": fileurl,
                        'did': newpostex.did
                    }
                },
                cls=AutoFitJson)
def RequestWork(params, body, reply_queue):
    reply = json.loads(body)
    postid = reply['postid']
    with dbconfig.Session() as session:
        to_uid = set()
        likes = session.query(PostLike).filter(PostLike.postid == postid).all()
        for a in likes:
            to_uid.add(a.uid)
        replys = session.query(PostReply).filter(
            PostReply.postid == postid).order_by(
                PostReply.replyid.desc()).limit(50).all()
        for a in replys:
            to_uid.add(a.uid)
        post = session.query(Post).filter(Post.postid == postid).first()
        to_uid.add(post.uid)
        if reply['uid'] in to_uid:
            to_uid.remove(reply['uid'])

        conns = session.query(ConnectionInfo).filter(
            ConnectionInfo.uid.in_(list(to_uid))).all()
        to_push = json.dumps({
            "push": True,
            "type": "newreply",
            "data": {
                "gid": post.group_id,
                "reply": reply
            }
        })
        for conn in conns:
            QueueWork.producer.publish(body=to_push,
                                       delivery_mode=2,
                                       headers={"connid": conn.connection_id},
                                       routing_key=conn.queue_id,
                                       compression='gzip')
Example #9
0
def run(uid,type=0):
    if isinstance(uid,list)==False:
        uid=[uid]
    uids=[]
    for u in uid:
        if u!=BackEndEnvData.uid:
            uids.append(u)
    with dbconfig.Session() as session:
        eventpost=[]
        for id in uids:
            friend=FriendList()
            friend.uid=BackEndEnvData.uid
            friend.friendid=id
            friend.type=type
            session.merge(friend)

            event=Events()
            event.touid=id
            event.param1=BackEndEnvData.uid
            event.type="add_friend"
            event=session.merge(event)
            eventpost.append(event)

        session.commit()
        for e in eventpost:
            AddEventNotify(e)
    return Res()
Example #10
0
def run(gid):
    with dbconfig.Session() as session:
        session.query(GroupMember).filter(
            and_(GroupMember.gid == gid,
                 GroupMember.uid == BackEndEnvData.uid)).delete()
        session.commit()
    return Res()
Example #11
0
 def buildpage(self, extinfo=''):
     with dbconfig.Session() as session:
         idlist = []
         for conninfo in session.query(ConnectionInfo).all():
             idlist.append(conninfo.client_id)
         tpl = WebSiteBasePage.jinja2_env.get_template('Main.html')
         return tpl.render(extinfo=extinfo, idlist=idlist)
Example #12
0
 def warp(*args, **kwargs):
     with dbconfig.Session() as session:
         cinfo = session.query(ConnectionInfo).filter(
             and_(
                 ConnectionInfo.connection_id ==
                 BackEndEnvData.connection_id, ConnectionInfo.queue_id
                 == BackEndEnvData.reply_queue)).first()
         if cinfo is None:
             return {
                 "errno": 1,
                 "error": "session.start not called",
                 "result": {}
             }
         BackEndEnvData.uid = cinfo.uid
         if level > 0:
             uinfo = session.query(User).filter(
                 User.uid == BackEndEnvData.uid).first()
             if max(uinfo.actor_level, uinfo.active_level) < level:
                 return {
                     "errno": 2,
                     "error": "level too low",
                     "result": {}
                 }
     result = func(*args, **kwargs)
     BackEndEnvData.uid = None
     return result
Example #13
0
def run(gid):
    with dbconfig.Session() as session:
        members=session.query(GroupMember).filter(GroupMember.gid==gid).order_by(GroupMember.time.desc()).all()
        memberlist=[]
        for m in members:
            memberlist.append({'uid':m.uid,"type":m.type,"time":m.time})
        return Res({'members':memberlist})
Example #14
0
def run(postid):
    with dbconfig.Session() as session:
        exdatas=session.query(PostExData).filter(PostExData.postid==postid).all()
        exlist=[]
        for e in exdatas:
            exlist.append(e.toJson())
        return Res({'exdata':exlist})
Example #15
0
def run(gid,
        name=None,
        board=None,
        type=0,
        position=None,
        everyone_caninvite=None,
        only_member_speak=None,
        only_member_watch=None):
    with dbconfig.Session() as session:
        ginfo = session.query(Group).filter(Group.gid == gid).first()
        if ginfo is None:
            return Res({}, 2, "group not exists")
        if ginfo.creator != BackEndEnvData.uid:
            return Res({}, 2, 'not creator')
        if name:
            ginfo.group_name = name
        if board:
            ginfo.group_board = board
        if type:
            ginfo.type = type
        if position:
            ginfo.group_postion = position
        if everyone_caninvite is not None:
            ginfo.everyone_caninvite = everyone_caninvite
        if only_member_speak is not None:
            ginfo.only_member_speak = only_member_speak
        if only_member_watch is not None:
            ginfo.only_member_watch = only_member_watch
        session.merge(ginfo)
        session.commit()

        return Res()
Example #16
0
 def GET(self):
     params = web.input(usepage='0')
     sessionid = params.get('sessionid', None)
     postid = params.get('postid', None)
     if sessionid is None:
         return "No Session id"
     if postid is None:
         return "No Post id"
     data = dbconfig.redisdb.get(str('session:%s' % sessionid))
     if data is None:
         return {"errno": 1, "error": "session not found", "result": {}}
     data = json.loads(data)
     with dbconfig.Session() as session:
         oldpost = session.query(datamodel.post.Post).filter(
             datamodel.post.Post.postid == postid).first()
         if oldpost is None or oldpost.uid != data['uid']:
             return "post not exists or not yours"
     policy = qiniu.rs.PutPolicy(dbconfig.qiniuSpace)
     policy.callbackUrl = 'http://%s/upload/PostExDone' % website_config.hostname
     policy.callbackBody='{"name":"$(fname)","hash":"$(etag)","width":"$(imageInfo.width)","height":"$(imageInfo.height)",' +\
                         '"length":"$(x:length)","postid":%d,"filetype":"$(x:filetype)"}'%int(postid)
     uptoken = policy.token()
     if int(params['usepage']) == 0:
         web.header("Content-type", "application/json")
         return json.dumps({'token': uptoken})
     tpl = WebSiteBasePage.jinja2_env.get_template('upload/PostEx.html')
     return tpl.render(token=uptoken)
Example #17
0
def run(uid,
        recommend_id,
        recommend_word=None,
        city=None,
        sex=None,
        sex_want=None,
        contact=None,
        age=None,
        tags=None):
    if uid != BackEndEnvData.uid and recommend_id != BackEndEnvData.uid:
        return Res(errno=2, error="can not modify")
    with dbconfig.Session() as session:
        ru = session.query(RecommendUser).filter(
            and_(RecommendUser.uid == uid,
                 RecommendUser.recommend_uid == recommend_id)).first()
        if recommend_word:
            ru.recommend_word = recommend_word
        if city:
            ru.city = city
        if sex:
            ru.sex = sex
        if sex_want:
            ru.sex_want = sex_want
        if contact:
            ru.contact = contact
        if age:
            ru.age = age
        if tags and isinstance(tags, list):
            ru.tags = '|'.join(tags)
        session.merge(ru)
        session.commit()
    return Res()
Example #18
0
def run():
    with dbconfig.Session() as session:
        gms = session.query(GroupMember).filter(
            GroupMember.uid == BackEndEnvData.uid).all()
        glist = []
        for gm in gms:
            glist.append({'gid': gm.gid, 'type': gm.type, 'time': gm.time})
        return Res({'groups': glist})
Example #19
0
def run(postid, pos=0, count=20):
    with dbconfig.Session() as session:
        replys = session.query(PostReply).filter(
            PostReply.postid == postid).offset(pos).limit(count).all()
        rplist = []
        for reply in replys:
            rplist.append(reply.toJson())
        return Res({'replys': rplist})
def RequestWork(params, body, reply_queue):
    post = json.loads(body)
    toid = post['toid']
    with dbconfig.Session() as session:
        conn = session.query(ConnectionInfo).filter(
            ConnectionInfo.uid == toid).first()
        if conn:
            to_push = json.dumps(
                {
                    "push": True,
                    "type": "newmsg",
                    "data": {
                        "message": post
                    }
                },
                ensure_ascii=False)
            QueueWork.producer.publish(body=to_push,
                                       delivery_mode=2,
                                       headers={"connid": conn.connection_id},
                                       routing_key=conn.queue_id,
                                       compression='gzip')
        else:
            iosdev = session.query(IOSDevice).filter(
                IOSDevice.uid == toid).first()
            if iosdev:
                user = session.query(User).filter(
                    User.uid == post['fromid']).first()
                allword = None
                if post.get('content', None):
                    content = post['content']
                    if content.startswith('sticker_126'):
                        allword = u"%s发了一个表情" % (user.nick)
                    else:
                        allword = u"%s:%s" % (user.nick, post['content'])
                elif post.get('picture', None):
                    allword = u"%s发了一张图片" % (user.nick)
                elif post.get('video', None):
                    allword = u"%s发了一段视频" % (user.nick)
                elif post.get('voice', None):
                    allword = u"%s发了一段音频" % (user.nick)
                elif post.get('lat', None):
                    allword = u"%s发了一个位置" % (user.nick)
                if allword:
                    if iosdev.is_debug:
                        publish_debug_exchange.publish("body",
                                                       headers={
                                                           "message":
                                                           allword,
                                                           "uhid":
                                                           iosdev.device_token
                                                       })
                    else:
                        publish_release_exchange.publish(
                            "body",
                            headers={
                                "message": allword,
                                "uhid": iosdev.device_token
                            })
Example #21
0
def run(uid, recommend_uid):
    with dbconfig.Session() as session:
        medias = session.query(RecommendMedia).filter(
            and_(RecommendMedia.uid == uid,
                 RecommendMedia.recommend_uid == recommend_uid)).all()
        mediaslist = []
        for e in medias:
            mediaslist.append(e.toJson())
        return Res({'exdata': mediaslist})
Example #22
0
def run(uid):
    if isinstance(uid, list) == False:
        uid = [uid]
    with dbconfig.Session() as session:
        session.query(FriendList).filter(
            and_(FriendList.uid == BackEndEnvData.uid,
                 FriendList.friendid.in_(uid))).delete('fetch')
        session.commit()
    return Res()
Example #23
0
def run(postid, pos=0, count=50):
    with dbconfig.Session() as session:
        lks = session.query(PostLike).filter(
            PostLike.postid == postid).order_by(
                PostLike.time.desc()).offset(pos).limit(count).all()
        lklist = []
        for lk in lks:
            lklist.append({'uid': lk.uid, 'time': lk.time})
    return Res({'users': lklist})
Example #24
0
def run(uid):
    if isinstance(uid, list) == False:
        uid = [uid]
    with dbconfig.Session() as session:
        users = session.query(User).filter(User.uid.in_(uid)).all()
        ulist = []
        for user in users:
            ulist.append(user.toJson())
    return Res({"users": ulist})
Example #25
0
def run(gid,type=1):
    with dbconfig.Session() as session:
        gmember=GroupMember()
        gmember.gid=gid
        gmember.uid=BackEndEnvData.uid
        gmember.type=type
        session.merge(gmember)
        session.commit()
    return Res()
Example #26
0
def run(gid):
    if isinstance(gid, list) == False:
        gid = [gid]
    with dbconfig.Session() as session:
        gps = session.query(Group).filter(Group.gid.in_(gid)).all()
        glist = []
        for gp in gps:
            glist.append(gp.toJson())
    return Res({"groups": glist})
Example #27
0
def run(device_token, is_debug):
    with dbconfig.Session() as session:
        device = IOSDevice()
        device.uid = BackEndEnvData.uid
        device.device_token = device_token
        device.is_debug = is_debug
        session.merge(device)
        session.commit()
    return Res()
Example #28
0
def run(long,lat):
    with dbconfig.Session() as session:
        userpos=UserGeoPosition()
        userpos.uid=BackEndEnvData.uid
        userpos.long=long
        userpos.lat=lat
        userpos.geokey=CombineGeo(long,lat)
        session.merge(userpos)
        session.commit()
    return Res()
Example #29
0
def run(gid):
    with dbconfig.Session() as session:
        group_to_del = session.query(Group).filter(Group.gid == gid).first()
        if group_to_del.creator != BackEndEnvData.uid:
            return Res(errno=2, error="group is not yours")
        session.delete(group_to_del)
        session.query(GroupMember).filter(
            GroupMember.gid == group_to_del.gid).delete()
        session.commit()
        return Res()
Example #30
0
def run(uid, recommend_uid):
    with dbconfig.Session() as session:
        ru = session.query(RecommendUser).filter(
            and_(RecommendUser.uid == uid,
                 RecommendUser.recommend_uid == recommend_uid)).first()
        return Res({
            "info":
            ru.toJson(ru.uid == BackEndEnvData.uid
                      or ru.recommend_uid == BackEndEnvData.uid)
        })