routes.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. # -*- encoding: utf-8 -*-
  2. """
  3. Copyright (c) 2019 - present AppSeed.us
  4. """
  5. from flask import render_template, redirect, request, url_for
  6. from flask_login import (
  7. current_user,
  8. login_user,
  9. logout_user
  10. )
  11. from flask_dance.contrib.github import github
  12. from apps import db, login_manager
  13. from apps.authentication import blueprint
  14. from apps.authentication.forms import LoginForm, CreateAccountForm
  15. from apps.authentication.models import Users
  16. from apps.authentication.util import verify_pass
  17. @blueprint.route('/')
  18. def route_default():
  19. return redirect(url_for('authentication_blueprint.login'))
  20. # Login & Registration
  21. @blueprint.route("/github")
  22. def login_github():
  23. """ Github login """
  24. if not github.authorized:
  25. return redirect(url_for("github.login"))
  26. res = github.get("/user")
  27. return redirect(url_for('home_blueprint.index'))
  28. @blueprint.route('/login', methods=['GET', 'POST'])
  29. def login():
  30. login_form = LoginForm(request.form)
  31. if 'login' in request.form:
  32. # read form data
  33. username = request.form['username']
  34. password = request.form['password']
  35. # Locate user
  36. user = Users.query.filter_by(username=username).first()
  37. # Check the password
  38. if user and verify_pass(password, user.password):
  39. login_user(user)
  40. return redirect(url_for('authentication_blueprint.route_default'))
  41. # Something (user or pass) is not ok
  42. return render_template('accounts/login.html',
  43. msg='Wrong user or password',
  44. form=login_form)
  45. if not current_user.is_authenticated:
  46. return render_template('accounts/login.html',
  47. form=login_form)
  48. return redirect(url_for('home_blueprint.index'))
  49. @blueprint.route('/register', methods=['GET', 'POST'])
  50. def register():
  51. create_account_form = CreateAccountForm(request.form)
  52. if 'register' in request.form:
  53. username = request.form['username']
  54. email = request.form['email']
  55. # Check usename exists
  56. user = Users.query.filter_by(username=username).first()
  57. if user:
  58. return render_template('accounts/register.html',
  59. msg='Username already registered',
  60. success=False,
  61. form=create_account_form)
  62. # Check email exists
  63. user = Users.query.filter_by(email=email).first()
  64. if user:
  65. return render_template('accounts/register.html',
  66. msg='Email already registered',
  67. success=False,
  68. form=create_account_form)
  69. # else we can create the user
  70. user = Users(**request.form)
  71. db.session.add(user)
  72. db.session.commit()
  73. # Delete user from session
  74. logout_user()
  75. return render_template('accounts/register.html',
  76. msg='Account created successfully.',
  77. success=True,
  78. form=create_account_form)
  79. else:
  80. return render_template('accounts/register.html', form=create_account_form)
  81. @blueprint.route('/logout')
  82. def logout():
  83. logout_user()
  84. return redirect(url_for('authentication_blueprint.login'))
  85. # Errors
  86. @login_manager.unauthorized_handler
  87. def unauthorized_handler():
  88. return render_template('home/page-403.html'), 403
  89. @blueprint.errorhandler(403)
  90. def access_forbidden(error):
  91. return render_template('home/page-403.html'), 403
  92. @blueprint.errorhandler(404)
  93. def not_found_error(error):
  94. return render_template('home/page-404.html'), 404
  95. @blueprint.errorhandler(500)
  96. def internal_error(error):
  97. return render_template('home/page-500.html'), 500