示例#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);
        }
        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);
        }
示例#4
0
        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);
        }
示例#5
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);
            }
        }
示例#6
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);
        }
示例#7
0
        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);
            }
        }