Пример #1
0
def update_friends(user_id_list):
    for user_id in user_id_list:
        user = get_user_by_id(user_id)
        for friend_id in user_id_list:
            if user.id == friend_id:
                continue
            if not is_friend_with_user(user.id, friend_id):
                user.friends.append(Friend(friend=get_user_by_id(friend_id)))
Пример #2
0
def friends(id_user=None):
    if not 'id' in session and not id_user:
        return redirect('/')
    if 'id' in session:
        user = user_model.get_user_by_id(session.get('id'))[0]
        friends = sympathys.get_sympathys_list(session.get('id'))
        incoming_requests = sympathys.get_incoming_requests(session.get('id'))
        outgoing_requests = sympathys.get_outgoing_requests(session.get('id'))
        blocked_users = sympathys.get_blocked_users(session.get('id'))

    if id_user:
        if not user_model.get_user_by_id(id_user):
            return render_template('404.html')
        if sympathys.check_block(id_user, session.get('id')):
            return redirect('/profile/id' + str(id_user))
        user = user_model.get_user_by_id(id_user)[0]
        friends = sympathys.get_sympathys_list(id_user)
        incoming_requests = None
        outgoing_requests = None
        blocked_users = None

    data = {
        'user':
        user,
        'sympathys':
        sympathys,
        'friends':
        friends,
        'get_user_by_id':
        user_model.get_user_by_id,
        'incoming_requests':
        incoming_requests,
        'outgoing_requests':
        outgoing_requests,
        'unread_messages_nbr':
        messages_model.get_unread_messages_nbr_by_user_id(session.get('id')),
        'incoming_requests_nbr':
        sympathys.get_incoming_requests_nbr(session.get('id')),
        'blocked_users':
        blocked_users,
        'check_block':
        sympathys.check_block,
        'offline_users':
        get_offline_users(),
        'online_users':
        get_online_users()
    }
    return render_template('friends.html', data=data)
Пример #3
0
def check_user_exists(user_id):
    user = get_user_by_id(user_id)

    if user is None:
        abort(400, "User does not exist")

    return user
Пример #4
0
def notifications():
    if not 'id' in session:
        return redirect('/')
    user = user_model.get_user_by_id(session.get('id'))[0]
    notifications = notification_model.get_notification_by_user_id(
        session.get('id'))
    if notifications:
        notifications = sorted(notifications,
                               key=lambda k: k['date_of_creation'],
                               reverse=True)

    data = {
        'user':
        user,
        'unread_messages_nbr':
        messages_model.get_unread_messages_nbr_by_user_id(session.get('id')),
        'incoming_requests_nbr':
        sympathys.get_incoming_requests_nbr(session.get('id')),
        'notifications':
        notifications,
        'online_users':
        get_online_users(),
        'get_user_by_id':
        user_model.get_user_by_id,
    }
    return render_template('notifications.html', data=data)
Пример #5
0
def _validate_bill(data):
    amounts_sum = 0
    creditor_ids_in_group = []
    debtor_ids_in_group = []

    for member in data["members"]:
        user = check_user_exists(member["user_id"])
        amount = member["amount"]
        amounts_sum += amount

        if amount > 0:
            if user.id in creditor_ids_in_group:
                abort(400,
                      "User {} can only be one time a creditor".format(user.id))
            creditor_ids_in_group.append(user.id)
        else:
            if user.id in debtor_ids_in_group:
                abort(400,
                      "User {} can only be one time a debtor".format(user.id))
            debtor_ids_in_group.append(user.id)

    if amounts_sum != 0:
        abort(400, "Sum of amounts must be zero")

    if "group_id" in data:
        group = check_group_exists(data["group_id"])
        for member in data["members"]:
            check_user_is_member_of_group(
                get_user_by_id(member["user_id"]), group)
