Пример #1
0
        /// <summary>
        /// Realiza actualizaciones en plataformas de terceros sin afectar el flujo operativo de la aplicación
        /// </summary>
        /// <param name="id_movimiento">Id de Movimiento de interés</param>
        /// <param name="id_usuario">Id de Usuario</param>
        public RetornoOperacion ActualizaPlataformaTerceros(int id_usuario)
        {
            //Declarando objeto de resultado
            RetornoOperacion resultado = new RetornoOperacion(0);

            //Asignando id de servicio
            resultado = new RetornoOperacion(this._id_servicio);

            //Si se requiere reporte a OMNITRACS (Ref. Servidor FTP)
            if (Referencia.CargaReferencia(this._id_compania_emisor, 25, ReferenciaTipo.ObtieneIdReferenciaTipo(this._id_compania_emisor, 25, "Servidor", 0, "FTP Omnitracs")) != "")
            {
                //Recuperando referencia de secuencia de notificación a proveedor satelital
                using (Referencia rs = new Referencia(Referencia.CargaRegistroReferencia("0", 1, this._id_servicio, "Rastreo Satelital", "Notificación Proveedor Satelital")))
                {
                    //Reportando actualización de servicio
                    resultado = enviaInformacionServicioFTP(Convert.ToInt32(Cadena.RegresaElementoNoVacio(rs.valor, "0")), System.Text.Encoding.UTF8);

                    //Si no hay errores
                    if (resultado.OperacionExitosa)
                    {
                        //Si ya existia un registro de secuencia de notificación
                        if (rs.id_referencia > 0)
                        {
                            //Actualizando su valor
                            resultado = Referencia.EditaReferencia(rs.id_referencia, (Convert.ToInt32(rs.valor) + 1).ToString(), id_usuario);
                        }
                        //Si no existe
                        else
                        {
                            resultado = Referencia.InsertaReferencia(this._id_servicio, 1, ReferenciaTipo.ObtieneIdReferenciaTipo(0, 1, "Notificación Proveedor Satelital", 0, "Rastreo Satelital"), "1", Fecha.ObtieneFechaEstandarMexicoCentro(), id_usuario);
                        }
                    }
                }
            }


            //Devolviendo resultado
            return(resultado);
        }
