示例#1
0
 def delete(self):
     user = g.user
     if Room.query.filter_by(master_id=user.id).first() is not None:
         return api_abort('400', 'you are the master of the room')
     data = user_schema(user)
     os.remove('chatroom/static/avatars/user/{}.png'.format(user.id))
     db.session.delete(user)
     db.session.commit()
     return make_resp(data)
示例#2
0
def auth_required():
    if request.method == 'OPTIONS':
        resp = make_response("ok")
        resp.status_code = 200
        return resp
    if 'Token' not in request.headers:
        return api_abort(401, 'Token missing.')
    token = request.headers['Token']
    if not validate_token(token):
        raise InvalidTokenError
示例#3
0
def search():
    q = request.args.get('q', None)
    rid = request.args.get('rid', None)
    if q is None or rid is None:
        return api_abort(400, 'parm missing')
    room = Room.query.get_or_404(rid)
    if g.user not in room.users:
        raise PermissionDenied
    messages = Message.query.filter_by(room_id=rid).whooshee_search(q).all()
    if messages is None:
        return "None"
    return make_resp(messages_schema(messages))
示例#4
0
 def post(self):
     data = room_post_reqparse.parse_args()
     if Room.query.filter_by(name=data['name']).first() is not None:
         return api_abort(400, "room's name already exit")
     room = Room.create_room(data['name'], data['introduce'], data['key'], data['topic'])
     if 'avatar' in request.files:
         f = request.files['avatar']
         file = open('chatroom/static/avatars/room/{}.png'.format(room.id), 'wb')
         file.close()
         f.save('chatroom/static/avatars/room/{}.png'.format(room.id))
     resp = make_resp(room_schema(room))
     return resp
示例#5
0
    def put(self):
        user = g.user
        data = user_put_reqparse.parse_args()

        if data['phone'] is not None:
            user.phone = data['phone']
        if data['email'] is not None:
            user.phone = data['email']
        if data['country'] is not None:
            user.phone = data['country']
        if data['area'] is not None:
            user.phone = data['area']
        if data['username'] is not None:
            if user.username != data['username']:
                check_name('user', data['username'])
            user.username = data['username']
        if data['action'] is not None:
            action = data['action']

            if action == 'join':
                key = data['key']
                name = data['name']
                room = user.join_room(key, name)
                if room is None:
                    raise InvalidAccessKey
            elif action == 'leave':
                room = Room.query.get(data['room_id'])
                if user.is_master(room):
                    return api_abort(400, "the master can't leave the room")
                if room not in user.rooms:
                    return api_abort(400, "user are not in room")
                user.rooms.remove(room)
            else:
                return api_abort(400, "unknown parm")

            db.session.commit()
            return make_resp(room_schema(room))

        db.session.commit()
        return make_resp(user_schema(user))
示例#6
0
    def post(self, rid_or_name):
        room = get_room(rid_or_name)
        if g.user not in room.users:
            raise PermissionDenied
        data = message_post_reqparse.parse_args()
        new_message = g.user.send_message(data['type'], data['content'], room)

        if data['type'] != 'text':
            f = request.files['file']
            if not allowed_file(f.filename):
                return api_abort(400, 'invalid filename')
            filename = secure_filename(f.filename[0:-1])
            if new_message.content != filename:
                new_message.content = filename
                db.session.commit()
            f.save('chatroom/static/{}/{}'.format(data['type'], str(new_message.id)+'_'+filename))

        return make_resp(message_schema(new_message))