Пример #6
0
def suggestions():
    if not 'id' in session:
        return redirect('/')
    user = user_model.get_user_by_id(session.get('id'))[0]
    selected = get_suggestions_for_user(user)
    suggestions = []
    for suggestion in selected:
        correct = True
        if sympathys.check_block(suggestion['id'], session.get('id')):
            correct = False
        geolocation = geolocation_model.get_geolocation_by_user_id(
            suggestion['id'])
        if geolocation:
            suggestion['latitude'] = float(geolocation['latitude'])
            suggestion['longitude'] = float(geolocation['longitude'])
        else:
            suggestion['latitude'] = None
            suggestion['longitude'] = None
        suggestion['distance'] = calculate_distance(suggestion['latitude'],
                                                    suggestion['longitude'])
        if suggestion['distance'] is None:
            correct = False
        my_interests = user_model.get_interests_by_user_id(session.get('id'))
        suggestion['interests_nbr'] = 0
        if my_interests:
            interests = user_model.get_interests_by_user_id(suggestion['id'])
            if interests:
                my_tags = []
                for my_interest in my_interests:
                    my_tags.append(my_interest['title'])
                for interest in interests:
                    if interest['title'] in my_tags:
                        suggestion['interests_nbr'] += 1
        if correct:
            suggestions.append(suggestion)
        suggestions = sorted(suggestions, key=lambda k: k['distance'])
        suggestions = sorted(suggestions,
                             key=lambda k: k['interests_nbr'],
                             reverse=True)
        suggestions = sorted(suggestions,
                             key=lambda k: k['fame_rating'],
                             reverse=True)
    data = {
        'user':
        user,
        'suggestions':
        suggestions,
        'unread_messages_nbr':
        messages_model.get_unread_messages_nbr_by_user_id(session.get('id')),
        'incoming_requests_nbr':
        sympathys.get_incoming_requests_nbr(session.get('id')),
        'friends':
        sympathys.get_sympathys_list(session.get('id')),
        'online_users':
        get_online_users()
    }
    return render_template('suggestions.html', data=data)
Пример #7
0
def messages(with_id=None):
    if 'id' in session:
        dialogue_id = None
        if with_id:
            if not user_model.get_user_by_id(with_id):
                return render_template('404.html')
            my_id = session.get('id')
            if sympathys_model.check_sympathy(my_id, with_id):
                if not messages_model.check_dialogue(my_id, with_id):
                    dialogue_name = my_id + with_id
                    if messages_model.create_dialogue(dialogue_name, my_id,
                                                      with_id):
                        dialogue_id = messages_model.get_dialogue_id(
                            my_id, with_id)
                else:
                    dialogue_id = messages_model.get_dialogue_id(
                        my_id, with_id)
            else:
                return redirect('/profile/id' + str(with_id))
        data = {
            'user':
            user_model.get_user_by_id(session.get('id'))[0],
            'get_user_by_id':
            user_model.get_user_by_id,
            'dialogues':
            messages_model.get_dialogues_by_user_id(session.get('id')),
            'messages':
            messages_model.get_messages_by_dialogue_id,
            'get_last_message_by_dialogue_id':
            messages_model.get_last_message_by_dialogue_id,
            'get_unread_messages_nbr':
            messages_model.get_unread_messages_nbr,
            'unread_messages_nbr':
            messages_model.get_unread_messages_nbr_by_user_id(
                session.get('id')),
            'dialogue_id':
            dialogue_id,
            'incoming_requests_nbr':
            sympathys_model.get_incoming_requests_nbr(session.get('id')),
            'online_users':
            get_online_users()
        }
        return render_template('messages.html', data=data)
    return redirect('/')
Пример #8
0
def photos(id_user=None):
    if not 'id' in session and not id_user:
        return redirect('/')
    if 'id' in session:
        id = session.get('id')
        user = user_model.get_user_by_id(id)[0]
        photos = photos_model.get_photos_by_id(id)

    if id_user:
        if not user_model.get_user_by_id(id_user):
            return render_template('404.html')
        if sympathys.check_block(id_user, session.get('id')):
            return redirect('/profile/id' + str(id_user))
        user = user_model.get_user_by_id(id_user)[0]
        photos = photos_model.get_photos_by_id(id_user)

    data = {
        'user':
        user,
        'photos':
        photos,
        'get_user_by_id':
        user_model.get_user_by_id,
        'get_avatar':
        user_model.get_avatar,
        'likes':
        likes.photo_likes,
        'dislikes':
        likes.photo_dislikes,
        'check_like':
        likes.check_like,
        'check_dislike':
        likes.check_dislike,
        'get_comments_by_photo_id':
        comments.get_comments_by_photo_id,
        'unread_messages_nbr':
        messages_model.get_unread_messages_nbr_by_user_id(session.get('id')),
        'incoming_requests_nbr':
        sympathys.get_incoming_requests_nbr(session.get('id')),
        'online_users':
        get_online_users()
    }

    return render_template('photos.html', data=data)