Пример #2
0
        /// <summary>
        /// Actualiza el token de dispositivo, asignado para servicios FCM
        /// </summary>
        /// <param name="id_usuario_sesion">Id de Sesión de Usuario</param>
        /// <returns></returns>
        private RetornoOperacion actualizaTokenFireBaseCloudMessaging(int id_usuario_sesion, string token)
        {
            //Declarando objeto de resultado
            RetornoOperacion resultado = new RetornoOperacion(id_usuario_sesion);

            //Inicializando bloque transaccional
            using (TransactionScope scope = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
            {
                //Instanciando sesión solicitada
                using (UsuarioSesion sesion = new UsuarioSesion(id_usuario_sesion))
                {
                    //Validando estatus de sesión
                    if (sesion.EstatusSesion == UsuarioSesion.Estatus.Activo)
                    {
                        //Obteniendo Referencia de token existente para el registro de usuario de la sesión
                        using (DataTable mitTokenActual = Referencia.CargaReferencias(sesion.id_usuario, 30, ReferenciaTipo.ObtieneIdReferenciaTipo(0, 30, "Token FCM", 0, "Configuración")))
                        {
                            //Si existe alguna
                            if (mitTokenActual != null)
                            {
                                //Verificando existencia de esta misma referencia
                                using (Referencia tokenDuplicado = new Referencia(token, ReferenciaTipo.ObtieneIdReferenciaTipo(sesion.id_compania_emisor_receptor, 30, "Token FCM", 0, "Configuración")))
                                {
                                    //Si hay alguna existente que no sea la referencia del token actual a editar
                                    if (tokenDuplicado.id_referencia > 0 && tokenDuplicado.id_referencia != Convert.ToInt32(mitTokenActual.Rows[0]["Id"]))
                                    {
                                        //Verificando si está asignado a un usuario con sesiones móviles activas
                                        if (UsuarioSesion.ObtieneSesionesActivasUsuario(tokenDuplicado.id_registro, UsuarioSesion.TipoDispositivo.Android) != null)
                                        {
                                            //Señalando error
                                            resultado = new RetornoOperacion(String.Format("El Token está asignado a una sesión activa de '{0}', cierre la sesión antes de continuar.", new SAT_CL.Seguridad.Usuario(tokenDuplicado.id_registro).nombre));
                                        }
                                        //Si no hay asignación
                                        else
                                        {
                                            //Borrando el token del usuario anterior
                                            resultado = Referencia.EditaReferencia(tokenDuplicado.id_referencia, "", sesion.id_usuario);
                                        }
                                    }
                                }

                                //Si no hay errores
                                if (resultado.OperacionExitosa)
                                {
                                    //Editando registro previo
                                    resultado = Referencia.EditaReferencia(Convert.ToInt32(mitTokenActual.Rows[0]["Id"]), token, sesion.id_usuario);
                                }
                                else
                                {
                                    resultado = new RetornoOperacion(String.Format("Error al borrar Token anterior: {0}", resultado.Mensaje));
                                }
                            }
                            //Si no existe alguna
                            else
                            {
                                //Insertando nuevo elemento
                                resultado = Referencia.InsertaReferencia(sesion.id_usuario, 30, ReferenciaTipo.ObtieneIdReferenciaTipo(sesion.id_compania_emisor_receptor, 30, "Token FCM", 0, "Configuración"), token, Fecha.ObtieneFechaEstandarMexicoCentro(), sesion.id_usuario);
                            }
                        }
                    }
                    //Si la sesión ya no se encuentra activa
                    else
                    {
                        resultado = new RetornoOperacion("La Sesión ha Expirado.");
                    }
                }

                //Si no hay errores
                if (resultado.OperacionExitosa)
                {
                    scope.Complete();
                }
            }

            //Devolviendo resultado
            return(resultado);
        }
Пример #3
0
        /// <summary>
        /// Realiza las validaciones necesarias sobre la cuenta de usuario indicada y permite el acceso remoto a la plataforma.
        /// </summary>
        /// <param name="email">Email registrado en cuenta de usuario activa</param>
        /// <param name="contrasena">Contraseña asignada por el usuario para su inicio de sesión</param>
        /// <returns>TSDK.Base.RetornoOperacion en formato xml</returns>
        public string AutenticaUsuario(string email, string contrasena)
        {
            //Declarando objeto de retorno
            RetornoOperacion resultado;
            int idTipoReferencia = 0;

            //Validando conjunto de datos requeridos
            if (!string.IsNullOrEmpty(email) && !string.IsNullOrEmpty(contrasena))
            {
                //Instanciando usuario
                using (SAT_CL.Seguridad.Usuario u = new SAT_CL.Seguridad.Usuario(email))
                {
                    //Realizando autenticación de usuario solicitado
                    resultado = u.AutenticaUsuario(contrasena);

                    //Validando Operación Exitosa
                    if (resultado.OperacionExitosa)
                    {
                        //Obteniendo Tipo
                        idTipoReferencia = ReferenciaTipo.ObtieneIdReferenciaTipo(0, 30, "Codigo Acceso", 0, "Configuración");

                        //Obteniendo Referencia de Codigo
                        using (DataTable dtReferencias = Referencia.CargaReferencias(u.id_usuario, 30, idTipoReferencia))
                        {
                            //Validando que exista la Referencia
                            if (Validacion.ValidaOrigenDatos(dtReferencias))
                            {
                                //Recorriendo Ciclo
                                foreach (DataRow dr in dtReferencias.Rows)
                                {
                                    //Editando Referencia
                                    resultado = Referencia.EditaReferencia(Convert.ToInt32(dr["Id"]), idTipoReferencia, Cadena.CadenaAleatoria(0, 0, 4), u.id_usuario);

                                    //Terminando Ciclo
                                    break;
                                }
                            }
                            else
                            {
                                //Insertando Referencia de Usuario
                                resultado = Referencia.InsertaReferencia(u.id_usuario, 30, idTipoReferencia, Cadena.CadenaAleatoria(0, 0, 4), Fecha.ObtieneFechaEstandarMexicoCentro(), u.id_usuario);
                            }
                        }
                    }

                    //Validando Operación
                    if (resultado.OperacionExitosa)
                    {
                        //Instanciando Id de Usuario
                        resultado = new RetornoOperacion(u.id_usuario);
                    }
                }
            }
            else
            {
                //Instanciando Excepción
                resultado = new RetornoOperacion(string.Format("{0} {1}", string.IsNullOrEmpty(email) ? "Falta email." : "", string.IsNullOrEmpty(contrasena) ? "Falta contraseña." : ""));
            }

            //Devolvemos Resultado
            return(resultado.ToXMLString());
        }
Пример #4
0
        /// <summary>
        /// Realiza el firmado del usuario sobre una compañía en particular
        /// </summary>
        /// <param name="id_usuario">Id de Usuario Autenticado</param>
        /// <param name="id_compania">Id de Compañía donde se firmará el usuario</param>
        /// <param name="tipo_dispositivo">Tipo de dispositivo desde donde se accesa (Consultar TipoDispositivo en contrato de servicio)</param>
        /// <param name="nombre_dispositivo">Nombre o alias del dispositivo</param>
        /// <param name="direccion_ip_mac">Dirección ipV6 o MAC del dispositivo</param>
        /// <param name="codigo_aut">Código de Autenticación</param>
        /// <param name="token_fcm">Token de dispositivo, registrado para Firebase Cloud Messaging</param>
        /// <returns></returns>
        public string IniciaSesion(int id_usuario, int id_compania, string tipo_dispositivo, string nombre_dispositivo, string direccion_ip_mac, string codigo_aut, string token_fcm)
        {
            //Declarando objeto de retorno
            RetornoOperacion result = new RetornoOperacion("No fueron proporcionados todos los valores de parámetros requeridos.");

            //Validando conjunto de datos requeridos
            if (id_usuario > 0 && id_compania > 0 && !string.IsNullOrEmpty(tipo_dispositivo) && !string.IsNullOrEmpty(nombre_dispositivo) && !string.IsNullOrEmpty(direccion_ip_mac))
            {
                //Inicializando Bloque Transaccional
                using (TransactionScope trans = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
                {
                    //Validando Compania
                    if (Operador.ObtieneOperadorUsuario(id_usuario).id_compania_emisor == id_compania)
                    {
                        //Obteniendo Referencia de Codigo
                        using (DataTable dtRefCodConfirmacion = Referencia.CargaReferencias(id_usuario, 30, ReferenciaTipo.ObtieneIdReferenciaTipo(0, 30, "Codigo Acceso", 0, "Configuración")))
                        {
                            //Validando que exista la Referencia
                            if (Validacion.ValidaOrigenDatos(dtRefCodConfirmacion))
                            {
                                //Recorriendo Ciclo
                                foreach (DataRow dr in dtRefCodConfirmacion.Rows)
                                {
                                    //Instanciando Referencia
                                    using (Referencia referencia = new Referencia(Convert.ToInt32(dr["Id"])))
                                    {
                                        //Validando que exista la Referencia
                                        if (referencia.habilitar)
                                        {
                                            //Validando que el Codigo no sea Vacio
                                            if (!referencia.valor.Equals(""))
                                            {
                                                //Validando que no Exceda el Tiempo Permitido
                                                if ((Fecha.ObtieneFechaEstandarMexicoCentro() - referencia.fecha).TotalMinutes <= 30)
                                                {
                                                    //Validando que el Codigo sea igual
                                                    if (referencia.valor.Equals(codigo_aut))
                                                    {
                                                        //Insertamos Sesión del Usuario
                                                        result = SAT_CL.Seguridad.UsuarioSesion.IniciaSesion(id_usuario, id_compania, (SAT_CL.Seguridad.UsuarioSesion.TipoDispositivo)((byte)convierteCadenaTipoDispositivo(tipo_dispositivo)), direccion_ip_mac, nombre_dispositivo, id_usuario);

                                                        //Validando Operación Exitosa
                                                        if (result.OperacionExitosa)
                                                        {
                                                            //Obteniendo Sesion generada
                                                            int idSession = result.IdRegistro;

                                                            //Editando Referencia
                                                            result = Referencia.EditaReferencia(referencia.id_referencia, "", id_usuario);

                                                            //Validando Operación Exitosa
                                                            if (result.OperacionExitosa)
                                                            {
                                                                //Actualizando token de dispositivo
                                                                result = actualizaTokenFireBaseCloudMessaging(idSession, token_fcm);

                                                                //Si no hay errores de actualización de token
                                                                if (result.OperacionExitosa)
                                                                {
                                                                    //Instanciando Sesión
                                                                    result = new RetornoOperacion(idSession);

                                                                    //Completando Transacción
                                                                    trans.Complete();
                                                                }
                                                                else
                                                                {
                                                                    result = new RetornoOperacion(-2, string.Format("Error al actualizar Token FCM: {0}.", result.Mensaje), false);
                                                                }
                                                            }
                                                        }
                                                    }
                                                    else
                                                    {
                                                        //Instanciando Excepción
                                                        result = new RetornoOperacion(-2, "El Código de Autenticación es Incorrecto.", false);
                                                    }
                                                }
                                                else
                                                {
                                                    //Limpiando código previo generado
                                                    result = Referencia.EditaReferencia(referencia.id_referencia, "", id_usuario);
                                                    trans.Complete();
                                                    //Instanciando Excepción
                                                    result = new RetornoOperacion(-2, "Se ha excedido el límite de tiempo para ingresar el Código de Autenticación.", false);
                                                }
                                            }
                                            else
                                            {
                                                //Instanciando Excepción
                                                result = new RetornoOperacion(-2, "No se especifico el Código de Autenticación.", false);
                                            }
                                        }
                                        else
                                        {
                                            //Instanciando Excepción
                                            result = new RetornoOperacion(-2, "No existe el Código de Autenticación.", false);
                                        }
                                    }

                                    //Terminando Ciclo
                                    break;
                                }
                            }
                            else
                            {
                                //Instanciando Excepción
                                result = new RetornoOperacion(-2, "No existe el Código de Autenticación.", false);
                            }
                        }
                    }
                    else
                    {
                        //
                        result = new RetornoOperacion("El usuario no corresponde a la Compania Asignada.");
                    }
                }
            }
            else
            {
                //Instanciando Excepción
                result = new RetornoOperacion(string.Format("{0} {1} {2} {3} {4}.", id_usuario < 1 ? "Falta id_usuario." : "", id_compania < 1 ? "Falta id_compania." : "",
                                                            string.IsNullOrEmpty(tipo_dispositivo) ? "Falta tipo_dispositivo." : "", string.IsNullOrEmpty(nombre_dispositivo) ? "Falta nombre_dispositivo." : "",
                                                            string.IsNullOrEmpty(direccion_ip_mac) ? "Falta direccion_ip_mac." : ""));
            }

            //Devolviendo resultado
            return(result.ToXMLString());
        }