def on_message(self, message): logger = logging.getLogger() answer = None data = helper.is_json(message) logger.warning(data) if data == False: self.write_message('malformed JSON') log(fh, 1, 'Out: '+'malformed JSON') return obj = msg_type = sid = None if "MSG_TYPE" not in data: answer = helper.build_json_answer( data["ID"], "INVALID", json.dumps("PLEASE ENTER MESSAGE TYPE")) self.write_message(answer) return MSG_TYPE = data["MSG_TYPE"] if MSG_TYPE == "SAVE_ROOM_TO_DATABASE": room = Rooms() room.name = data["ROOM_NAME"] room.data = data["ROOM_DATA"] logger.warning(data["ROOM_DATA"]) try: session.add(room) session.commit() except: session.rollback() answer = helper.build_json_answer( data["ID"], "SUCCESS", json.dumps(room.name + " erfolgreich hinzugefügt")) elif MSG_TYPE == "GET_ROOM_FROM_DATABASE": room = session.query(Rooms).get(data["ROOM_NAME"]) logger.warning(room) answer = helper.build_json_answer( data["ID"], MSG_TYPE, json.dumps(room.data)) elif MSG_TYPE == "SHOW_ALL_ROOMS": result = session.query(Rooms).all() room_names = [] for room in result: logger.warning(room) room_names.append(room.name) answer = helper.build_json_answer( data["ID"], MSG_TYPE, json.dumps(room_names)) # elif MSG_TYPE == "GET_SENSORDATA_FROM_DATABASE": # sensor = session.query(Sensor_Data).get(data["DATA_TYPE"]) # logger.warning(sensor) # answer = helper.build_json_answer( # data["ID"], MSG_TYPE, json.dumps(sensor.data)) elif MSG_TYPE == "SHOW_ALL_SENSOR_DATA": result = session.query(Sensor_Data).all() csuids = [] panids = [] tmps = [] hums = [] co2s = [] vocs = [] bats = [] times = [] dates = [] sensor = [csuids, panids, tmps, hums, co2s, vocs, bats, times, dates] for sensDat in result: logger.warning(sensDat) csuids.append(sensDat.csUID) panids.append(sensDat.panID) tmps.append(sensDat.tmp) hums.append(sensDat.hum) co2s.append(sensDat.co2) vocs.append(sensDat.voc) bats.append(sensDat.bat) times.append(sensDat.time) dates.append(sensDat.date) answer = helper.build_json_answer( data["ID"], MSG_TYPE, json.dumps(sensor)) elif MSG_TYPE == "GET_ALL_SETTINGS": result = session.query(Settings).all() settings = [] for setting in result: settings.append({RULE: setting.rule, VALUE: setting.value}) answer = helper.build_json_answer( data["ID"], MSG_TYPE, json.dumps(settings)) logger.warning(result) elif MSG_TYPE == "LOGIN": result = {"STATUS": "FAIL"} user = session.query(User).get(data["EMAIL"]) if user: if (pbkdf2_sha256.verify(data["PASSWORD"], user.password) == True): result = { "STATUS": "SUCCESS", "EMAIL": user.email, "USERNAME": user.username, "LAST_LOGIN": user.last_login } answer = helper.build_json_answer( data["ID"], MSG_TYPE, json.dumps(result, default=str)) elif MSG_TYPE == "REGISTER": hashed_password = pbkdf2_sha256.encrypt( data["PASSWORD"], rounds=12000, salt_size=16) user = User() user.email = data["EMAIL"] user.password = hashed_password user.username = data["USERNAME"] user.last_login = time() try: session.add(user) session.commit() except Exception as e: logger.error('Error at %s', 'division', exc_info=e) session.rollback() self.write_message(helper.build_json_answer( data["ID"], MSG_TYPE, json.dumps({"STATUS": "DUPLICATE"}))) return result = session.query(User).get(data["EMAIL"]) result = { "EMAIL": result.email, "PASSWORD": result.password } answer = helper.build_json_answer( data["ID"], MSG_TYPE, json.dumps(result)) else: answer = helper.build_json_answer( data["ID"], "INVALID", json.dumps("INVALID MESSAGE TYPE")) if answer: logger.warning(answer) self.write_message(answer)