254 lines
7.3 KiB
Python
254 lines
7.3 KiB
Python
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()
|
||
|
||
|