Доавлен универсальный хендлер ошибок и восстановлена работа при логине несуществующего пользователя

This commit is contained in:
2020-03-16 22:24:15 +03:00
parent 07ded24e2c
commit 2eacbe943e
2 changed files with 32 additions and 12 deletions

View File

@@ -4,6 +4,7 @@ from flask_login import LoginManager, login_user, login_required, logout_user
from db_routing import app, db from db_routing import app, db
import os import os
import hashlib import hashlib
from re import match
login_manager = LoginManager(app) login_manager = LoginManager(app)
@@ -23,6 +24,7 @@ def register():
if request.method == 'POST': if request.method == 'POST':
userName = request.form['RegUserLogin'] userName = request.form['RegUserLogin']
userPassw = request.form['RegUserPassw'] userPassw = request.form['RegUserPassw']
if string_check(userName) and string_check(userPassw):
if db_routing.add_user(userName, passw_hash(userPassw)): if db_routing.add_user(userName, passw_hash(userPassw)):
login_user(db_routing.find_user(username=userName)) login_user(db_routing.find_user(username=userName))
return redirect(url_for('workshop')) return redirect(url_for('workshop'))
@@ -33,10 +35,16 @@ def register():
def login(): def login():
userName = request.form['LogUserLogin'] userName = request.form['LogUserLogin']
userPassw = request.form['LogUserPassw'] userPassw = request.form['LogUserPassw']
if string_check(userName) and string_check(userPassw):
user = verify_password(userName, userPassw) user = verify_password(userName, userPassw)
if user: if user:
login_user(user) login_user(user)
return redirect(url_for('workshop')) return redirect(url_for('workshop'))
else:
return redirect(url_for('register'))
else:
return redirect(url_for('register'))
@app.route('/logout') @app.route('/logout')
@@ -51,11 +59,22 @@ def workshop():
return render_template('workshop.html') return render_template('workshop.html')
@app.errorhandler(404) @app.errorhandler(Exception)
def not_found(error): def universal_error(error):
return render_template('error.html'), 404 return render_template('error.html'), 404
def string_check(string):
if 2 < len(string) < 7:
if match('^[0-9A-Za-z]*$', string) and not ('\\' in string):
return True
else:
print(
'Некорректный ввод! Строка должно включать только английские буквы или цифры. Содержать не менее 3 и не '
'более 6 символов')
return False
def passw_hash(user_passw, salt=os.urandom(32)): def passw_hash(user_passw, salt=os.urandom(32)):
key = hashlib.pbkdf2_hmac('sha256', user_passw.encode('utf-8'), salt, 100000) key = hashlib.pbkdf2_hmac('sha256', user_passw.encode('utf-8'), salt, 100000)
storage = salt + key storage = salt + key
@@ -66,6 +85,7 @@ def passw_hash(user_passw, salt=os.urandom(32)):
def verify_password(username, password): def verify_password(username, password):
User = db_routing.find_user(username=username) User = db_routing.find_user(username=username)
print(User)
if User: if User:
userSalt = User.password[:32] userSalt = User.password[:32]
if passw_hash(password, userSalt) == User.password: if passw_hash(password, userSalt) == User.password:

View File

@@ -14,7 +14,6 @@ class User(db.Model):
username = db.Column(db.String(80), unique=True, nullable=False) username = db.Column(db.String(80), unique=True, nullable=False)
password = db.Column(db.String(120), nullable=False) password = db.Column(db.String(120), nullable=False)
def __init__(self, username, password): def __init__(self, username, password):
self.username = username self.username = username
self.password = password self.password = password
@@ -49,7 +48,7 @@ class Scenario(db.Model):
owner_id = db.Column(db.Integer, ForeignKey('Users.id')) owner_id = db.Column(db.Integer, ForeignKey('Users.id'))
trigger_id = db.Column(db.Integer, ForeignKey('Triggers.id')) trigger_id = db.Column(db.Integer, ForeignKey('Triggers.id'))
trigger_args = db.Column(db.String(200)) trigger_args = db.Column(db.String(200))
action_id = db.Column(db.Integer, ForeignKey('Action.id')) action_id = db.Column(db.Integer, ForeignKey('Actions.id'))
action_args = db.Column(db.String(200)) action_args = db.Column(db.String(200))
@@ -70,4 +69,5 @@ def find_user(id=None, username=None):
if username: if username:
return User.query.filter_by(username=username).first() return User.query.filter_by(username=username).first()
#def get_trigers():
# def get_trigers():