Пример #9
0
def test_dont_get_unknown_user_by_id(app):
    u = User(first_name="Max",
             last_name="Muster",
             email="*****@*****.**",
             password="******")

    u = insert_user(u)

    u_from_db = get_user_by_id(0)

    assert u_from_db is None
Пример #10
0
    def get(self, user_id):
        _is_user_allowed_to_access(user_id)

        user = get_user_by_id(user_id)

        result = {
            "message": "Returned user",
            "user": user.to_dict()
        }

        return result, 200
Пример #11
0
def ajax_edit_basic():
    firstname = html.escape(request.form['firstname'])
    lastname = html.escape(request.form['lastname'])
    email = html.escape(request.form['email'])
    city = request.form['city']
    country = request.form['country']
    gender = request.form['gender']
    sex_pref = request.form['sex_pref']
    information = html.escape(request.form['information'])

    id = session.get('id')
    user = user_model.get_user_by_id(id)[0]
    if not gender:
        gender = user['gender']
    if not sex_pref:
        sex_pref = user['sex_pref']
    if not email:
        email = user['email']
    if not city:
        city = user['city']
    if not country:
        country = user['country']

    if (len(firstname) < 2) or (len(firstname) > 25):
        return json.dumps({
            'ok': False,
            'error': "Firstname length must be from 2 characters to 25",
            'fields': ["firstname"]
        })

    if (len(lastname) < 2) or (len(lastname) > 25):
        return json.dumps({
            'ok': False,
            'error': "Lastname length must be from 2 characters to 25",
            'fields': ["lastname"]
        })

    if not re.match(
            "^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$",
            email.lower()):
        return json.dumps({
            'ok': False,
            'error': "Wrong email",
            'fields': ["email"]
        })
    res = user_model.change_basic(id, firstname, lastname, email, city,
                                  country, gender, sex_pref)
    if information:
        res1 = user_model.change_information(information, id)

    if not res and not res1:
        return json.dumps({'ok': True, 'error': "Changes successfully saved"})
    else:
        return json.dumps({'ok': False, 'error': "Something went wrong"})
Пример #12
0
def ajax_edit_avatar():
    avatar = request.files.get('avatar')

    if not avatar:
        return json.dumps({
            'ok': False,
            'error': "Not avatar",
            'fields': ["avatar"]
        })
    id = session.get('id')
    login = session.get('login')
    user = user_model.get_user_by_id(id)[0]

    extension = avatar.filename.rsplit('.', 1)[1]
    avatar_name = str('avatar' + '_' + login + '.' + extension)
    path = '/static/media/' + login + '/' + avatar_name

    # CHECK IF AVATAR LOADED EARLIER EXISTS
    avatar_extension = user['avatar'].rsplit('.', 1)[1]
    name = (APP_ROOT + '/static/media/' + login + '/avatar_' + login + '.' +
            avatar_extension).strip()

    # DELETE IF EXISTS
    if os.path.isfile(name):
        os.remove(name)
        user_model.delete_avatar_from_db(avatar_name, id)
    else:
        rating = user['fame_rating'] + 42
        user_model.update_user_rating(rating, id)

    # SAVE AVATAR TO FOLDER
    try:
        photos.save(avatar, login, avatar_name)
    except UploadNotAllowed:
        return json.dumps({
            'ok': False,
            'error': "Extension not allowed",
            'fields': ["avatar"]
        })
    # photos.save(avatar, login, avatar_name)

    # CHANGE AVATAR IN DB
    if not user_model.change_avatar(path, id):
        return json.dumps({
            'ok': True,
            'error': 'Avatar successfully uploaded',
        })
    else:
        return json.dumps({
            'ok': False,
            'error': "Something wrong",
            'fields': ["avatar"]
        })
