示例#1
0
def username_available(username, user, session):

    users = User.find_username(username)
    groups = Group.find_username(username)

    available = not users and not groups
    return response({'username': username, 'available': available})
示例#2
0
def find_group(username, user, session):

    group = Group.find(username=username)
    if not group:
        abort(404)

    return response({'group': group.make_json()})
示例#3
0
def logout(user, session):
    """
    logout and delete a previous session token
    """

    session.delete()
    return response({'logged_out': True})
示例#4
0
def block_user(username, user, session):

    target = User.find(username=username)
    if not user:
        abort(404)

    user.block(target)
    return response({'blocked': True})
示例#5
0
def join_group(username, user, session):

    group = Group.find(username=username)
    if not group:
        abort(404)

    group.add_user(user)
    ChatController.user_joined_group(group, user)
    return response({'joined': True, 'group': group.make_json()})
示例#6
0
def search_username(username, user, session):

    users = User.find_username(username)
    groups = Group.find_username(username)

    return response({
        'groups': [group.make_json(include_members=False) for group in groups],
        'users': [user.make_json() for user in users]
    })
示例#7
0
def send_message(user, session):

    json = request.json
    schema = Schema({'to': str, 'text': str})
    try:
        schema.validate(json)
    except SchemaError as err:
        return response(err.code)

    to = json['to']
    text = json['text']

    try:
        ChatController.new_msg(user.id, to, text)
    except Exception as err:
        return error_response(str(err))

    return response({'sent': True})
示例#8
0
def create_group(user, session):

    json = request.json
    schema = Schema({'title': str, 'username': str})
    try:
        schema.validate(json)
    except SchemaError as err:
        return response(err.code)

    title = json['title']
    username = json['username']

    users = User.find_username(username)
    groups = Group.find_username(username)
    if users or groups:
        return error_response('username has been already taken')

    group = Group.new(user.id, title, username)
    return response({'group': group.make_json()})
示例#9
0
def friend_user(username, user, session):

    friend = User.find(username=username)
    if not user:
        abort(404)

    if friend.is_blocked(user):
        return error_response('you have been blocked by user')

    user.friend(friend)
    return response({'added': True, 'friend': friend.make_json()})
示例#10
0
def unblock_user(username, user, session):

    target = User.find(username=username)
    if not user:
        abort(404)

    if not user.is_blocked(target):
        return error_response('user is not blocked')

    user.unblock(target)
    return response({'unblocked': True})
示例#11
0
def unfriend_user(username, user, session):

    friend = User.find(username=username)
    if not user:
        abort(404)

    if not user.is_friends(friend):
        return error_response('user is not a friend')

    user.unfriend(friend)
    return response({'unfriended': True})
示例#12
0
def leave_group(username, user, session):

    group = Group.find(username=username)
    if not group:
        abort(404)

    if not group.has_user(user):
        return error_response('you are not a member of this group')

    group.remove_user(user)
    ChatController.user_left_group(group, user)
    return response({'joined': True, 'group': group.make_json()})
示例#13
0
def register():
    """
    verify user's phone number and
    authenticate with a new token
    :return:
    """

    json = request.json
    schema = Schema(
        {
            "first_name": str,
            "username": str,
            "token": str,
            "phone": str,
            Optional('last_name'): str
        },
        ignore_extra_keys=True)
    try:
        schema.validate(request.json)
    except SchemaError as err:
        return response(err.code)

    last_name = None
    if 'last_name' in json:
        last_name = json['last_name']

    first_name = json['first_name']
    username = json['username']
    token = json['token']
    phone = json['phone']

    if User.find(username=username):
        return error_response("username already exists")

    if not TextAPI.verify_auth(phone, token):
        return error_response('invalid phone authentication')

    user = User.new(first_name, last_name, username, phone)
    session = Session.new(user.id)
    return response({'user': user.make_json(), 'session': session.make_json()})
示例#14
0
def login():
    """
    verify user's phone number and login
    the user
    """
    json = request.json
    schema = Schema({"token": str, "phone": str}, ignore_extra_keys=True)
    try:
        schema.validate(request.json)
    except SchemaError as err:
        return response(err.code)

    token = json['token']
    phone = json['phone']

    if not TextAPI.verify_auth(phone, token):
        return error_response('invalid phone authentication')

    user = User.find(phone_num=phone)
    if not user:
        return error_response('user is not registered')

    session = Session.new(user.id)
    return response({'user': user.make_json(), 'session': session.make_json()})
示例#15
0
def get_my_account(user, session):
    return response({'user': user.make_json(True, True)})
示例#16
0
def get_my_groups(user, session):

    groups = Group.objects.filter(members=user.id)
    return response({'groups': [group.make_json() for group in groups]})
示例#17
0
def find_user(username, user, session):

    user = User.find(username=username)
    if not user:
        abort(404)
    return response({'user': user.make_json()})
示例#18
0
def get_my_updates(user, session):

    messages = Message.objects.filter(recipient_id=user.id)
    messages_data = [message.make_json() for message in messages]
    [message.delete() for message in messages]
    return response({'messages': messages_data})
示例#19
0
def get_my_friends(user, session):

    users = User.objects.filter(id__in=user.friends)
    return response({'friends': [user.make_json() for user in users]})
示例#20
0
def get_my_blocked(user, session):

    users = User.objects.filter(id__in=user.blocked)
    return response({'blocked': [user.make_json() for user in users]})