ug2024finals/webs.py

95 lines
2.9 KiB
Python

import requests
import json
from flask import Flask, render_template, url_for, redirect, request, json
import hashlib
app = Flask(__name__)
app.secret_key = '%TGHUI8uyFGHI(*&^5rUIO9i*&^TRfvgbHNJKLKJnhgfDE3WedFGhjKOlIuyTRe4567ioP:liuytr56&8()IuGTfrEdsXcghuy6'
print("OPEN YOUR ESP SERIAL PORT READER A AND ENDER IP")
ip = input()
def hash_data(data):
hashpass = hashlib.sha256()
hashpass.update(bytes(password, encoding='utf8'))
passw = hashpass.hexdigest()
return passw
def create_account(login, password):
passw = hash_data(password)
data = {'username': login, 'password': passw}
with open('accounts.json', 'rw') as f:
for entry in json.load(f):
if entry['username'] == login:
return 0
json.dump(data, f)
return 1
def login_into_account(session, login, password):
passw = hash_data(password)
with open('accounts.json', 'r') as f:
for entry in json.load(f):
if entry['username'] == login and entry["password"] == password:
session['loggedin'], session['username'] = True, login
return 1
return 0
def get_status():
return requests.get("http://"+ip+"/status").text
@app.route('/', methods = ["GET", "POST"])
def index():
if session["loggedin"] == True:
stat = get_status().split()
led_status = int(stat[0])
led_brightness = int(stat[1])
if request.method == "POST":
if request.form.get("slide"):
brightness = request.form.get("slide")
print(brightness)
led_britghtness = change(brightness)
return render_template("index.html", led_status = led_status, led_brightness = led_brightness)
else:
return render_template("unauthorized.html")
@app.route('/register', methods = ["POST", "GET"])
def register():
if request.method == "GET":
if session['loggedin'] == True:
return redirect('/')
else:
return render_template("register.html")
else:
data = request.args
login = data['login']
passw = data['password']
if create_account(login, passw):
return redirect('/')
else:
return render_template("register.html", err='Такой пользователь уже существует')
@app.route('/login', methods = ["POST", "GET"])
def login():
if request.method == 'GET':
if session['loggedin'] == True:
return redirect('/')
else:
return render_template("login.html")
else:
data = request.args
login = data['login']
passw = data['passw']
if login_into_account(session, login, passw):
return redirect('/')
else:
return render_template("login.html", err="Неверный логин/пароль")
if __name__ == '__main__':
app.ru()