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)))
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)
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
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)
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)
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)
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('/')
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)
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
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
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"})
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"] })
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)
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('/')
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('/')
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
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
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'])
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)
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('/')