logic.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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, Bookmark, Groups
  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. # owned groups
  15. bgroups = Groups.query.filter_by(owner=current_user.id).all()
  16. # owned bookmarks
  17. bmarks = Bookmark.query.filter_by(owner=current_user.id).all()
  18. bb_dic = dict() # dict of lists
  19. for bg in bgroups:
  20. inter_list = list()
  21. for bm in bmarks:
  22. if bm.group == bg.group:
  23. inter_list.append(bm)
  24. bb_dic[bg.group] = inter_list
  25. if request.method == "POST":
  26. username = request.form.get('username')
  27. passwd = request.form.get('password')
  28. passwdc = request.form.get('password_confirm')
  29. new_pic = request.files.get('profile_image')
  30. if username:
  31. nusern_dbcall = User.query.filter_by(id=current_user.id).first()
  32. nusern_dbcall.username = username
  33. db.session.commit()
  34. flash('Username updated!', category='success')
  35. elif passwd and passwdc:
  36. if passwd == passwdc:
  37. npasswd_dbcall = User.query.filter_by(id=current_user.id).first()
  38. npasswd_dbcall.password = generate_password_hash(passwdc, method='sha256')
  39. db.session.commit()
  40. flash('Password successfully updated', category='success')
  41. else:
  42. flash('Passwords must match!', category='error')
  43. elif new_pic:
  44. # generate random filename for uploaded file
  45. alphanumeric = string.ascii_letters + string.digits
  46. ralphanum = ''.join(secrets.choice(alphanumeric) for i in range(16))
  47. new_pic_dbcall = User.query.filter_by(id=current_user.id).first()
  48. if '.png' in new_pic.filename:
  49. new_pic.save(f'app/static/uploads/{ralphanum}.png')
  50. new_pic_dbcall.profile_image = f'{ralphanum}.png'
  51. elif '.jpg' in new_pic.filename or 'jpeg' in new_pic.filename:
  52. new_pic.save(f'app/static/uploads/{ralphanum}.jpeg')
  53. new_pic_dbcall.profile_image = f'{ralphanum}.jpeg'
  54. db.session.commit()
  55. flash('Profile Pic updated!', category='success')
  56. return render_template('home.html', user=current_user, bdic=bb_dic)
  57. @logic.route('/shared', methods=['GET', 'POST'])
  58. @login_required
  59. def shared():
  60. # owned groups
  61. bgroups = Groups.query.filter_by(owner=current_user.id).all()
  62. # owned bookmarks
  63. bmarks = Bookmark.query.filter_by(owner=current_user.id).all()
  64. bb_dic = dict() # dict of lists
  65. for bg in bgroups:
  66. inter_list = list()
  67. for bm in bmarks:
  68. if bm.group == bg.group and bm.status == 'public':
  69. inter_list.append(bm)
  70. if len(inter_list) != 0:
  71. bb_dic[bg.group] = inter_list
  72. return render_template('shared.html', user=current_user, bdic=bb_dic)
  73. @logic.route('/create', methods=['GET', 'POST'])
  74. @login_required
  75. def create():
  76. bgroups = Groups.query.filter_by(owner=current_user.id).all()
  77. if request.method == 'POST':
  78. wlink = request.form.get('web_link')
  79. wname = request.form.get('web_name')
  80. wgroup = request.form.get('web_group')
  81. ngroup = request.form.get('new_group')
  82. wstatus = request.form.get('share_public_private')
  83. if wlink and wname and wstatus:
  84. if wgroup == 'cng-555' and ngroup != '':
  85. wgroup = ngroup
  86. new_link = Bookmark(owner=current_user.id, status=wstatus, name=wname, group=wgroup, link=wlink)
  87. group_check = Groups.query.filter_by(group=wgroup).first()
  88. if not group_check:
  89. new_group = Groups(owner=current_user.id, group=wgroup)
  90. db.session.add(new_group)
  91. db.session.add(new_link)
  92. db.session.commit()
  93. flash('New Bookmark added!', category='success')
  94. return render_template('create_bookmark.html', user=current_user, bgroups=bgroups)
  95. @logic.route('/login', methods=['GET', 'POST'])
  96. def login():
  97. if request.method == 'POST':
  98. email = request.form.get('email')
  99. challenge_passwd = request.form.get('passwd_login')
  100. user = User.query.filter_by(email=email).first()
  101. if user:
  102. if check_password_hash(user.password, challenge_passwd):
  103. flash('Successful Login!', category='success')
  104. login_user(user, remember=True)
  105. return redirect(url_for('logic.home'))
  106. else:
  107. flash('Unsucessful Login!', category='error')
  108. else:
  109. flash('Unsucessful Login!', category='error')
  110. return render_template('login.html', user=current_user)
  111. @logic.route('/logout')
  112. @login_required
  113. def logout():
  114. logout_user()
  115. return redirect(url_for('logic.login'))
  116. @logic.route('/register', methods=['GET', 'POST'])
  117. def register():
  118. pass_list = list()
  119. if request.method == 'POST':
  120. email = request.form.get('email')
  121. username = request.form.get('username')
  122. passwd_1 = request.form.get('passwd_1')
  123. passwd_2 = request.form.get('passwd_2')
  124. # Basic User Input Checks
  125. email_check = User.query.filter_by(email=email).first()
  126. if len(email) < 1:
  127. flash('Your Email must be longer than 0 characters.', category='error')
  128. elif email_check:
  129. flash('This Email is already taken', category='error')
  130. else:
  131. pass_list.append('p')
  132. if len(username) < 1:
  133. flash('Username must be something', category='error')
  134. else:
  135. pass_list.append('p')
  136. if len(passwd_1) < 8 or len(passwd_2) < 8:
  137. flash('Your Password must be longer than or equal to 8 characters.', category='error')
  138. else:
  139. if passwd_1 != passwd_2:
  140. flash('Your Passwords must match!', category='error')
  141. else:
  142. if len(pass_list) == 2:
  143. new_user = User(email=email, username=username, password=generate_password_hash(passwd_2, method='sha256'))
  144. db.session.add(new_user)
  145. db.session.commit()
  146. flash('Account Registration Successful!', category='success')
  147. return redirect(url_for('logic.home'))
  148. else:
  149. flash('Registration Failed', category='error')
  150. return render_template("register.html", user=current_user)