protected override void DoPost(CoapExchange exchange) { string payload = exchange.Request.PayloadString; if (payload != null) { EntidadPeticionSegura peticionSegura = JsonConvert.DeserializeObject <EntidadPeticionSegura>(payload); //Deserializamos la peticion en un objeto de tipo json EntidadPeticion peticion = servicioSeguridad.ToEntidadPeticion(peticionSegura); var insercion = Task.Run(async() => await servicioInsertaInformacion.InsertaPeticion(peticion)); //Lanzamos la peticion para que inserte los datos de forma asincrona if (insercion.Result) { exchange.Respond(CoAP.StatusCode.Changed); } else { log.Error("ERR RECURSOPETICION (DoPost) - No se ha podido insertar la información en la base de datos."); exchange.Respond(CoAP.StatusCode.BadRequest); } } else { log.Error("ERR RECURSOPETICION (DoPost) - La petición está vacía."); } }
public EntidadPeticionSegura ToEntidadPeticionSegura(EntidadPeticion peticion) { EntidadPeticionSegura entidadPeticionSegura; string peticionSerializada = JsonConvert.SerializeObject(peticion); try { Aes aes = GenerarClaveAES(); byte[] peticionSegura = CifrarAES(peticionSerializada, aes.Key, aes.IV); entidadPeticionSegura = new EntidadPeticionSegura() { Clave = CifrarRSA(aes.Key), IV = CifrarRSA(aes.IV), Peticion = peticionSegura }; } catch (Exception ex) { entidadPeticionSegura = null; log.Error($"SERVICIOSEGURIDAD (ToEntidadPeticionSegura) - {ex.Message}"); } return(entidadPeticionSegura); }
public async Task <bool> InsertaPeticion(EntidadPeticion entidadPeticion) { if (entidadPeticion == null) { return(false); } string nombreProyecto = entidadPeticion.Proyecto; string nombreEstacionBase = entidadPeticion.EstacionBase; string nombreSensor = entidadPeticion.Sensor; int estacionId = -1, sensorId = -1; bool result = true; //booleano para saber si ha ocurrido un error durante la insercion de datos try { //obtenemos los datos: id de la estacion e id del sensor estacionId = await repositorioEstacion.ObtenerId(nombreProyecto, nombreEstacionBase); sensorId = await repositorioSensor.ObtenerId(nombreSensor, estacionId); if (estacionId != -1 && sensorId != -1) { foreach (EntidadDatoBase datoBase in entidadPeticion.Datos) { var dato = new EntidadDato(); dato.Stamp = datoBase.Stamp; dato.Humedad = datoBase.Humedad; dato.Temperatura = datoBase.Temperatura; dato.FK_IdSensor = sensorId; result = (result && await repositorioSensor.InsertaDato(dato)); //si falla alguna da false } } else { if (estacionId == -1) { log.Warning($"ERR. SERVICIO INSERTA INFORMACION (InsertaPeticion) - No existe la estacion '{nombreEstacionBase}' en la base de datos"); } if (sensorId == -1) { log.Warning($"ERR. SERVICIO INSERTA INFORMACION (InsertaPeticion) - No existe el sensor {sensorId} en la base de datos"); } result = false; } } catch (Exception ex) { log.Error($"ERR. SERVICIO INSERTA INFORMACION (InsertaPeticion) -{ex.Message}"); result = false; } return(result); }
protected override void DoPost(CoAP.Server.Resources.CoapExchange exchange) { String payload = exchange.Request.PayloadString; EntidadPeticion entidadPeticion = JsonConvert.DeserializeObject <EntidadPeticion>(payload); Task.Run(async() => await servicioInsertaInformacion.InsertaPeticion(entidadPeticion)); Console.WriteLine(entidadPeticion.Sensor); exchange.Respond(CoAP.StatusCode.Changed); }
//[TestMethod] public void TestCambioEntidades() { string ficheroClavePublica = @"C:\Users\abox\Development\TFG-Angela\Claves\publica.key"; string ficheroClavePrivada = @"C:\Users\abox\Development\TFG-Angela\Claves\privada.key"; ServicioSeguridad servicioAPI = new ServicioSeguridad(ficheroClavePrivada, null); ServicioSeguridad servicioWorker = new ServicioSeguridad(ficheroClavePublica, null); // > ENTIDAD PETICION INCIAL - SIN SEGURIDAD EntidadPeticion inicial = new EntidadPeticion() { Proyecto = "Matrix", EstacionBase = "EB04", Sensor = "SE00" }; List <EntidadDatoBase> datos = new List <EntidadDatoBase>(); DateTime stampInicial = DateTime.UtcNow; Random rnd = new Random(); for (int i = 0; i < 20; i++) { datos.Add(new EntidadDatoBase() { Humedad = rnd.Next(0, 11), Temperatura = rnd.Next(20, 32), Stamp = stampInicial.AddMinutes(i) }); } inicial.Datos = datos; // > ENTIDAD PETICION CIFRADA - CON SEGURIDAD EntidadPeticionSegura cifrada = servicioWorker.ToEntidadPeticionSegura(inicial); ServicioSeguridad.LimpiaClaveRSA(); // > ENTIDAD PETICION DESCIFRADA - DESCIFRADA CON SEGURIDAD EntidadPeticion descifrada = servicioAPI.ToEntidadPeticion(cifrada); // > ASSERTS Assert.AreEqual(inicial.Proyecto, descifrada.Proyecto); Assert.AreEqual(inicial.EstacionBase, descifrada.EstacionBase); Assert.AreEqual(inicial.Sensor, descifrada.Sensor); Assert.AreEqual(inicial.Datos.Count(), descifrada.Datos.Count()); var datosIniciales = inicial.Datos.OrderBy(_ => _.Stamp); var datosDescifrados = descifrada.Datos.OrderBy(_ => _.Stamp); for (int i = 0; i < datosIniciales.Count(); i++) { Assert.AreEqual(datosIniciales.ElementAt(i).Stamp.Ticks, datosDescifrados.ElementAt(i).Stamp.Ticks); Assert.AreEqual(datosIniciales.ElementAt(i).Humedad, datosDescifrados.ElementAt(i).Humedad); Assert.AreEqual(datosIniciales.ElementAt(i).Temperatura, datosDescifrados.ElementAt(i).Temperatura); } }
private string GetData(string fileName) { string request; var dateFormat = "yyyy-MM-dd HH:mm:ss"; //formato utilizado al componer el json en el campo stamp var dateTimeConverter = new IsoDateTimeConverter { DateTimeFormat = dateFormat }; List <EntidadDatoBase> data = new List <EntidadDatoBase>(); var splittedFileName = fileName.Split('_', '.'); try { using (var sr = new StreamReader($@"{directorioSensores}{fileName}")) { while (sr.Peek() > -1) { string linea = sr.ReadLine(); if (!string.IsNullOrEmpty(linea)) { var datoJSON = JsonConvert.DeserializeObject <EntidadDatoBase>(linea, dateTimeConverter); data.Add(datoJSON); } } EntidadPeticion peticion = new EntidadPeticion() { Proyecto = FactoriaServicios.Proyecto, EstacionBase = FactoriaServicios.EstacionBase, Sensor = splittedFileName.ElementAt(0), Datos = data }; EntidadPeticionSegura peticionSegura = servicioSeguridad.ToEntidadPeticionSegura(peticion); request = JsonConvert.SerializeObject(peticionSegura); } }catch (Exception ex) { request = null; _logger.Error($"ERR WORKER (GetData) - {ex.Message}"); } return(request); }
public async Task TestInsertaInformacion() { DateTime stampInicial = DateTime.UtcNow; float humedad = 23, temperatura = 25; var listaDatos = new List <EntidadDatoBase>() { new EntidadDatoBase() { Humedad = humedad, Temperatura = temperatura, Stamp = stampInicial }, new EntidadDatoBase() { Humedad = humedad, Temperatura = temperatura, Stamp = stampInicial.AddMinutes(1) }, new EntidadDatoBase() { Humedad = humedad, Temperatura = temperatura, Stamp = stampInicial.AddMinutes(2) }, new EntidadDatoBase() { Humedad = humedad, Temperatura = temperatura, Stamp = stampInicial.AddMinutes(3) }, new EntidadDatoBase() { Humedad = humedad, Temperatura = temperatura, Stamp = stampInicial.AddMinutes(4) } }; EntidadPeticion peticion = new EntidadPeticion() { Sensor = sensor, Proyecto = proyecto, EstacionBase = estacionBase, Datos = listaDatos }; try { var resultado = await servicioInsertaInformacion.InsertaPeticion(peticion); Assert.IsNotNull(resultado); Assert.IsTrue(resultado); } catch (Exception ex) { Assert.Fail(ex.Message); } try { var datosBd = await repositorioSensor.ObtenerDatos(idSensor, stampInicial.AddMinutes(-1), stampInicial.AddMinutes(5)); Assert.IsNotNull(datosBd); Assert.AreEqual(listaDatos.Count(), datosBd.Count()); } catch (Exception ex) { Assert.Fail(ex.Message); } }