Пример #13
0
def search():
    if not 'id' in session:
        return redirect('/')
    data = {
        'user':
        user_model.get_user_by_id(session.get('id'))[0],
        'unread_messages_nbr':
        messages_model.get_unread_messages_nbr_by_user_id(session.get('id')),
        'incoming_requests_nbr':
        sympathys.get_incoming_requests_nbr(session.get('id')),
        'get_user_by_id':
        user_model.get_user_by_id,
        'online_users':
        get_online_users()
    }
    return render_template('search.html', data=data)
Пример #14
0
def edit_avatar():
    if 'id' in session:
        data = {
            'user':
            user_model.get_user_by_id(session.get('id'))[0],
            'unread_messages_nbr':
            messages_model.get_unread_messages_nbr_by_user_id(
                session.get('id')),
            'incoming_requests_nbr':
            sympathys.get_incoming_requests_nbr(session.get('id')),
            'friends':
            sympathys.get_sympathys_list(session.get('id'))
        }
        return render_template('edit-profile-avatar.html', data=data)
    else:
        return redirect('/')
Пример #15
0
def newsfeed():
    if 'id' in session:
        my_id = session.get('id')
        friends = sympathys.get_sympathys_list(my_id)
        photos = []
        if friends:
            for friend in friends:
                if friend['id_user1'] == my_id:
                    photos = photos_model.get_photos_by_id(friend['id_user2'])
                else:
                    photos = photos_model.get_photos_by_id(friend['id_user1'])
            if photos:
                photos = sorted(photos,
                                key=lambda k: k['date_added'],
                                reverse=True)
        data = {
            'user':
            user_model.get_user_by_id(my_id)[0],
            'get_user_by_id':
            user_model.get_user_by_id,
            'get_avatar':
            user_model.get_avatar,
            'unread_messages_nbr':
            messages_model.get_unread_messages_nbr_by_user_id(my_id),
            'incoming_requests_nbr':
            sympathys.get_incoming_requests_nbr(my_id),
            'check_like':
            likes.check_like,
            'check_dislike':
            likes.check_dislike,
            'photos':
            photos,
            'likes':
            likes.photo_likes,
            'dislikes':
            likes.photo_dislikes,
            'get_comments_by_photo_id':
            comments.get_comments_by_photo_id,
            'online_users':
            get_online_users(),
            'friends':
            sympathys.get_sympathys_list(session.get('id')),
        }
        return render_template('newsfeed.html', data=data)
    return redirect('/')
Пример #16
0
def _create_new_bill(data):
    bill = Bill(description=data["description"],
                date=data.get("date", None),
                date_created=data.get("date_created", None))

    for member in data["members"]:
        user = get_user_by_id(member["user_id"])
        bill_member = BillMember(user=user,
                                 bill=bill,
                                 amount=member["amount"])
        bill.members.append(bill_member)

    if "group_id" in data:
        bill.group = get_group_by_id(data["group_id"])

    insert_bill(bill)

    return bill
Пример #17
0
def _get_user_from_member_data(member_data):
    if "email" in member_data:
        email = member_data["email"]
        user = get_user_by_email(email)

        if not user:
            # Create user
            user = insert_user(User(email=email))
            return user

        return user

    id = member_data["id"]
    user = get_user_by_id(id)

    if not user:
        abort(400, "User with id {} does not exist".format(id))

    return user
Пример #18
0
def send_message(data):

    from_whom_id = data['from_whom_id']
    to_whom_id = data['to_whom_id']
    dialogue = id_dialogue_to_sid.get(request.sid)
    if not dialogue:
        dialogue = messages_model.get_dialogue_id(from_whom_id, to_whom_id)
    message = html.escape(data['message'])
    data['message'] = message
    user = user_model.get_user_by_id(from_whom_id)[0]
    data['user'] = user
    data['dialogue'] = dialogue
    data['my_id'] = session.get('id')
    if messages_model.send_message(dialogue, from_whom_id, to_whom_id,
                                   message):
        emit('add_message_to_template', data, room=dialogue)
    if not check_online_status(to_whom_id):
        notifications_view.add_notification(
            from_whom_id, to_whom_id, 'You have a new message from ' +
            user['firstname'] + ' ' + user['lastname'], 'message',
            user['avatar'])
