def validate_lib_login_form(form): user = query_db("SELECT * FROM users WHERE email=?", (form.email.data, ), False, True) if user: check_password = bcrypt.check_password_hash(user['password'], form.password.data) if check_password: if user['verified']: set_session_values(user) query_db("UPDATE users SET last_online=? WHERE username=?", ("Online", user['username']), True) flash(f"Welcome {user['username']}, you are logged in!", 'success') else: flash( 'You have not yet verified your email, please verify to continue', 'danger') return redirect(url_for('login')) return redirect(url_for('home')) else: flash("Password Incorrect", 'danger') return redirect(url_for('login')) else: flash("That email does not exist, please try another", 'danger') return redirect(url_for('login'))
def validate_lib_signup_form(form): valid = True username = query_db("SELECT * FROM users WHERE username = ?", (form.username.data, )) email = query_db("SELECT * FROM users WHERE email = ?", (form.email.data, )) if username: flash("That username is already in use, please choose another one.", 'danger') return False if not form.firstname.data or not form.lastname.data: flash("Please provide a first and last name", 'danger') return False if email: flash("That email is already in in use, plese choose another one.", 'danger') return False if not re.search("@", form.email.data): flash("Please us a valid email address, with a '@' symbol.", 'danger') return False if not valid_password(form.password.data): flash( "Password is Invlaid please use a password between 6 and 15 character with at least one number, special character, one uppler case letter and on lower case letter with no spaces", 'danger') return False if not form.password.data == form.pswd_confirm.data: flash("Password and Confirm password do not match", 'danger') return False if valid: set_session_values(form) return valid
def validate_lib_logout_user(): mydate = datetime.now() formateddate = mydate.strftime("%d-%m-%Y\n%H:%M:%S") query_db("UPDATE users SET last_online=? WHERE username=?", (formateddate, session['username']), True) session.pop('username', None) session.pop('logged_in', None) return redirect(url_for('splash'))
def set_new_password(form): hashed_password = bcrypt.generate_password_hash( form.password.data).decode('utf-8') query_db("UPDATE users SET password=? WHERE email=?", ( hashed_password, form.email.data, ), True) flash("Password has been updated", 'success')
def user_lib_create_user(form): hashed_password = bcrypt.generate_password_hash( form.password.data).decode('utf-8') query_db( "INSERT INTO users (username, email, password, verified, firstname, lastname) VALUES (?,?,?,?,?,?)", (form.username.data, form.email.data, hashed_password, False, form.firstname.data, form.lastname.data), True)
def interest_suggestions(user_interests): suggestions = [] interest_profiles = query_db("SELECT * FROM interests WHERE NOT username=?", (session['username'],)) for user_interest in user_interests: for interest in interest_profiles: if parse_interest(user_interest, interest): user = query_db("SELECT * FROM users WHERE username=?", (interest['username'],)) for v in user: suggestions.append(v) return suggestions
def fame_suggestions(user): fame = user['fame'] suggestions = query_db("SELECT * FROM users WHERE fame>=? AND NOT username=? AND NOT username=?", (fame, session['username'], 'Admin')) return suggestions
def user_lib_block_user(username): already_blocked = query_db( "SELECT * FROM blocked_accounts WHERE user_blocking=? AND blocked_user=?", (session['username'], username)) if not already_blocked: flash('Block request has been sent to admin for review', 'success') common_lib_log_history_moment( 'block request', session['username'], username, 'You have submitted a request to block ' + username) query_db( "INSERT INTO blocked_accounts (user_blocking, blocked_user) VALUES (?,?)", (session['username'], username), True) else: flash( 'You have already submitted a blocking request, please wait for admin to review your request', 'danger')
def user_lib_fake_user(username): already_reported_fake = query_db( "SELECT * FROM fake_accounts WHERE user_reporting=? AND fake_user=?", (session['username'], username)) if not already_reported_fake: flash('User Account has been reported as fake', 'success') common_lib_log_history_moment( 'fake report', session['username'], username, 'You have reported ' + username + ' as a fake account') query_db( "INSERT INTO fake_accounts (user_reporting, fake_user) VALUES (?,?)", (session['username'], username), True) else: flash('You have already reported this user as fake', 'danger')
def check_if_users_match(username): user_1 = query_db("SELECT * FROM likes WHERE user_liking=? and user_liked=?", (session['username'], username)) user_2 = query_db("SELECT * FROM likes WHERE user_liking=? and user_liked=?", (username, session['username'])) match_check = query_db("SELECT * FROM matches WHERE (user_1=? AND user_2=?) OR (user_1=? AND user_2=?)", (session['username'], username, username, session['username'])) if user_1 and user_2 and not match_check: flash("You and " + username + " have matched! You can now chat.", 'success') common_lib_log_history_moment('match', session['username'], username, 'You matched with ' + username + '<3') if not common_lib_check_if_blocked(username): common_lib_log_history_moment('match', username, session['username'], session['username'] + ' matched with you! <3') query_db("INSERT INTO matches (user_1, user_2) VALUES (?,?)", (session['username'], username), True) query_db("UPDATE users SET matches=matches+1 WHERE username=?", (session['username'],), True) query_db("UPDATE users SET matches=matches+1 WHERE username=?", (username,), True)
def common_lib_filter_blocked_accounts(sexuals): blocked_accounts = query_db("SELECT * FROM blocked_accounts WHERE user_blocking=?", (session['username'],)) blocked_names_list = [] for sexual in sexuals: for blocked_account in blocked_accounts: if sexual['username'] == blocked_account['blocked_user']: blocked_names_list.append(blocked_account['blocked_user']) return blocked_names_list
def wink(username): already_liked = query_db( "SELECT * FROM likes WHERE user_liking=? AND user_liked=?", (session['username'], username), False, True) if already_liked: flash( "Hey! You have already winked at this person , wait for then to wink back at you.", 'danger') return redirect(url_for('profile_view', username=username)) else: return user_lib_create_wink(username)
def validate_lib_handle_picture_upload(request): if request.files: if 'image' in request.files: image = request.files['image'] if image.filename != '': try: image.filename = re.sub(r" ?\([^)]+\)", "", image.filename) photos.save(image) flash('File uploaded', 'success') query_db( "INSERT INTO images (username, file_name) VALUES (?,?)", (session['username'], image.filename), True) query_db( "UPDATE users SET pics = pics + 1 WHERE username=?", (session['username'], ), True) except UploadNotAllowed: flash('Invalid file upload format', 'danger') return False else: flash('Uploaded file has an invalid file name', 'danger') return False
def get_profile_data(username): profile_data = {} user_profile = query_db( "SELECT * FROM users WHERE username=? AND user_type='regular'", (username, ), False, True) interests = query_db("SELECT * FROM interests WHERE username=?", (username, ), False, True) matched = query_db( "SELECT * from matches WHERE (user_1=? AND user_2=?) OR (user_1=? AND user_2=?)", (username, session['username'], session['username'], username), False, True) pictures = query_db("SELECT * FROM images WHERE username=?", (username, )) winked = query_db( "SELECT * FROM likes WHERE (user_liking=? AND user_liked=?)", (session['username'], username)) session_user = query_db("SELECT * FROM users WHERE username=?", (session['username'], ), False, True) interest_list = [] if 'id' in interests: interests.pop('id') if interests: for key, value in interests.items(): if value == 1: interest_list.append(key) profile_data = { 'session_user': session_user, 'user_profile': user_profile, 'interest_list': interest_list, 'pictures': pictures, 'matched': matched, 'winked': winked } return profile_data
def check_valid_email(email): if not re.search("@", email): flash("Please use a valid email address, with a '@' symbol.", 'danger') return False elif not query_db("SELECT * FROM users WHERE email=?", (email, ), False, True): flash( "A user with that email address does not exist, please try again.", 'danger') return False else: return True
def sexual_suggestions(user): sex = user['sex_orientation'] gender_filter = 'All' if sex == 'Homosexual': sex_filter = 'Homosexual' if user['gender'] == 'Male': gender_filter = 'Male' elif user['gender'] == 'Female': gender_filter = 'Female' if gender_filter == 'All': suggestions = query_db("SELECT * FROM users WHERE sex_orientation=? AND NOT username=?", (sex_filter, session['username'])) else: suggestions = query_db("SELECT * FROM users WHERE gender=? AND sex_orientation=? AND NOT username=?", (gender_filter, sex_filter, session['username'])) elif sex == 'Heterosexual': sex_filter = 'Heterosexual' if user['gender'] == 'Male': gender_filter = 'Female' elif user['gender'] == 'Female': gender_filter = 'Male' if gender_filter == 'All': suggestions = query_db("SELECT * FROM users WHERE sex_orientation=? AND NOT username=?", (sex_filter, session['username'])) else: suggestions = query_db("SELECT * FROM users WHERE gender=? AND sex_orientation=? AND NOT username=?", (gender_filter, sex_filter, session['username'])) else: suggestions = query_db("SELECT * FROM users WHERE NOT username=? AND NOT username=?", (session['username'], 'Admin')) return suggestions
def browsing_lib_get_suggested_user_profiles(user): interests = query_db("SELECT * FROM interests WHERE username=?", (user['username'],)) interest_profiles = interest_suggestions(interests) sex_profiles = sexual_suggestions(user) fame_profiles = fame_suggestions(user) all_profiles = all_suggestions(sex_profiles, fame_profiles, interest_profiles) return all_profiles, sex_profiles, fame_profiles, interest_profiles
def user_lib_create_wink(username): query_db("INSERT INTO likes (user_liking, user_liked) VALUES (?,?)", (session['username'], username), True) flash("You have winked at " + username, 'success') common_lib_log_history_moment('wink', session['username'], username, 'You winked at ' + username) if not common_lib_check_if_blocked(username): common_lib_log_history_moment('wink', username, session['username'], session['username'] + ' winked at you!') query_db("UPDATE users SET likes=likes+1 WHERE username=?", (username,), True) check_if_users_match(username) query_db("UPDATE users SET fame = ((likes + matches + 1) * 100) WHERE username=?", (username,), True) query_db("UPDATE users SET fame = ((likes + matches + 1) * 100) WHERE username=?", (session['username'],), True) return redirect(url_for('profile_view', username=username))
def validate_lib_email_verification(token): username = decode_token(token) check = query_db("SELECT * FROM users WHERE username=?", (username, ), False, True) if check: update_verified(username) flash("Email verified! Please login to continue.", 'success') return redirect(url_for('login')) else: flash( "There seems to be an error with your token, would you like s to resend the token?", 'danger') return render_template("verification.html")
def admin_lib_validate_login(form): user = query_db("SELECT * FROM users WHERE email=? AND user_type='admin'", (form.email.data, ), False, True) if user: check_password = bcrypt.check_password_hash(user['password'], form.password.data) if check_password: set_session_values(user) flash( f"Welcome {user['username']}, you are logged into the Admin Portal!", 'success') return redirect(url_for('admin')) else: flash("Password Incorrect", 'danger') return redirect(url_for('admin_login')) else: flash("Invalid Admin Login Details", 'danger') return redirect(url_for('admin_login'))
def user_lib_get_pictures(username): pictures = query_db("SELECT * FROM images WHERE username=?", (username,)) return pictures
def validate_lib_update_profile_picture(filename): query_db("UPDATE users SET profile_pic=? WHERE username=?", (filename, session['username']), True) flash("Profile Picture Updated, You can now like other users profiles!", 'success')
def common_lib_check_if_blocked(username): check_blocked = query_db("SELECT * FROM blocked_accounts WHERE user_blocking=? AND blocked_user=?", (username, session['username'])) return True if check_blocked else False
def admin_lib_get_block_requests(): block_requests = query_db("SELECT * FROM blocked_accounts") return block_requests
def user_lib_validate_profile_update_form(form, user, post_form_interests, pictures): interest_list = ['travelling', 'exercise', 'movies', 'dancing', 'cooking', 'outdoors', 'pets', 'photography', 'sports'] update_interests = [] for interest in interest_list: if interest in post_form_interests: update_interests.append(1) else: update_interests.append(0) new_username = False new_email = False form.likes.data = user['likes'] form.matches.data = user['matches'] form.fame.data = user['fame'] if not form.username.data == user['username']: new_username = True username = query_db("SELECT * FROM users WHERE username = ?", (form.username.data,), False, True) if username: flash("That username is already in use, please choose another one.", 'danger') return render_template("profile_update.html", form=form, user=user) if not form.email.data == user['email']: new_email = True if re.search("@", form.email.data): email = query_db("SELECT * FROM users WHERE email = ?", (form.email.data,), False, True) if email: flash("That email is already in in use, plese choose another one.", 'danger') return render_template("profile_update.html", form=form, user=user) else: flash("Please us a valid email address, with a '@' symbol.", 'danger') return render_template("profile_update.html", form=form, user=user) if new_username and new_email: query_db("UPDATE users SET username=?, email=?, gender=?, sex_orientation=? WHERE username=?", (form.username.data, form.email.data, form.gender.data, form.sex_orientation.data, user['username']), True) query_db("UPDATE interests SET username=? WHERE username=?", (form.username.data, session['username']), True) query_db( "UPDATE interests SET travelling=?, exercise=?, movies=?, dancing=?, cooking=?, outdoors=?, pets=?, photography=?, sports=? WHERE username=?", (update_interests[0], update_interests[1], update_interests[2], update_interests[3], update_interests[4], update_interests[5], update_interests[6], update_interests[7], update_interests[8], form.username.data), True) flash("Username and email updated, please click the link in the verification email we sent you to re-verify your account.", 'success') pop_session_values(form) send_verification_email(form) return redirect(url_for('login')) elif new_username: query_db("UPDATE users SET username=?, gender=?, sex_orientation=? WHERE username=?", (form.username.data, form.gender.data, form.sex_orientation.data, session['username']), True) query_db("UPDATE interests SET username=? WHERE username=?", (form.username.data, session['username']), True) query_db( "UPDATE interests SET travelling=?, exercise=?, movies=?, dancing=?, cooking=?, outdoors=?, pets=?, photography=?, sports=? WHERE username=?", (update_interests[0], update_interests[1], update_interests[2], update_interests[3], update_interests[4], update_interests[5], update_interests[6], update_interests[7], update_interests[8], form.username.data), True) flash("Username updated!", 'success') set_session_values(form) return redirect(url_for('profile_update')) elif new_email: query_db("UPDATE users SET email=?, gender=?, sex_orientation=? WHERE username=?", (form.email.data, form.gender.data, form.sex_orientation.data, session['username']), True) flash("Email updated, please click the link in the verification email we sent you to re-verify your account.", 'success') pop_session_values() send_verification_email(form) return redirect(url_for('login')) query_db("UPDATE users SET gender=?, sex_orientation=?, bio=?, firstname=?, lastname=?, age=?, complete=? WHERE username=?", (form.gender.data, form.sex_orientation.data, form.bio.data, form.firstname.data, form.lastname.data, form.age.data, 'True', session['username']), True) query_db( "UPDATE interests SET travelling=?, exercise=?, movies=?, dancing=?, cooking=?, outdoors=?, pets=?, photography=?, sports=? WHERE username=?", (update_interests[0], update_interests[1], update_interests[2], update_interests[3], update_interests[4], update_interests[5], update_interests[6], update_interests[7], update_interests[8], session['username']), True) return redirect(url_for('profile_update', form=form, user=user, pictures=pictures))
def user_lib_unwink(username): query_db("DELETE FROM likes WHERE (user_liking=? AND user_liked=?)", (session['username'], username), True) query_db("UPDATE users SET likes=likes-1 WHERE username=?", (username,), True) flash("You have un-winked " + username, 'success') common_lib_log_history_moment('unwink', session['username'], username, 'You unwinked ' + username) if not common_lib_check_if_blocked(username): common_lib_log_history_moment('unwink', username, session['username'], session['username'] + ' unwinked you! :(') match_check = query_db("SELECT * FROM matches WHERE (user_1=? AND user_2=?) OR (user_1=? AND user_2=?)", (session['username'], username, username, session['username'])) if match_check: user_1 = query_db("SELECT * FROM matches WHERE user_1=? AND user_2=?", (session['username'], username)) user_2 = query_db("SELECT * FROM matches WHERE user_1=? AND user_2=?", (username, session['username'])) if user_1: query_db("DELETE FROM matches WHERE user_1=? AND user_2=?", (session['username'], username), True) if user_2: query_db("DELETE FROM matches WHERE user_1=? AND user_2=?", (username, session['username']), True) testmatch = query_db("SELECT * FROM matches") print(testmatch) query_db("UPDATE users SET matches=matches-1 WHERE username=?", (session['username'],), True) query_db("UPDATE users SET matches=matches-1 WHERE username=?", (username,), True) common_lib_log_history_moment('unmatch', session['username'], username, 'You unmatched with ' + username) if not common_lib_check_if_blocked(username): common_lib_log_history_moment('unmatch', username, session['username'], session['username'] + ' unmatched with you! :(') flash("You have unmatched from " + username, 'success') query_db("UPDATE users SET fame = ((likes + matches + 1) * 100) WHERE username=?", (username,), True) query_db("UPDATE users SET fame = ((likes + matches + 1) * 100) WHERE username=?", (session['username'],), True) return redirect(url_for('profile_view', username=username))
def validate_lib_check_match(username): match_check = query_db( "SELECT * FROM matches WHERE (user_1=? AND user_2=?) OR (user_1=? AND user_2=?)", (session['username'], username, username, session['username'])) return True if match_check else False
def update_verified(username): query_db("UPDATE users SET verified=? WHERE username=?", (True, username), True)
def user_lib_create_interests(username): query_db("INSERT INTO interests (username) VALUES (?)", (username, ), True)
def admin_lib_get_fake_requests(): fake_requests = query_db("SELECT * FROM fake_accounts") return fake_requests