app.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. """
  2. Authentication module
  3. """
  4. import os
  5. from flask_login import login_required, login_user, logout_user, current_user
  6. from flask_menu import Menu, register_menu
  7. from flask import render_template, request, redirect, url_for, flash, Blueprint, abort, jsonify
  8. from jinja2 import TemplateNotFound
  9. from app import app, login_manager, db
  10. from app.models import User, Page
  11. BLUEPRINT = Blueprint(
  12. 'auth',
  13. __name__,
  14. template_folder='templates'
  15. )
  16. @BLUEPRINT.route("/login", methods=["GET", "POST"])
  17. def login():
  18. """Handle login page and data"""
  19. if request.method == 'POST':
  20. email = request.form['email']
  21. password = request.form['password']
  22. user = User.query.filter(User.email == email).first()
  23. if user is not None:
  24. if user.check_password(password):
  25. login_user(user, remember=True)
  26. flash('You were successfully logged in.', 'success')
  27. if request.args.get("next") is not None:
  28. return redirect(request.args.get("next"))
  29. return redirect(url_for('backend.index'))
  30. flash('Incorrect password.', 'danger')
  31. else:
  32. flash('User not found.', 'danger')
  33. return redirect(url_for('auth.login'))
  34. return render_template('login.j2')
  35. @BLUEPRINT.route("/register", methods=["POST"])
  36. def register():
  37. """Register a new user"""
  38. name = request.form['name'] if 'name' in request.form else None
  39. email = request.form['email'] if 'email' in request.form else None
  40. password = request.form['password'] if 'email' in request.form else None
  41. if name is None:
  42. flash('Fill in the name.', 'warning')
  43. return render_template('login.j2')
  44. if email is None:
  45. flash('Fill in the email.', 'warning')
  46. return render_template(
  47. 'login.j2',
  48. name=name
  49. )
  50. if password is None:
  51. flash('Fill in the password.', 'warning')
  52. return render_template(
  53. 'login.j2',
  54. name=name,
  55. email=email
  56. )
  57. user = User.query.filter(User.email == email).first()
  58. if user is not None:
  59. flash('Email already taken.', 'warning')
  60. return render_template(
  61. 'login.j2',
  62. name=name,
  63. )
  64. user = User()
  65. user.name = name
  66. user.email = email
  67. user.password = password
  68. db.session.add(user)
  69. db.session.commit()
  70. login_user(user, remember=True)
  71. flash('Successfully registered account "%s".' % (user.name), 'success')
  72. if request.args.get("next") is not None:
  73. return redirect(request.args.get("next"))
  74. return redirect(url_for('backend.index'))
  75. @BLUEPRINT.route("/logout")
  76. @login_required
  77. def logout():
  78. """Logout function for users"""
  79. logout_user()
  80. return redirect(url_for('static.show'))