Example #1
0
        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);
        }
Example #3
0
        //[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);
            }
        }
Example #4
0
        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);
        }