Exemplo n.º 1
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());
        }