logic.py 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. # Site Back-End Logic
  2. from hmac import new
  3. from flask import Blueprint, render_template, request, flash, redirect, url_for
  4. from flask_login import login_user, login_required, logout_user, current_user
  5. from werkzeug.security import generate_password_hash, check_password_hash
  6. from .models import User, Message
  7. from . import db
  8. import string, secrets
  9. logic = Blueprint('logic', __name__)
  10. @logic.route('/', methods=['GET', 'POST'])
  11. @login_required
  12. def profile():
  13. if request.method == "POST":
  14. new_desc = request.form.get('description_area')
  15. passwd_1 = request.form.get('passwd_1')
  16. passwd_2 = request.form.get('passwd_2')
  17. new_pic = request.files.get('profilepic_upload')
  18. if new_desc:
  19. new_desc_dbcall = User.query.filter_by(id=current_user.id).first()
  20. new_desc_dbcall.description = new_desc
  21. db.session.commit()
  22. flash('Hooray! A new description!', category='success')
  23. elif passwd_1 and passwd_2:
  24. if passwd_1 == passwd_2:
  25. new_passwd_dbcall = User.query.filter_by(id=current_user.id).first()
  26. new_passwd_dbcall.password = generate_password_hash(passwd_2, method='sha256')
  27. db.session.commit()
  28. flash('Nice! Updated your password!', category='success')
  29. else:
  30. flash('Oh no! Your passwords must match!', category='error')
  31. elif new_pic:
  32. # generate random filename for uploaded file
  33. alphanumeric = string.ascii_letters + string.digits
  34. ralphanum = ''.join(secrets.choice(alphanumeric) for i in range(16))
  35. new_pic_dbcall = User.query.filter_by(id=current_user.id).first()
  36. if '.png' in new_pic.filename:
  37. new_pic.save(f'app/static/uploads/{ralphanum}.png')
  38. new_pic_dbcall.profile_image = f'{ralphanum}.png'
  39. elif '.jpg' in new_pic.filename or 'jpeg' in new_pic.filename:
  40. new_pic.save(f'app/static/uploads/{ralphanum}.jpeg')
  41. new_pic_dbcall.profile_image = f'{ralphanum}.jpeg'
  42. db.session.commit()
  43. return render_template("profile.html", user=current_user)
  44. #recipient_id = None
  45. @logic.route('/matchbook', methods=['GET', 'POST'])
  46. @login_required
  47. def matchbook():
  48. all_users = User.query.all()
  49. if request.method == 'POST':
  50. #global recipient_id
  51. recipient_id = request.form.get('message_recipient')
  52. fdbcall = User.query.filter_by(id=current_user.id).first()##
  53. fdbcall.focus = recipient_id##
  54. db.session.commit()##
  55. return redirect(url_for('logic.messaging'))
  56. return render_template("matchbook.html", user=current_user, userlist=all_users)
  57. @logic.route('/messaging', methods=['GET', 'POST'])
  58. @login_required
  59. def messaging():
  60. recipient_id = current_user.focus##
  61. recipient = User.query.filter_by(id=recipient_id).first()
  62. sent_history = Message.query.filter_by(sender=current_user.id, recipient=recipient.id).all()
  63. recv_history = Message.query.filter_by(sender=recipient.id, recipient=current_user.id).all()
  64. joint_history = sent_history + recv_history
  65. joint_history.sort(key=lambda x: x.id) # add reverse=True for descending
  66. ## add filter to remove duplicate messages to self?
  67. if request.method == 'POST':
  68. message = request.form.get('message_box')
  69. new_msg_dbcall = Message(sender=current_user.id, recipient=recipient.id, message=message)
  70. db.session.add(new_msg_dbcall)
  71. db.session.commit()
  72. return redirect(url_for('logic.messaging'))
  73. return render_template("messaging.html", user=current_user, recipient=recipient, msg_hist=joint_history)
  74. @logic.route('/login', methods=['GET', 'POST'])
  75. def login():
  76. if request.method == 'POST':
  77. email = request.form.get('email')
  78. challenge_passwd = request.form.get('passwd_login')
  79. user = User.query.filter_by(email=email).first()
  80. if user:
  81. if check_password_hash(user.password, challenge_passwd):
  82. flash('Successful Login!', category='success')
  83. login_user(user, remember=True)
  84. return redirect(url_for('logic.profile'))
  85. else:
  86. flash('Unsucessful Login!', category='error')
  87. else:
  88. flash('Unsucessful Login!', category='error')
  89. return render_template("login.html", user=current_user)
  90. @logic.route('/logout')
  91. @login_required
  92. def logout():
  93. logout_user()
  94. return redirect(url_for('logic.login'))
  95. # Signup Route
  96. @logic.route('/register', methods=['GET', 'POST'])
  97. def register():
  98. pass_list = list()
  99. if request.method == 'POST':
  100. email = request.form.get('email')
  101. firstname = request.form.get('firstname')
  102. lastname = request.form.get('lastname')
  103. age = request.form.get('age')
  104. gender = request.form.get('gender')
  105. passwd_1 = request.form.get('passwd_1')
  106. passwd_2 = request.form.get('passwd_2')
  107. # Basic User Input Checks
  108. email_check = User.query.filter_by(email=email).first()
  109. if len(email) < 1:
  110. flash('Your Email must be longer than 0 characters.', category='error')
  111. elif email_check:
  112. flash('This Email is already taken', category='error')
  113. else:
  114. pass_list.append('p')
  115. if len(firstname) < 1:
  116. flash('First name must be something', category='error')
  117. else:
  118. pass_list.append('p')
  119. if len(lastname) < 1:
  120. flash('Last name must be something', category='error')
  121. else:
  122. pass_list.append('p')
  123. if gender == 'M' or gender == 'F':
  124. pass_list.append('p')
  125. else:
  126. flash('Gender must be either M or F!', category='error')
  127. if len(passwd_1) < 8 or len(passwd_2) < 8:
  128. flash('Your Password must be longer than or equal to 8 characters.', category='error')
  129. else:
  130. if passwd_1 != passwd_2:
  131. flash('Your Passwords must match!', category='error')
  132. else:
  133. if len(pass_list) == 4:
  134. new_user = User(email=email, firstname=firstname, lastname=lastname, age=age, gender=gender, password=generate_password_hash(passwd_2, method='sha256'))
  135. db.session.add(new_user)
  136. db.session.commit()
  137. flash('Account Registration Successful!', category='success')
  138. return redirect(url_for('logic.profile'))
  139. else:
  140. flash('Registration Failed', category='error')
  141. return render_template("register.html", user=current_user)