def change_confirm(req): print("----------------------------------change confirm----------------------------------") if deb2 else None print("received data: ", req) if deb else None print("received data pub_id: ", req['pub_id']) if deb else None print("received data data: ", req['data']) if deb else None print("received data sign: ", req['sign']) if deb else None if UserFarm.query.filter_by(pub_id=req['pub_id']).first() is not None: app1 = UserFarm.query.filter_by(pub_id=req['pub_id']).first() print("UserFarm pub: ", app1.pub_id) if deb else None print("UserFarm priv: ", app1.pri_id) if deb else None print("decrypt pass on db: ", jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode()) if deb else None try: req_data = json.loads(jws.verify(req['data'], jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode(), algorithms=['HS256'])) except: pass print("decrypt data: ", req_data) if deb else None if Session.query.filter_by(session_id=req_data['ses_id'], pub_id=req['pub_id'], flag=True).first() is not None: app2 = Session.query.filter_by(session_id=req_data['ses_id'], pub_id=req['pub_id'], flag=True).first() if sign.verify_sign(app2.key, req['sign'], req['data']): print("valid sign") if deb else None canc = Change.query.filter_by(flag=False, time_req=datetime.datetime.strptime(req_data['time_req'], "%m/%d/%Y, %H:%M:%S.%f"), pub_id=req['pub_id']).order_by(Change.time_req.asc()).first() canc.flag = True db.session.commit() print("TH CHANGE CONF ---> user: "******"----------------------------------change confirm DONE----------------------------------") if deb2 else None
def on_changes(*resp): print('CHANGE') if deb2 else None print("------\nTH: ", resp, "\n------") if deb else None print("response: ", resp[0]) if deb else None print("data response: ", resp[0]['data']) if deb else None print("sign response: ", resp[0]['sign']) if deb else None resp_data = json.loads( jws.verify(resp[0]['data'], pri_id, algorithms=['HS256']).decode()) print("decrypt data response: ", resp_data) if deb else None print("key in data response: ", server_key) if deb else None if sign.verify_sign(server_key, resp[0]['sign'], resp[0]['data']): # update new data print("valid sign") if deb else None req_data = {"ses_id": session_id, "time_req": resp_data['time_req']} print("data to send: ", req_data) if deb else None crypt_data = jws.sign(req_data, pri_id, algorithm='HS256') print("encrypt data to send: ", crypt_data) if deb else None sign_crypt_data = sign.sign_data(key.exportKey(), crypt_data) print("sign of en data send: ", sign_crypt_data) if deb else None req2 = { "pub_id": pub_id, "data": crypt_data, "sign": sign_crypt_data.decode() } print("send: ", req2) if deb else None print("CHANGE DONE") if deb2 else None socketIO.emit('change_confirm', req2)
def disconnect(req): print("----------------------------------disconnect----------------------------------") if deb2 else None print("received data: ", req) if deb else None print("received data pub_id: ", req['pub_id']) if deb else None print("received data data: ", req['data']) if deb else None print("received data sign: ", req['sign']) if deb else None if UserFarm.query.filter_by(pub_id=req['pub_id']).first() is not None: app1 = UserFarm.query.filter_by(pub_id=req['pub_id']).first() print("UserFarm pub: ", app1.pub_id) if deb else None print("UserFarm priv: ", app1.pri_id) if deb else None print("decrypt pass on db: ", jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode()) if deb else None try: req_data = json.loads( jws.verify(req['data'], jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode(), algorithms=['HS256'])) except: emit('connect_estab', 5) print("decrypt data: ", req_data) if deb else None if Session.query.filter_by(session_id=req_data['ses_id'], pub_id=req['pub_id'], flag=True).first() is not None: app2 = Session.query.filter_by(session_id=req_data['ses_id'], pub_id=req['pub_id'], flag=True).first() if sign.verify_sign(app2.key, req['sign'], req['data']): print("valid sign") if deb else None app2.flag = False app2.time_end = datetime.datetime.utcnow() db.session.commit() print("DISC ---> user: "******" ses_id: ", req_data['ses_id']) if deb2 else None print("----------------------------------disconnect DONE----------------------------------") if deb2 else None emit('disc_response', 0) else: emit('disc_response', 2) else: emit('disc_response', 3) else: emit('disc_response', 1)
def connect_confirm(req): print("----------------------------------connect confirm----------------------------------") if deb2 else None print("received data: ", req) if deb else None print("received data pub_id: ", req['pub_id']) if deb else None print("received data data: ", req['data']) if deb else None print("received data sign: ", req['sign']) if deb else None if UserFarm.query.filter_by(pub_id=req['pub_id']).first() is not None: app1 = UserFarm.query.filter_by(pub_id=req['pub_id']).first() print("UserFarm pub: ", app1.pub_id) if deb else None print("UserFarm priv: ", app1.pri_id) if deb else None print("decrypt pass on db: ", jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode()) if deb else None try: req_data = json.loads(jws.verify(req['data'], jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode(), algorithms=['HS256'])) except: emit('connect_estab', 5) print("decrypt data: ", req_data) if deb else None if Session.query.filter_by(otp=req_data['otp'], flag=True).first() is not None: app2 = Session.query.filter_by(otp=req_data['otp'], flag=True).first() if sign.verify_sign(app2.key, req['sign'], req['data']): print("valid sign") if deb else None print("time_start : ", app2.time_start) if deb else None print("now - delta : ", datetime.datetime.utcnow() - datetime.timedelta(minutes=10)) if deb else None if app2.time_start > datetime.datetime.utcnow() - datetime.timedelta(minutes=10): ses_id = ''.join(secrets.choice(alphabet) for i in range(100)) app2.session_id = ses_id print("sid: ", request.sid) if deb else None app2.sid = request.sid db.session.commit() data = {"ses_id": ses_id} print("data resp: ", data) if deb else None print("app1.pri_id: ", jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode()) if deb else None crypt_data = jws.sign(data, jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode(), algorithm='HS256') print("encrypt data to send: ", crypt_data) if deb else None sign_crypt_data = sign.sign_data(key.exportKey(), crypt_data) print("sign of en data send: ", sign_crypt_data) if deb else None res2 = {"pub_id": app2.pub_id, "data": crypt_data, "sign": sign_crypt_data.decode()} print("send: ", res2) if deb else None print("TH CON CONF ---> user: "******" ses_id: ", ses_id) if deb2 else None print("----------------------------------connect_confirm DONE----------------------------------") if deb2 else None emit('connect_estab', res2) global thread if thread is None: thread = threading.Thread(target=check_changes(db)) thread.start() else: emit('connect_estab', 4) else: emit('connect_estab', 3) else: emit('connect_estab', 2) else: emit('connect_estab', 1)
def on_connect_estab(*resp): if type(resp[0]) == int: errors.manage_error(resp[0]) else: print('CONNECT ESTAB') if deb2 else None print("response: ", resp[0]) if deb else None print("data response: ", resp[0]['data']) if deb else None print("sign response: ", resp[0]['sign']) if deb else None print("priv_id: ", pri_id) if deb else None resp_data = json.loads( jws.verify(resp[0]['data'], pri_id, algorithms=['HS256']).decode()) print("decrypt data response: ", resp_data) if deb else None print("server key: ", server_key) if deb else None if sign.verify_sign(server_key, resp[0]['sign'], resp[0]['data']): print("valid sign") if deb else None global session_id session_id = resp_data['ses_id'] print("ses_id: ", resp_data['ses_id']) if deb else None print("CONNECT ESTAB DONE") if deb2 else None else: errors.manage_error(6)
def on_connect_response(*resp): print(resp) if deb else None if type(resp[0]) == int: errors.manage_error(resp[0]) else: print('CONNECT RESPONSE') if deb2 else None print("response: ", resp[0]) if deb else None print("data response: ", resp[0]['data']) if deb else None print("sign response: ", resp[0]['sign']) if deb else None resp_data = json.loads( jws.verify(resp[0]['data'], pri_id, algorithms=['HS256']).decode()) print("decrypt data response: ", resp_data) if deb else None print("key in data response: ", resp_data['key']) if deb else None if sign.verify_sign(resp_data['key'], resp[0]['sign'], resp[0]['data']): print("valid sign") if deb else None global server_key server_key = resp_data['key'] req_data = {"otp": resp_data['otp']} print("data to send: ", req_data) if deb else None crypt_data = jws.sign(req_data, pri_id, algorithm='HS256') print("encrypt data to send: ", crypt_data) if deb else None sign_crypt_data = sign.sign_data(key.exportKey(), crypt_data) print("sign of en data send: ", sign_crypt_data) if deb else None req2 = { "pub_id": pub_id, "data": crypt_data, "sign": sign_crypt_data.decode() } print("send: ", req2) if deb else None print("CONNECT RESPONSE DONE") if deb2 else None socketIO.emit('connect_confirm', req2) socketIO.on('connect_estab', on_connect_estab) socketIO.wait(seconds=3) else: errors.manage_error(6)
def configuration_dict(req): print("----------------------------------configuration dict----------------------------------") if deb2 else None print("received data: ", req) if deb else None print("received data pub_id: ", req['pub_id']) if deb else None print("received data data: ", req['data']) if deb else None print("received data sign: ", req['sign']) if deb else None if UserFarm.query.filter_by(pub_id=req['pub_id']).first() is not None: app1 = UserFarm.query.filter_by(pub_id=req['pub_id']).first() print("UserFarm pub: ", app1.pub_id) if deb else None print("UserFarm priv: ", app1.pri_id) if deb else None print("decrypt pass on db: ", jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode()) if deb else None try: req_data = json.loads(jws.verify(req['data'], jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode(),algorithms=['HS256'])) except: emit('conf_response', 5) print("decrypt data: ", req_data) if deb else None if Session.query.filter_by(session_id=req_data['ses_id'], pub_id=req['pub_id'], flag=True).first() is not None: app2 = Session.query.filter_by(session_id=req_data['ses_id'], pub_id=req['pub_id'], flag=True).first() if sign.verify_sign(app2.key, req['sign'], req['data']): print("valid sign") if deb else None if Farm.query.filter_by(pub_id=req['pub_id']).first() is not None: app3 = Farm.query.filter_by(pub_id=req['pub_id']).order_by(Farm.time_sam.desc(), Farm.time_con.desc()).first() row = app3.duplicate else: row = Farm(pub_id=req['pub_id'], time_con=datetime.datetime(1, 1, 1, 0, 0), time_sam=datetime.datetime(1, 1, 1, 0, 0)) if row.time_sam > datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S') and row.time_con > datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S'): emit('sample_response', 6) else: if row.time_con < datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S'): row.time_con = datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S') row.timeled_open_h = req_data['config']['timeLED']['openHour'] row.timeled_open_m = req_data['config']['timeLED']['openMinute'] row.timeled_close_h = req_data['config']['timeLED']['closeHour'] row.timeled_close_m = req_data['config']['timeLED']['closeMinute'] row.timedoor_open_h =req_data['config']['timeDoor']['openHour'] row.timedoor_open_m = req_data['config']['timeDoor']['openMinute'] row.timedoor_close_h = req_data['config']['timeDoor']['closeHour'] row.timedoor_close_m =req_data['config']['timeDoor']['closeMinute'] row.timenest_open_h = req_data['config']['timeNest']['openHour'] row.timenest_open_m = req_data['config']['timeNest']['openMinute'] row.timenest_close_h = req_data['config']['timeNest']['closeHour'] row.timenest_close_m = req_data['config']['timeNest']['closeMinute'] row.timeksr_open_h = req_data['config']['timeKsr']['openHour'] row.timeksr_open_m = req_data['config']['timeKsr']['openMinute'] row.timeksr_close_h = req_data['config']['timeKsr']['closeHour'] row.timeksr_close_m = req_data['config']['timeKsr']['closeMinute'] row.timeonfly_open_h = req_data['config']['timeOnFly']['openHour'] row.timeonfly_open_m = req_data['config']['timeOnFly']['openMinute'] row.timeonfly_close_h = req_data['config']['timeOnFly']['closeHour'] row.timeonfly_close_m = req_data['config']['timeOnFly']['closeMinute'] row.a_lux = req_data['config']['closeDoorBrightness']['lux'] row.a_hysteresis = req_data['config']['closeDoorBrightness']['hysteresis'] row.b_lux = req_data['config']['ledOffBrightness']['lux'] row.b_hysteresis = req_data['config']['ledOffBrightness']['hysteresis'] db.session.add(row) for x in range(1, 8): if Motor.query.filter_by(farm_id=req['pub_id'], motor_id=x).first() is not None: app4 = Motor.query.filter_by(farm_id=req['pub_id'], motor_id=x).order_by( Motor.time_sam.desc(), Motor.time_con.desc()).first() mot = app4.duplicate else: mot = Motor(farm_id=req['pub_id'], motor_id=x, time_sam=datetime.datetime(1, 1, 1, 0, 0), time_con=datetime.datetime(1, 1, 1, 0, 0)) print("Motor ", x, ": ", req_data['config'][mot_con[x-1]]['addresses']) if deb else None mot.addresses = req_data['config'][mot_con[x-1]]['addresses'] mot.numbers = req_data['config'][mot_con[x-1]]['numbers'] mot.time_ready = req_data['config'][mot_con[x-1]]['time'] mot.time_con = datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S') if mot.time_sam < datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S'): mot.active = req_data['config'][mot_con[x-1]]['active'] db.session.add(mot) for x in range(1, 7): if Led.query.filter_by(farm_id=req['pub_id'], led_id=x).first() is not None: app4 = Led.query.filter_by(farm_id=req['pub_id'], led_id=x).order_by( Led.time_sam.desc(), Led.time_con.desc()).first() led = app4.duplicate else: led = Led(farm_id=req['pub_id'], led_id=x, time_con=datetime.datetime(1, 1, 1, 0, 0), time_sam=datetime.datetime(1, 1, 1, 0, 0)) print("Led ", x, ": ", req_data['config'][le_con[x-1]]['addresses']) if deb else None led.addresses = req_data['config'][le_con[x-1]]['addresses'] led.numbers = req_data['config'][le_con[x-1]]['numbers'] led.dim_up_delay = req_data['config'][le_con[x-1]]['dimUpDelay'] led.dim_down_delay = req_data['config'][le_con[x-1]]['dimDownDelay'] led.dim_time = req_data['config'][le_con[x-1]]['dimTime'] led.active = req_data['config'][le_con[x-1]]['active'] led.time_con = datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S') if led.time_sam < datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S'): led.max_value = req_data['config'][le_con[x-1]]['maxValue'] db.session.add(led) db.session.commit() print("CONF DICT ---> user: "******" ses_id: ", req_data['ses_id']) if deb2 else None print("----------------------------------configuration_sample DONE----------------------------------") if deb2 else None emit('conf_response', 0) else: emit('conf_response', 6) else: emit('conf_response', 2) else: emit('conf_response', 3) else: emit('conf_response', 1)
def sample_dict(req): print("----------------------------------sample dict----------------------------------") if deb2 else None print("received data: ", req) if deb else None print("received data pub_id: ", req['pub_id']) if deb else None print("received data data: ", req['data']) if deb else None print("received data sign: ", req['sign']) if deb else None if UserFarm.query.filter_by(pub_id=req['pub_id']).first() is not None: app1 = UserFarm.query.filter_by(pub_id=req['pub_id']).first() print("UserFarm pub: ", app1.pub_id) if deb else None print("UserFarm priv: ", app1.pri_id) if deb else None print("decrypt pass on db: ", jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode()) if deb else None try: req_data = json.loads(jws.verify(req['data'], jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode(), algorithms=['HS256'])) except: emit('samp_response', 5) print("decrypt data: ", req_data) if deb else None if Session.query.filter_by(session_id=req_data['ses_id'], pub_id=req['pub_id'], flag=True).first() is not None: app2 = Session.query.filter_by(session_id=req_data['ses_id'], pub_id=req['pub_id'], flag=True).first() if sign.verify_sign(app2.key, req['sign'], req['data']): print("valid sign") if deb else None if Farm.query.filter_by(pub_id=req['pub_id']).first() is not None: app3 = Farm.query.filter_by(pub_id=req['pub_id']).order_by(Farm.time_sam.desc(), Farm.time_con.desc()).first() row = app3.duplicate else: row = Farm(pub_id=req['pub_id'], time_con=datetime.datetime(1, 1, 1, 0, 0), time_sam=datetime.datetime(1, 1, 1, 0, 0)) if row.time_sam > datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S') and row.time_con > datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S'): emit('sample_response', 6) else: if row.time_sam < datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S'): row.lux = req_data['data']['lightsensor'] print("lightsensor: ", req_data['data']['lightsensor']) if deb else None row.time_sam = datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S') if row.time_con < datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S'): db.session.add(row) for x in range(1, 8): if Motor.query.filter_by(farm_id=req['pub_id'], motor_id=x).first() is not None: app4 = Motor.query.filter_by(farm_id=req['pub_id'], motor_id=x).order_by(Motor.time_sam.desc(), Motor.time_con.desc()).first() mot = app4.duplicate else: mot = Motor(farm_id=req['pub_id'], motor_id=x, time_sam=datetime.datetime(1, 1, 1, 0, 0), time_con=datetime.datetime(1, 1, 1, 0, 0)) mot.active = req_data['data'][mot_sam[x-1]] mot.time_sam = datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S') db.session.add(mot) print("Motor ", x, ": ", req_data['data'][mot_sam[x-1]]) if deb else None for x in range(1, 7): if Led.query.filter_by(farm_id=req['pub_id'], led_id=x).first() is not None: app4 = Led.query.filter_by(farm_id=req['pub_id'], led_id=x).order_by(Led.time_sam.desc(), Led.time_con.desc()).first() led = app4.duplicate else: led = Led(farm_id=req['pub_id'], led_id=x, time_con=datetime.datetime(1, 1, 1, 0, 0), time_sam=datetime.datetime(1, 1, 1, 0, 0)) led.max_value = req_data['data'][le_sam[x-1]] led.time_sam = datetime.datetime.strptime(req_data['time'], '%Y-%m-%d %H:%M:%S') db.session.add(led) print("Led ", x, ": ", req_data['data'][mot_sam[x-1]]) if deb else None db.session.commit() print("SAMP DICT ---> user: "******" ses_id: ", req_data['ses_id']) if deb2 else None print("----------------------------------ample_dict DONE----------------------------------") if deb2 else None emit('samp_response', 0) else: emit('samp_response', 6) else: emit('samp_response', 3)
def sample_dict(req): print( "----------------------------------sample dict----------------------------------" ) if deb2 else None print("received data: ", req) if deb else None print("received data pub_id: ", req['pub_id']) if deb else None print("received data data: ", req['data']) if deb else None print("received data sign: ", req['sign']) if deb else None if UserFarm.query.filter_by(pub_id=req['pub_id']).first() is not None: app1 = UserFarm.query.filter_by(pub_id=req['pub_id']).first() print("UserFarm pub: ", app1.pub_id) if deb else None print("UserFarm priv: ", app1.pri_id) if deb else None print("decrypt pass on db: ", jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode()) if deb else None try: req_data = json.loads( jws.verify(req['data'], jws.verify(app1.pri_id, priv_id, algorithms=['HS256']).decode(), algorithms=['HS256'])) except: emit('samp_response', 5) print("decrypt data: ", req_data) if deb else None if Session.query.filter_by(session_id=req_data['ses_id'], pub_id=req['pub_id'], flag=True).first() is not None: app2 = Session.query.filter_by(session_id=req_data['ses_id'], pub_id=req['pub_id'], flag=True).first() if sign.verify_sign(app2.key, req['sign'], req['data']): print("valid sign") if deb else None if app1.time_sam > datetime.datetime.strptime( req_data['time'], '%Y-%m-%d %H:%M:%S' ) and app1.time_con > datetime.datetime.strptime( req_data['time'], '%Y-%m-%d %H:%M:%S'): emit('sample_response', 6) else: if app1.time_sam < datetime.datetime.strptime( req_data['time'], '%Y-%m-%d %H:%M:%S'): app1.lux = req_data['data']['lightsensor'] print("lightsensor: ", req_data['data']['lightsensor']) if deb else None app1.time_sam = datetime.datetime.strptime( req_data['time'], '%Y-%m-%d %H:%M:%S') if app1.time_con < datetime.datetime.strptime( req_data['time'], '%Y-%m-%d %H:%M:%S'): for x in range(1, 8): app3 = Motor.query.filter_by( farm_id=req['pub_id'], motor_id=x).first() app3.active = req_data['data'][mot_sam[x - 1]] print("Motor ", x, ": ", req_data['data'][ mot_sam[x - 1]]) if deb else None for x in range(1, 7): app3 = Led.query.filter_by( farm_id=req['pub_id'], led_id=x).first() app3.max_value = req_data['data'][le_sam[x - 1]] print("Led ", x, ": ", req_data['data'][ mot_sam[x - 1]]) if deb else None db.session.commit() print("SAMP DICT ---> user: "******" ses_id: ", req_data['ses_id']) if deb2 else None print( "----------------------------------ample_dict DONE----------------------------------" ) if deb2 else None emit('samp_response', 0) else: emit('samp_response', 6) else: emit('samp_response', 3)