logic.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. # Site Back-End Logic
  2. from hmac import new
  3. from unicodedata import category
  4. from flask import Blueprint, render_template, request, flash, redirect, url_for
  5. from flask_login import login_user, login_required, logout_user, current_user
  6. from werkzeug.security import generate_password_hash, check_password_hash
  7. from .models import User
  8. from . import db
  9. import string, secrets
  10. logic = Blueprint('logic', __name__)
  11. @logic.route('/', methods=['GET', 'POST'])
  12. @login_required
  13. def home():
  14. if request.method == "POST":
  15. passwd = request.form.get('password')
  16. passwdc = request.form.get('password_confirm')
  17. new_pic = request.files.get('profile_image')
  18. if passwd and passwdc:
  19. if passwd == passwdc:
  20. npasswd_dbcall = User.query.filter_by(id=current_user.id).first()
  21. npasswd_dbcall.password = generate_password_hash(passwdc, method='sha256')
  22. db.session.commit()
  23. flash('Password successfully updated', category='success')
  24. else:
  25. flash('Passwords must match!', category='error')
  26. elif new_pic:
  27. # generate random filename for uploaded file
  28. alphanumeric = string.ascii_letters + string.digits
  29. ralphanum = ''.join(secrets.choice(alphanumeric) for i in range(16))
  30. new_pic_dbcall = User.query.filter_by(id=current_user.id).first()
  31. if '.png' in new_pic.filename:
  32. new_pic.save(f'app/static/uploads/{ralphanum}.png')
  33. new_pic_dbcall.profile_image = f'{ralphanum}.png'
  34. elif '.jpg' in new_pic.filename or 'jpeg' in new_pic.filename:
  35. new_pic.save(f'app/static/uploads/{ralphanum}.jpeg')
  36. new_pic_dbcall.profile_image = f'{ralphanum}.jpeg'
  37. db.session.commit()
  38. flash('Profile Pic updated!', category='success')
  39. return render_template('home.html', user=current_user)
  40. @logic.route('/login', methods=['GET', 'POST'])
  41. def login():
  42. if request.method == 'POST':
  43. email = request.form.get('email')
  44. challenge_passwd = request.form.get('passwd_login')
  45. user = User.query.filter_by(email=email).first()
  46. if user:
  47. if check_password_hash(user.password, challenge_passwd):
  48. flash('Successful Login!', category='success')
  49. login_user(user, remember=True)
  50. return redirect(url_for('logic.home'))
  51. else:
  52. flash('Unsucessful Login!', category='error')
  53. else:
  54. flash('Unsucessful Login!', category='error')
  55. return render_template("login.html", user=current_user)
  56. @logic.route('/logout')
  57. @login_required
  58. def logout():
  59. logout_user()
  60. return redirect(url_for('logic.login'))
  61. @logic.route('/register', methods=['GET', 'POST'])
  62. def register():
  63. pass_list = list()
  64. if request.method == 'POST':
  65. email = request.form.get('email')
  66. username = request.form.get('username')
  67. passwd_1 = request.form.get('passwd_1')
  68. passwd_2 = request.form.get('passwd_2')
  69. # Basic User Input Checks
  70. email_check = User.query.filter_by(email=email).first()
  71. if len(email) < 1:
  72. flash('Your Email must be longer than 0 characters.', category='error')
  73. elif email_check:
  74. flash('This Email is already taken', category='error')
  75. else:
  76. pass_list.append('p')
  77. if len(username) < 1:
  78. flash('Username must be something', category='error')
  79. else:
  80. pass_list.append('p')
  81. if len(passwd_1) < 8 or len(passwd_2) < 8:
  82. flash('Your Password must be longer than or equal to 8 characters.', category='error')
  83. else:
  84. if passwd_1 != passwd_2:
  85. flash('Your Passwords must match!', category='error')
  86. else:
  87. if len(pass_list) == 2:
  88. new_user = User(email=email, username=username, password=generate_password_hash(passwd_2, method='sha256'))
  89. db.session.add(new_user)
  90. db.session.commit()
  91. flash('Account Registration Successful!', category='success')
  92. return redirect(url_for('logic.home'))
  93. else:
  94. flash('Registration Failed', category='error')
  95. return render_template("register.html", user=current_user)