Esempio n. 1
0
        public static MethodResponse <ActiveResponse> loginUsuario(Credential user, int tipo)
        {
            var Response = new MethodResponse <ActiveResponse>();

            Validate       ActiveUser   = new Validate();
            GenerateToken  NewToken     = new GenerateToken();
            ActiveResponse objectActive = new ActiveResponse();
            int            expiraToken;

            BodyToken Token = new BodyToken();

            if (string.IsNullOrEmpty(user.User))
            {
                Response.Code    = 0;
                Response.Message = string.Format("El usuario no puede ser nulo");
            }
            else if (string.IsNullOrEmpty(user.Password))
            {
                Response.Code    = 0;
                Response.Message = string.Format("La contraseña no puede ser nula");
            }
            else if (string.IsNullOrEmpty(user.App))
            {
                Response.Code    = 0;
                Response.Message = string.Format("El código de aplicación no puede ser nulo");
            }
            else
            {
                try {
                    expiraToken = user.ExpiracionToken == 0 ? 60 : user.ExpiracionToken;

                    //Checar IP
                    //string ip = HttpContext.Connection.RemoteIpAddress.ToString();

                    var MetaDatos = ActiveUser.GetUserActive(user.User, user.Password, user.App, expiraToken, tipo);
                    if (MetaDatos.Code != 0)
                    {
                        //Requiere doble factor
                        bool requiere;
                        requiere = EjecucionSP.RequiereDobleFactor(user.App, MetaDatos.Result.Permisos.Area, MetaDatos.Result.Permisos.Perfil);

                        if (requiere)
                        {
                            int config;
                            //Valida si el usuario tiene configurado el token para doble factor
                            config = EjecucionSP.UsuarioConfigurado(user.User, user.App);

                            if (config > 0)
                            {
                                //Se devuelve el response encriptado
                                string llaveDesbloqueo = Encriptacion.GeneraLlave(config);

                                Response.Code             = 3;
                                Response.Result           = Encriptacion.EncriptaResponse(MetaDatos.Result, Encriptacion.GeneraLlave(config));
                                Response.Result.IDUsuario = config;

                                EjecucionSP.ActualizaLlaveDesbloqueo(config, user.App, llaveDesbloqueo);
                            }
                            else
                            {
                                //Si no está configurado se devuelve el código QR de configuración
                                ResponseQRGoogle codQR = new ResponseQRGoogle();

                                ReponseApi res = DobleFactor.ObtenerCodigoConfig(user.App, MetaDatos.Result.Apellidos,
                                                                                 MetaDatos.Result.Nombre, user.User, MetaDatos.Result.Telefono, MetaDatos.Result.Email);

                                codQR = res.Respuesta;

                                int idUsuario = Int32.Parse(res.Mensaje);

                                string llaveDesbloqueo = Encriptacion.GeneraLlave(idUsuario);

                                Response.Code             = 2;
                                Response.Result           = Encriptacion.EncriptaResponse(MetaDatos.Result, llaveDesbloqueo);
                                Response.Result.CodigoQR  = codQR;
                                Response.Result.IDUsuario = idUsuario;

                                EjecucionSP.ActualizaLlaveDesbloqueo(idUsuario, user.App, llaveDesbloqueo);
                            }
                        }
                        else
                        {
                            // todo paso bien
                            Response.Code   = 1;
                            Response.Result = MetaDatos.Result;

                            // genera token de seguridad
                            Token = NewToken.CreateToken(user.User, user.ExpiracionToken);

                            //Inserta registro en bitácora
                            EjecucionSP.BitacoraAcceso(user.User, user.App, "172.154.22.40");

                            // se añade al objeto token sus propiedades
                            //InformationToken infoToken = new InformationToken();

                            //infoToken.Token = Token.TokenCreated;
                            //infoToken.ExpiracionToken = Token.TimeToken;

                            //Response.Result.InformacionToken.Add(infoToken);
                        }
                    }
                    else
                    {
                        Response.Code    = 0;
                        Response.Message = MetaDatos.Message;
                    }
                } catch (Exception ex) {
                    throw ex;
                }
            }

            return(Response);
        }
        public MethodResponse <ActiveResponse> GetUserActive(string usuario, string password, string app, int expiraciontoken, int tipo)
        {
            var           Response  = new MethodResponse <ActiveResponse>();
            var           ResponseA = new MethodResponse <DirectoryEntry>();
            Active        ldap      = new Active();
            GenerateToken NewToken  = new GenerateToken();

            Response.Code = 1;

            try
            {
                ActiveResponse objectActive = new ActiveResponse();
                objectActive.Aplicaciones = new List <Application>();

                ResponseA = ldap.ValidateCredentials(LDAP, usuario, password, app, tipo);

                if (ResponseA.Code != 0)
                {
                    if (getField(ResponseA.Result, "pager").dato != null)
                    {
                        var        arrayAccesos = getField(ResponseA.Result, "pager").dato.Split(';');
                        Permission ObjApp       = new Permission();

                        foreach (string acceso in arrayAccesos)
                        {
                            Application Application = new Application();
                            if (acceso != "")
                            {
                                Application.Codigo     = acceso.Substring(0, acceso.IndexOf('=')).ToString();
                                Application.AreaPerfil = acceso.Substring(acceso.IndexOf('=') + 1).ToString();

                                objectActive.Aplicaciones.Add(Application);
                                objectActive.InformacionToken = new List <InformationToken>();

                                if (Application.Codigo == app)
                                {
                                    ObjApp.Area   = int.Parse(Application.AreaPerfil.Substring(0, Application.AreaPerfil.IndexOf(',')));
                                    ObjApp.Perfil = int.Parse(acceso.Substring(acceso.IndexOf(',') + 1));
                                }
                            }
                        }

                        var time = getField(ResponseA.Result, "lockoutTime").dato;

                        if (ObjApp.Area != 0 && ObjApp.Perfil != 0)
                        {
                            objectActive.Permisos = ObjApp;

                            objectActive.Nombre         = getField(ResponseA.Result, "givenName").dato;
                            objectActive.Apellidos      = getField(ResponseA.Result, "sn").dato;
                            objectActive.Descripcion    = getField(ResponseA.Result, "description").dato;
                            objectActive.Oficina        = getField(ResponseA.Result, "physicalDeliveryOfficeName").dato;
                            objectActive.Telefono       = getField(ResponseA.Result, "telephoneNumber").dato;
                            objectActive.Email          = getField(ResponseA.Result, "mail").dato;
                            objectActive.Direccion      = getField(ResponseA.Result, "streetAddress").dato;
                            objectActive.NumNomina      = getField(ResponseA.Result, "postOfficeBox").dato;
                            objectActive.Puesto         = getField(ResponseA.Result, "title").dato;
                            objectActive.Departamento   = getField(ResponseA.Result, "department").dato;
                            objectActive.Extension      = getField(ResponseA.Result, "ipPhone").dato;
                            objectActive.NombreCompleto = getField(ResponseA.Result, "displayName").dato;
                            objectActive.NombreUsuario  = getField(ResponseA.Result, "sAMAccountName").dato;
                            objectActive.Compañia       = getField(ResponseA.Result, "company").dato;
                            objectActive.Notas          = getField(ResponseA.Result, "info").dato;
                            //En esta parte se genera el token
                            InformationToken Token = new InformationToken();
                            var Tokenresult        = NewToken.CreateToken(usuario, expiraciontoken);
                            Token.ExpiracionToken = Tokenresult.TimeToken;
                            Token.Token           = Tokenresult.TokenCreated;
                            objectActive.InformacionToken.Add(Token);

                            try
                            {
                                byte[] bt = (byte[])ResponseA.Result.Properties["thumbnailPhoto"].Value;
                                //objectActive.foto = BitConverter.ToString(bt);
                                objectActive.Foto = Convert.ToBase64String(bt);
                            }
                            catch (Exception)
                            {
                                objectActive.Foto = null;
                            }

                            Response.Result = objectActive;
                            // Dal.LogAcceso(app, usuario);
                        }
                        else
                        {
                            Response.Code    = 0;
                            Response.Message = string.Format("No tienes permisos para esta aplicación");
                        }
                    }
                    else
                    {
                        Response.Code    = 0;
                        Response.Message = "El usuario no tiene aplicaciones configuradas";
                    }
                }
                else
                {
                    Response.Code    = ResponseA.Code;
                    Response.Message = ResponseA.Message;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(Response);
        }