Ejemplo n.º 1
0
    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)