use application factory, WIP
This commit is contained in:
parent
e6bc4928c9
commit
38e5ef85c0
17 changed files with 200 additions and 120 deletions
|
@ -1,6 +1,7 @@
|
|||
import click
|
||||
from realms.lib.util import random_string
|
||||
from realms.modules.auth.models import User
|
||||
from realms.lib.util import green, red, yellow
|
||||
|
||||
|
||||
@click.group()
|
||||
|
@ -21,15 +22,15 @@ def create_user(username, email, password):
|
|||
password = random_string(12)
|
||||
|
||||
if User.get_by_username(username):
|
||||
click.secho("Username %s already exists" % username, fg='red')
|
||||
red("Username %s already exists" % username)
|
||||
return
|
||||
|
||||
if User.get_by_email(email):
|
||||
click.secho("Email %s already exists" % email, fg='red')
|
||||
red("Email %s already exists" % email)
|
||||
return
|
||||
|
||||
User.create(username, email, password)
|
||||
click.secho("User %s created" % username, fg='green')
|
||||
green("User %s created" % username)
|
||||
|
||||
if show_pass:
|
||||
click.secho("Password: %s" % password, fg='yellow')
|
||||
yellow("Password: %s" % password)
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
from flask_wtf import Form, RecaptchaField
|
||||
from flask_wtf import Form
|
||||
from wtforms import StringField, PasswordField, validators
|
||||
from realms import app
|
||||
|
||||
|
||||
class RegistrationForm(Form):
|
||||
|
@ -12,9 +11,6 @@ class RegistrationForm(Form):
|
|||
])
|
||||
confirm = PasswordField('Repeat Password')
|
||||
|
||||
if app.config['RECAPTCHA_ENABLE']:
|
||||
setattr(RegistrationForm, 'recaptcha', RecaptchaField("You Human?"))
|
||||
|
||||
|
||||
class LoginForm(Form):
|
||||
email = StringField('Email', [validators.DataRequired()])
|
||||
|
|
8
realms/modules/auth/hooks.py
Normal file
8
realms/modules/auth/hooks.py
Normal file
|
@ -0,0 +1,8 @@
|
|||
from flask import current_app
|
||||
from flask_wtf import RecaptchaField
|
||||
from .forms import RegistrationForm
|
||||
|
||||
|
||||
def before_first_request():
|
||||
if current_app.config['RECAPTCHA_ENABLE']:
|
||||
setattr(RegistrationForm, 'recaptcha', RecaptchaField("You Human?"))
|
|
@ -1,5 +1,6 @@
|
|||
from flask import current_app
|
||||
from flask.ext.login import UserMixin, logout_user, login_user, AnonymousUserMixin
|
||||
from realms import config, login_manager, db
|
||||
from realms import login_manager, db
|
||||
from realms.lib.model import Model
|
||||
from realms.lib.util import gravatar_url
|
||||
from itsdangerous import URLSafeSerializer, BadSignature
|
||||
|
@ -15,7 +16,7 @@ def load_user(user_id):
|
|||
@login_manager.token_loader
|
||||
def load_token(token):
|
||||
# Load unsafe because payload is needed for sig
|
||||
sig_okay, payload = URLSafeSerializer(config.SECRET_KEY).loads_unsafe(token)
|
||||
sig_okay, payload = URLSafeSerializer(current_app.config['SECRET_KEY']).loads_unsafe(token)
|
||||
|
||||
if not payload:
|
||||
return None
|
||||
|
@ -81,7 +82,7 @@ class User(Model, UserMixin):
|
|||
"""
|
||||
Signed with app secret salted with sha256 of password hash of user (client secret)
|
||||
"""
|
||||
return URLSafeSerializer(config.SECRET_KEY + salt)
|
||||
return URLSafeSerializer(current_app.config['SECRET_KEY'] + salt)
|
||||
|
||||
@staticmethod
|
||||
def auth(email, password):
|
||||
|
|
|
@ -1,16 +1,15 @@
|
|||
from flask import g, render_template, request, redirect, Blueprint, flash, url_for
|
||||
from flask import current_app, render_template, request, redirect, Blueprint, flash, url_for
|
||||
from realms.modules.auth.models import User
|
||||
from realms.modules.auth.forms import LoginForm, RegistrationForm
|
||||
from realms import app
|
||||
|
||||
blueprint = Blueprint('auth', __name__, url_prefix=app.config['RELATIVE_PATH'])
|
||||
blueprint = Blueprint('auth', __name__)
|
||||
|
||||
|
||||
@blueprint.route("/logout")
|
||||
def logout_page():
|
||||
User.logout()
|
||||
flash("You are now logged out")
|
||||
return redirect(url_for(app.config['ROOT_ENDPOINT']))
|
||||
return redirect(url_for(current_app.config['ROOT_ENDPOINT']))
|
||||
|
||||
|
||||
@blueprint.route("/login", methods=['GET', 'POST'])
|
||||
|
@ -23,7 +22,7 @@ def login():
|
|||
return redirect(url_for('auth.login'))
|
||||
|
||||
if User.auth(request.form['email'], request.form['password']):
|
||||
return redirect(request.args.get("next") or url_for(app.config['ROOT_ENDPOINT']))
|
||||
return redirect(request.args.get("next") or url_for(current_app.config['ROOT_ENDPOINT']))
|
||||
else:
|
||||
flash('Email or Password Incorrect', 'warning')
|
||||
return redirect(url_for('auth.login'))
|
||||
|
@ -34,9 +33,9 @@ def login():
|
|||
@blueprint.route("/register", methods=['GET', 'POST'])
|
||||
def register():
|
||||
|
||||
if not app.config['REGISTRATION_ENABLED']:
|
||||
if not current_app.config['REGISTRATION_ENABLED']:
|
||||
flash("Registration is disabled")
|
||||
return redirect(url_for(app.config['ROOT_ENDPOINT']))
|
||||
return redirect(url_for(current_app.config['ROOT_ENDPOINT']))
|
||||
|
||||
form = RegistrationForm()
|
||||
|
||||
|
@ -57,7 +56,7 @@ def register():
|
|||
User.create(request.form['username'], request.form['email'], request.form['password'])
|
||||
User.auth(request.form['email'], request.form['password'])
|
||||
|
||||
return redirect(request.args.get("next") or url_for(app.config['ROOT_ENDPOINT']))
|
||||
return redirect(request.args.get("next") or url_for(current_app.config['ROOT_ENDPOINT']))
|
||||
|
||||
return render_template("auth/register.html", form=form)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue