public ReponseApi desencriptaTexto(ActiveResponse par) { ReponseApi res = new ReponseApi(); res.Codigo = 0; res.Mensaje = ""; res.Respuesta = null; try { res.Codigo = 0; res.Mensaje = ""; res.Respuesta = Encriptacion.DesencriptaResponse(par, par.Llave); } catch (Exception ex) { string pars = JsonSerializer.Serialize(par); try { EjecucionSP.LogErrores("AccessADController", "validaCodigo", pars, ex.Message); } catch (Exception exc) { _logger.Log(LogLevel.Error, exc, exc.Message); } } return(res); }
public static dynamic EncriptaResponse(ActiveResponse obj, string llave) { PropertyInfo[] properties = typeof(ActiveResponse).GetProperties(); Type objReflect = obj.GetType(); foreach (PropertyInfo p in properties) { string aux = p.PropertyType.Name; if (aux == "String") { try { if (p.Name != "Llave") { objReflect.GetProperty(p.Name).SetValue(obj, Encriptar(llave, p.GetValue(obj).ToString())); } } catch (Exception ex) { Console.WriteLine(aux); } } } return(obj); }
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); }