def actualizar_reglas(self, sensor_type : str, regla: str) -> RestResponse: """ Manda una orden para cambiar las reglas de un sensor --- Parameters: - sensor_type: Tipo del sensor. - regla: regla a cambiar del sensor Returns: A RestResponse object holding the result of the operation. """ try: if int(sensor_type)==1: self.__sensor1.cambiar_reglas(regla) resultado = self.__sensor1.obtenerSensor() resultado_json = json.dumps(resultado) elif int(sensor_type)==2: self.__sensor2.cambiar_reglas(regla) resultado = self.__sensor2.obtenerSensor() resultado_json = json.dumps(resultado) else: resultado = 'Sensor no implementado, en proximas actualizaciones...' except ValueError: return RestResponse(code=400,mime_type='text/plain') return RestResponse(resultado_json , 200, mime_type='text/plain')
def obtenerTodosSensores(self) -> RestResponse: devuelto = self.__sensores.keys() if devuelto == []: return RestResponse('No sensors', 404, 'text/plain') else: res_content_json = json.dumps(devuelto) return RestResponse(res_content_json, 200, 'text/plain')
def create_rule(self, rule_name: str, rule_type: str, data: str, frequency: int, user: str) -> RestResponse: """ Creates a rule. --- Parameters: - rulename: The rule name string. - ruletype: The type of the rule string. (text: command, file) - ruleargs: A command or a file path. - frequency (seconds): 0 if it does not execute automatically. - user: The username string. Returns: A RestResponse object holding the result of the operation. """ try: if not self.get_auth_service().has_right(user, "AdminRules"): return RestResponse(code=401, mime_type="text/plain") self.get_rule_manager().create_rule(rule_name, rule_type, data, frequency) except ValueError: return RestResponse(code=400, mime_type="text/plain") except RuleExistsError: return RestResponse(code=409, mime_type="text/plain") except NotFoundError: return RestResponse(code=401, mime_type="text/plain") return RestResponse(mime_type="text/plain")
def add_sensor(self, sensorName: str, sensorType: str, parameters = "") -> RestResponse: if sensorType not in self.__tipo_sensores or sensorName in self.__sensores: return RestResponse('Not found', 404, 'text/plain') else: if sensorType == 'sensorFile': self.__sensores[sensorName] = SensorFile(parameters) return RestResponse('OK', 200, 'text/plain') elif sensorType == 'sensorSystem': self.__sensores[sensorName] = SensorSystem(parameters) return RestResponse('OK', 200, 'text/plain') else: return RestResponse('BAD ARGUMENTS', 400, 'text/plain')
def set_sensor(self, sensorName: str, sensorType : str, parameters = "")-> RestResponse: '''Devido a las caracteristicas de los doccionarios de python sirve tanto para crear como para modificar sensores''' if sensorType not in self.__tipo_sensores or sensorName not in self.__sensores: return RestResponse('Not found', 404, 'text/plain') else: if sensorType == 'sensorFile': self.__sensores[sensorName] = SensorFile(parameters) return RestResponse('OK', 200, 'text/plain') elif sensorType == 'sensorSystem': self.__sensores[sensorName] = SensorSystem(parameters) return RestResponse('OK', 200, 'text/plain') else: return RestResponse('BAD ARGUMENTS', 400, 'text/plain')
def logout(self, token: str) -> RestResponse: """ Logs out a user/session. --- Parameters: - token: The session token string. Returns: A RestResponse object with the request response. """ try: self.get_user_session_manager().logout(token) return RestResponse(mime_type='text/plain') except SessionNotFoundError: return RestResponse(code=401, mime_type='text/plain')
def obtenerRespuestaSensor(self, nombreSensor:str) -> RestResponse: keys = self.__sensores.keys() flag = False for s in keys: if nombreSensor == s: flag = True break if flag: valor_sensor = str(self.__sensores[nombreSensor].monitorizar()) return RestResponse(valor_sensor, 200, 'text/plain') else: #Si no existe el sensor ERROR 404 return RestResponse(code = 404, mime_type = 'text/plain')
def login(self, username: str, password: str) -> RestResponse: """ Logs in a user. --- Parameters: - username: The user name string. - password: The user password string. Returns: A RestResponse object with the request response. """ try: session_id = self.get_user_session_manager().login( username, password) res_content = {'session_id': session_id} res_content_json = json.dumps(res_content, separators=(',', ':')) return RestResponse(res_content_json, mime_type='application/json') except InvalidCredentialsError: return RestResponse(code=401, mime_type='text/plain')
def get_log(self, user: str) -> RestResponse: """ Gets the log. --- Parameters: - user: The username string. Returns: A RestResponse object holding the result of the operation. """ try: if not self.get_auth_service().has_right(user, "ViewReports"): return RestResponse(code=401, mime_type="text/plain") except NotFoundError: return RestResponse(code=401, mime_type="text/plain") result = self.get_log_manager().get_all_runs() json_content = [str(log) for log in result] json_response = json.dumps(json_content) return RestResponse(json_response, mime_type="application/json")
def run_rule(self, rule_name: str, user: str) -> RestResponse: """ Creates a new user. --- Parameters: - rulename: The rule name string. - user: The username string. Returns: A RestResponse object holding the result of the operation. """ try: if not self.get_auth_service().has_right(user, "AdminRules"): return RestResponse(code=401, mime_type="text/plain") if not self.get_auth_service().has_right(user, "ViewReports"): return RestResponse(code=401, mime_type="text/plain") result = self.get_rule_manager().run_rule(rule_name, self.get_log_manager()) json_content = {"result": result} json_response = json.dumps(json_content) return RestResponse(json_response, mime_type="application/json") except ValueError: return RestResponse(code=400, mime_type='text/plain') except RuleNotExistsError: return RestResponse(code=404, mime_type='text/plain') except RuleRunError: return RestResponse(code=500, mime_type="text/plain") except NotFoundError: return RestResponse(code=401, mime_type="text/plain")
def has_right(self, username: str, right_name: str) -> RestResponse: """ Gets whether a user has a given right or not. --- Parameters: - username: The name of the user. - right_name: The name of the right. - right_validator: The user right validator to use. Returns: A RestResponse object with the request response. """ try: right: UserRightName = UserRightName[right_name] if self.get_user_right_validator().has_right(username, right): return RestResponse(mime_type='text/plain') return RestResponse(code=404, mime_type='text/plain') except KeyError: return RestResponse(code=404, mime_type='text/plain') except UserNotFoundError: return RestResponse(code=404, mime_type='text/plain')
def delete_rule(self, rule_name: str, user: str) -> RestResponse: """ Deletes a rule. --- Parameters: - rulename: The rule name string. - user: The username string. Returns: A RestResponse object holding the result of the operation. """ try: if not self.get_auth_service().has_right(user, "AdminRules"): return RestResponse(code=401, mime_type="text/plain") self.get_rule_manager().delete_rule(rule_name) except ValueError: return RestResponse(code=400, mime_type="text/plain") except RuleNotExistsError: return RestResponse(code=404, mime_type="text/plain") except NotFoundError: return RestResponse(code=401, mime_type="text/plain") return RestResponse(mime_type="text/plain")
def create(self, username: str, password: str, token: str) -> RestResponse: """ Creates a new user. --- Parameters: - username: The user name string. - password: The password string. - token: The session token string. Returns: A RestResponse object holding the result of the operation. """ try: self.get_user_manager().create_user( username, password, token, self.get_user_right_validator()) except ValueError: return RestResponse(code=400, mime_type='text/plain') except InsufficientRightsError: return RestResponse(code=401, mime_type='text/plain') except UserExistsError: return RestResponse(code=409, mime_type='text/plain') return RestResponse(mime_type='text/plain')
def get_rule(self, rule_name: str, user: str) -> RestResponse: """ Gets a rule. --- Parameters: - rulename: The rule name string. - user: The username string. Returns: A RestResponse object holding the result of the operation. """ try: if not self.get_auth_service().has_right(user, "AdminRules"): return RestResponse(code=401, mime_type="text/plain") result = self.get_rule_manager().get_rule(rule_name) json_response = json.dumps(str(result)) return RestResponse(json_response, mime_type="application/json") except ValueError: return RestResponse(code=400, mime_type="text/plain") except RuleNotExistsError: return RestResponse(code=400, mime_type="text/plain") except NotFoundError: return RestResponse(code=401, mime_type="text/plain")
def monitorizarSensor(self, sensor_type : str) -> RestResponse: """ Extrae los resultados del sensor --- Parameters: - sensor_type: Tipo del sensor. Returns: A RestResponse object holding the result of the operation. """ try: if int(sensor_type)==1: resultado = self.__sensor1.obtenerSensor() resultado_json = json.dumps(resultado) elif int(sensor_type)==2: resultado = self.__sensor2.obtenerSensor() resultado_json = json.dumps(resultado) else: resultado = 'Sensor no implementado, en proximas actualizaciones...' except ValueError: return RestResponse(code=400,mime_type='text/plain') return RestResponse(resultado_json , 200, mime_type='text/plain')
def revoke(self, username: str, right_name: str, token: str) -> RestResponse: """ Revokes a right from a user. --- Parameters: - username: The name of the user to revoke the right from. - right_name: The name of the right to be revoked. - token: The session token string. Returns: A RestResponse object with the request response. """ try: right: UserRightName = UserRightName[right_name] self.get_user_right_manager().revoke( username, right, token, self.get_user_right_validator()) return RestResponse(mime_type='text/plain') except KeyError: return RestResponse(code=404, mime_type='text/plain') except UserNotFoundError: return RestResponse(code=404, mime_type='text/plain') except SessionNotFoundError: return RestResponse(code=401, mime_type='text/plain') except InsufficientRightsError: return RestResponse(code=401, mime_type='text/plain')
def obtenerValoresTodosSensores(self) -> RestResponse: res_sensors = {} for sensor in self.__sensores: res_sensors[sensor] = self.__sensores[sensor].monitorizar() res_content_json = json.dumps(res_sensors) return RestResponse(res_content_json, 200, mime_type='application/json')
def get_posibles_tipos(self)->RestResponse: print(self.__tipo_sensores) res_content_json = json.dumps(self.__tipo_sensores) return RestResponse(res_content_json, 200, mime_type='application/json')
def remove_sensor(self, sensorName: str) -> RestResponse: self.__sensores.pop(sensorName) return RestResponse('OK', 200, 'text/plain')