You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.7 KiB
80 lines
2.7 KiB
from flask import request, render_template, session, redirect, url_for, flash
|
|
from flask_login import login_user, logout_user, current_user
|
|
from wowstash.blueprints.auth import auth_bp
|
|
from wowstash.forms import Register, Login
|
|
from wowstash.models import User
|
|
from wowstash.library.jsonrpc import wallet
|
|
from wowstash.factory import db, bcrypt
|
|
|
|
|
|
@auth_bp.route("/register", methods=["GET", "POST"])
|
|
def register():
|
|
form = Register()
|
|
if current_user.is_authenticated:
|
|
flash('Already registered and authenticated.')
|
|
return redirect(url_for('wallet.dashboard'))
|
|
|
|
if form.validate_on_submit():
|
|
# Check if Wownero wallet is available
|
|
if wallet.connected is False:
|
|
flash('Wallet RPC interface is unavailable at this time. Try again later.')
|
|
return redirect(url_for('auth.register'))
|
|
|
|
# Check if email already exists
|
|
user = User.query.filter_by(email=form.email.data).first()
|
|
if user:
|
|
flash('This email is already registered.')
|
|
return redirect(url_for('auth.login'))
|
|
|
|
# Create new subaddress
|
|
subaddress = wallet.new_address(label=form.email.data)
|
|
|
|
# Save new user
|
|
user = User(
|
|
email=form.email.data,
|
|
password=bcrypt.generate_password_hash(form.password.data).decode('utf8'),
|
|
subaddress_index=subaddress[0]
|
|
)
|
|
db.session.add(user)
|
|
db.session.commit()
|
|
|
|
# Login user and redirect to wallet page
|
|
login_user(user)
|
|
return redirect(url_for('wallet.dashboard'))
|
|
|
|
return render_template("auth/register.html", form=form)
|
|
|
|
@auth_bp.route("/login", methods=["GET", "POST"])
|
|
def login():
|
|
form = Login()
|
|
if current_user.is_authenticated:
|
|
flash('Already registered and authenticated.')
|
|
return redirect(url_for('wallet.dashboard'))
|
|
|
|
if form.validate_on_submit():
|
|
# Check if user doesn't exist
|
|
user = User.query.filter_by(email=form.email.data).first()
|
|
if not user:
|
|
flash('Invalid username or password.')
|
|
return redirect(url_for('auth.login'))
|
|
|
|
# Check if password is correct
|
|
password_matches = bcrypt.check_password_hash(
|
|
user.password,
|
|
form.password.data
|
|
)
|
|
if not password_matches:
|
|
flash('Invalid username or password.')
|
|
return redirect(url_for('auth.login'))
|
|
|
|
# Login user and redirect to wallet page
|
|
login_user(user)
|
|
return redirect(url_for('wallet.dashboard'))
|
|
|
|
return render_template("auth/login.html", form=form)
|
|
|
|
@auth_bp.route("/logout")
|
|
def logout():
|
|
logout_user()
|
|
return redirect(url_for('meta.index'))
|