ug2024finals/app.py

144 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import requests, random, hashlib, json, os
from esplistener.esplistener import *
from flask import session, Flask, request, render_template, url_for, redirect
initialize_data = initialize()
socket, data = initialize_data[0], initialize_data[1]
#get_smth(socket, "Temperature")
send_command(socket, "Temperature", "GetValue")
app = Flask(__name__)
app.secret_key = '%TGHUI8uyFGHI(*&^5rUIO9i*&^TRfvgbHNJKLKJnhgfDE3WedFGhjKOlIuyTRe4567ioP:liuytr56&8()IuGTfrEdsXcghuy6'
def hash_data(data):
hashpass = hashlib.sha256()
hashpass.update(bytes(data, encoding='utf8'))
passw = hashpass.hexdigest()
return passw
def create_account(login, password):
login, password = str(login), str(password)
if not os.path.exists('accounts.json'):
data = []
else:
try:
with open('accounts.json', 'r') as file:
data = json.load(file)
for i in data:
if i['username'] == login:
print("found")
return 0
except json.JSONDecodeError:
data = []
password_entry = {'username': login, 'password': hash_data(password)}
data.append(password_entry)
with open('accounts.json', 'w') as file:
json.dump(data, file, indent=4)
return 1
def login_into_account(session, login, password):
if not os.path.exists('accounts.json'):
return None
try:
with open('accounts.json', 'r') as file:
data = json.load(file)
except json.JSONDecodeError:
data = []
for entry in data:
if entry['username'] == login and entry['password'] == hash_data(password):
session['loggedin'], session['username'] = True, login
return 1
return 0
def define_session(session):
if 'loggedin' not in session.keys():
session['loggedin'] = False
def get_cur_speed(session):
if session['loggedin']:
return random.randint(1, 100)
return "no rights"
#return int(requests.post("http://"+ip+"/get_speed"))
#Основные страницы, индекс, и страницы лабораторий, авторизация
@app.route("/", methods = ["GET", "POST"])
def index():
define_session(session)
if session['loggedin'] == True:
cur_speed = 25
if request.method == "POST":
cur_speed = request.form.get("slide")
return render_template("mashinka.html", cur_speed = cur_speed)
return render_template("mashinka.html", cur_speed = cur_speed)
else:
return render_template("index.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", err = '')
else:
login = request.form.get('login')
passw = request.form.get('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", err = '')
else:
login = request.form.get('login')
passw = request.form.get('password')
print(passw)
if login_into_account(session, login, passw):
return redirect('/')
else:
return render_template("login.html", err="Неверный логин/пароль")
#Общение с ЕСП
@app.route("/sos_check", methods = ["POST"])
def sos_check():
if random.randint(0,1):
return check_sos(socket)
else:
return ''
@app.route("/mashinka_go", methods = ["POST"])
def mashinka_go():
if session['loggedin']:
return ''
else:
return ""
@app.route("/mashinka_stop", methods = ["POST"])
def mashinka_stop():
if session['loggedin']:
return ''
else:
return ""
@app.route("/get_temperature", methods = ["POST"])
def get_temperature():
if session['loggedin']:
return 1
else:
return ''
if __name__ == '__main__':
app.run()