Пример #19
0
def profile(id_user=None):
    if not 'id' in session:
        return redirect('/')
    if 'id' in session:
        my_id = session.get('id')
        user = user_model.get_user_by_id(my_id)[0]
        friends = sympathys.get_sympathys_list(my_id)
        information = user_model.get_information(my_id)
        interests = user_model.get_interests_by_user_id(my_id)
        education = user_model.get_education_by_user_id(my_id)
        work = user_model.get_work_by_user_id(my_id)
        geolocation = geolocation_model.get_geolocation_by_user_id(my_id)

    if id_user:
        if not user_model.get_user_by_id(id_user):
            return render_template('404.html')
        user = user_model.get_user_by_id(id_user)[0]
        friends = sympathys.get_sympathys_list(id_user)
        information = user_model.get_information(id_user)
        interests = user_model.get_interests_by_user_id(id_user)
        education = user_model.get_education_by_user_id(id_user)
        work = user_model.get_work_by_user_id(id_user)
        geolocation = geolocation_model.get_geolocation_by_user_id(id_user)

        if id_user != session.get('id'):
            msg = str(session.get('firstname')) + ' ' + str(
                session.get('lastname')) + ' viewed your profile.'
            image = user_model.get_avatar(session.get('id'))
            notification_view.add_notification(session.get('id'), id_user, msg,
                                               'view', image)

    user['age'] = date.today().year - datetime.strptime(
        user['birth_date'], '%Y-%m-%d %H:%M:%S').year

    data = {
        'user':
        user,
        'friends':
        friends,
        'sympathys':
        sympathys,
        'information':
        information,
        'interests':
        interests,
        'education':
        education,
        'work':
        work,
        'geolocation':
        geolocation,
        'unread_messages_nbr':
        messages_model.get_unread_messages_nbr_by_user_id(session.get('id')),
        'incoming_requests_nbr':
        sympathys.get_incoming_requests_nbr(session.get('id')),
        'check_block':
        sympathys.check_block,
        'offline_users':
        get_offline_users(),
        'online_users':
        get_online_users()
    }
    return render_template('profile.html', data=data)
Пример #20
0
def ajax_edit_password():
    if 'id' in session:
        my_password = html.escape(request.form['my_password'])
        new_password = html.escape(request.form['new_password'])
        confirm_password = html.escape(request.form['confirm_password'])
        if not my_password:
            return json.dumps({
                'ok': False,
                'error': "Enter your password please",
                'fields': ["my_password"]
            })

        if not new_password:
            return json.dumps({
                'ok': False,
                'error': "Enter your new password please",
                'fields': ["my_password"]
            })

        if not confirm_password:
            return json.dumps({
                'ok': False,
                'error': "Enter new password again please",
                'fields': ["confirm_password"]
            })

        user = user_model.get_user_by_id(session.get('id'))[0]
        my_password_hash = hashlib.sha3_512(
            my_password.encode('utf-8')).hexdigest()
        if my_password_hash == user['password']:
            if new_password == confirm_password:
                if len(new_password) < 2 or len(new_password) > 25:
                    return json.dumps({
                        'ok': False,
                        'error':
                        "Password length must be from 8 characters to 16",
                        'fields': ["new_password"]
                    })

                if re.search("[a-zA-Z]+", new_password) is None or re.search(
                        "[0-9]+", new_password) is None:
                    return json.dumps({
                        'ok': False,
                        'error': "Password is too weak",
                        'fields': ["new_password"]
                    })
                new_password_hash = hashlib.sha3_512(
                    new_password.encode('utf-8')).hexdigest()
                user_model.change_password(session.get('id'),
                                           new_password_hash)
                return json.dumps({
                    'ok': True,
                    'error': "Your password successfully changed"
                })
            else:
                return json.dumps({
                    'ok':
                    False,
                    'error':
                    "Passwords don't match",
                    'fields': ["new_password", "confirm_password"]
                })
        else:
            return json.dumps({
                'ok': False,
                'error': "You entered wrong password",
                'fields': ["my_password"]
            })
    else:
        return redirect('/')