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' cdata = {} def get_data(): global cdata if open('data.json', 'r').read() != "": with open('data.json', 'r') as w: cdata = json.load(w) print("get from json") else: if not(cdata): # if session['loggedin']: sensors = ['pozhar', 'pozharolikv', 'soundstatus','soundlikv', 'doorst', 'gaz', 'gazolikv'] cdata = {'1': {}, '2': {}, '3': {}, 'potok': 100, 'earthquake': 1, 'techka': 1, 'tok': 100, 'nasostoggle': 1, 'lightst':1 } for i in range(1,4): for j in sensors: if j in ['earthquake', 'techka', 'nasostoggle', 'pozhar', 'soundstatus', 'gazolikv', 'pozharolikv', 'gaz','soundlikv']: cdata[str(i)][j+str(i)] = random.randint(1,1) else: cdata[str(i)][j+str(i)] = random.randint(50, 50) with open("data.json", 'w') as f: json.dump(cdata, f, indent=4) return cdata else: with open("data.json", 'w') as f: json.dump(cdata, f, indent=4) print("not created") return cdata def get_value(sensorid): global cdata if sensorid in cdata.keys(): return cdata[sensorid] else: for i in cdata.keys(): try: if sensorid in cdata[str(i)].keys(): return cdata[str(i)][sensorid] except: break def change_data(sensorid, value): global cdata if sensorid in cdata.keys(): cdata[sensorid] = value with open('data.json', 'w') as r: json.dump(cdata, r, indent=4) print("unluck") else: for i in cdata.keys(): try: if sensorid in cdata[str(i)].keys(): cdata[str(i)][sensorid] = value with open('data.json', 'w') as r: json.dump(cdata, r, indent=4) print("unluck") break except: break return '1' cdata = {} 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 #Основные страницы, индекс, и страницы лабораторий, авторизация @app.route("/", methods = ["GET", "POST"]) def index(): define_session(session) if session['loggedin'] == True: return render_template("index.html") 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", 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="Неверный логин/пароль") #Общение с ЕSP @app.route("/change_value", methods = ["POST"]) def ch_value(): if session["loggedin"]: sensorid = request.values.get("id") value = request.values.get("value") change_value(sensorid, value) print(cdata) else: return 'No rights' @app.route("/send_command", methods = ["POST"]) def change(): if session["loggedin"]: k = request.values.get('comm_id') if 'alert' in k: k = k.replace('alert', '') if k in ["lightst", "nasostoggle", "doorst1", "doorst2", "doorst3", "nasostoggle", "lightst", "pozharolikv1", "pozharolikv2","pozharolikv3","gazolikv1","gazolikv2","gazolikv3", "soundstatus1", "soundstatus2", "soundstatus3"]: z = get_value(k) print(k, z) change_data(k, int(not(z))) print(get_value(k), "lalka") return '1' else: print("lol", k) print(request.data) print(request.args.keys()) print(cdata) return '0' else: return '0' @app.route("/get_data", methods = ["POST"]) def return_data(): if session["loggedin"]: cdata = get_data() return json.dumps(cdata) return 'no_rights' @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()