diff --git a/__init__.py b/__init__.py index 3ae3440..70a5a77 100644 --- a/__init__.py +++ b/__init__.py @@ -1,13 +1,14 @@ -from flask import Flask, render_template, request -from flask_sqlalchemy import SQLAlchemy -from flask_simplelogin import SimpleLogin +from flask import render_template, request +from db_routing import app +import db_routing +from flask_httpauth import HTTPBasicAuth import os import hashlib -import sqlite3 -app = Flask(__name__, static_folder='static', template_folder='templates') -app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db' -db = SQLAlchemy(app) + +if not os.path.exists('./data.db'): + db_routing.db.create_all() +auth = HTTPBasicAuth() @app.route('/', methods=['GET']) @@ -18,35 +19,37 @@ def index(): @app.route('/registration', methods=['GET', 'POST']) def register(): if request.method == 'POST': - UserLogin = request.form['UserLogin'] - UserPass = request.form['UserPass'] - if not find_user_copy(UserLogin): - db.session.add(UserLogin, passw_hash(UserPass)) - db.session.commit() - # return render_template('your_page.html') + userLogin = request.form['UserLogin'] + userPassw = request.form['UserPassw'] + db_routing.add_user(userLogin, passw_hash(userPassw)) + else: + print('Логин занят') return render_template('registration.html') +@auth.verify_password +def verify_password(user_login, user_passw): + user = db_routing.find_user(user_login) + if user: + userSalt = user[2][:32] + if passw_hash(user_passw, userSalt) == user[2]: + return True + else: + return False + + @app.route('/content', methods=['GET']) +@auth.login_required def content(): return render_template('content.html') -@app.errorhandler(404) -def not_found(error): - return render_template('404.html'), 404 +# @app.errorhandler(404) +# def not_found(error): +# return render_template('404.html'), 404 -def find_user_copy(user_login): - con = sqlite3.connect('data.db') - with con: - cur = con.cursor() - exist = cur.execute('SELECT EXISTS ( SELECT UserLogin FROM Users Where UserLogin = ' + user_login + ' LIMIT 1') - return exist - - -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) storage = salt + key # salt_from_storage = storage[:32] # 32 длина соли @@ -55,4 +58,4 @@ def passw_hash(user_passw): if __name__ == '__main__': - app.run() + db_routing.app.run() diff --git a/data.db b/data.db deleted file mode 100644 index 2c17d26..0000000 Binary files a/data.db and /dev/null differ diff --git a/db_routing.py b/db_routing.py new file mode 100644 index 0000000..3465184 --- /dev/null +++ b/db_routing.py @@ -0,0 +1,25 @@ +from flask import Flask +from flask_sqlalchemy import SQLAlchemy + + +app = Flask(__name__, static_folder='static', template_folder='templates') +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db' +db = SQLAlchemy(app) + + +class User(db.Model): + __tablename__ = 'users' + UserID = db.Column(db.Integer, primary_key=True) + UserName = db.Column(db.String(80), unique=True, nullable=False) + UserPassw = db.Column(db.String(120), nullable=False) + + +def add_user(user_name, passw_hash): + if not find_user(user_name): + new_user = User(UserName=user_name, UserPassw=passw_hash) + db.session.add(new_user) + db.session.commit() + + +def find_user(user_name): + return User.query.filter_by(UserName=user_name).first() diff --git a/templates/registration.html b/templates/registration.html index f98e76d..502b0bc 100644 --- a/templates/registration.html +++ b/templates/registration.html @@ -72,7 +72,7 @@