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); }
//[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 EntidadPeticion ToEntidadPeticion(EntidadPeticionSegura peticionSegura) { EntidadPeticion entidadPeticion; try { byte[] clave = DescifrarRSA(peticionSegura.Clave); byte[] IV = DescifrarRSA(peticionSegura.IV); string peticion = DescifrarAES(peticionSegura.Peticion, clave, IV); entidadPeticion = JsonConvert.DeserializeObject <EntidadPeticion>(peticion); } catch (Exception ex) { entidadPeticion = null; log.Error($"SERVICIOSEGURIDAD (ToEntidadPeticion) - {ex.Message}"); } return(entidadPeticion); }