Ejemplo n.º 1
0
        public HttpResponseMessage TiposAutenticacion(TiposAutenticacionReq req)
        {
            Error errorResponse = null;
            UserAutenticacionRes loginResponseBE = new UserAutenticacionRes();
            string jsonReq = JsonConvert.SerializeObject(req, Formatting.None);

            int reintentos;

            if (req.AppInstanceGUID == Guid.Empty | req.LoginHost == string.Empty | req.LoginIP == string.Empty

                | req.AutTypeGUID == Guid.Empty)
            {
                //Error
                errorResponse = AccesoDatos.EventResponse_s_ByInternalCode(2);

                errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);
                return(apiHelper.fromError(errorResponse));
            }
            try
            {
                var      dtTag = AccesoDatos.Event_s_ByTag(req.Event_Tag);
                int      eventIDUserAutenticacion            = dtTag.EventId; //<--- EventId para USER-AUTENTIC
                DateTime auditTrailLoginEndDateUserAuthentic = DateTime.Now.AddSeconds(dtTag.EventDurationTime);

                //Pregunto si existen los datos del evento
                if (dtTag != null)
                {
                    //Consulto si el guid de negociacion es valido
                    var dtValido = AccesoDatos.AuditTrailLogin_s_ByAuditTrailLoginGUID_Valid(req.AppInstanceGUID, req.guidintercambio);
                    reintentos = CalcularReintentos(req.Event_Tag, req.AppInstanceGUID, req.guidintercambio, null);
                    //si el dtvalido tiene mas de una columna es valido, si tiene solo una columna significa que me devuelve un codigo de error
                    //if (!dtValido.EventResponseInternalCode.HasValue )//No hay error
                    if (dtValido != null) ////TODO: moviedo se comenta para evitar GUID de login ya esta en uso.
                    {
                        if ((reintentos != 999) && (reintentos != 22))
                        {
                            //Verificar que el usuario sea valido
                            var dtTiposAut = AccesoDatos.AuthenticationType_s_ByApplicationInstanceGUID(req.AppInstanceGUID);
                            //Si existen
                            if (dtTiposAut != null)
                            {
                                Guid guidintercambio = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);


                                return(apiHelper.fromObject <UserAutenticacionRes>(loginResponseBE, null, HttpStatusCode.OK));
                            }
                            else
                            {
                                //DataRow drow;
                                ///drow = dtCampos.NewRow();
                                //El usuario no es válido
                                errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(3);
                                errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);

                                ////drow["EventResponseId"] = Convert.ToInt32(dtError.Rows[0][0].ToString());
                                ////drow["EventResponseText"] = dtError.Rows[0][1].ToString();
                                ////drow["EventResponseInternalCode"] = Convert.ToInt32(dtError.Rows[0][2].ToString());
                                ////drow["Guid"] = dtLog.Rows[0][0].ToString();

                                ///dtCampos.Rows.Add(drow);

                                //Actualizo el campo Response de AuditTrailLogin
                                ////XMLResponse = ResponseErrorXML(dtError.Rows[0][1].ToString(), Guid.Parse(dtLog.Rows[0][0].ToString()), "AuditTrailLoguinGUID");
                                ////UpdateResponse(dtLog, XMLResponse);

                                ////dsSession.Tables.Add(dtCampos);
                                //GuidIntercambio = new Guid(dtLog.Rows[0][0].ToString());
                            }
                        }
                        if (reintentos == 999)
                        {
                            //Supero la cantidad de reintentos, loguear..
                            //El sistema detecta que se alcanzó el tope de reintentos
                            errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(18);
                            errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);

                            ////dsSession.Tables.Add(dtError);
                            ////XMLResponse = ResponseErrorXML(dtError.Rows[0][1].ToString(), Guid.Parse(dtLog.Rows[0][0].ToString()), "AuditTrailLoguinGUID");
                            ////UpdateResponse(dtLog, XMLResponse);
                        }
                        if (reintentos == 22)
                        {
                            //No se encuentran los datos del evento
                            errorResponse = AccesoDatos.EventResponse_s_ByInternalCode(22);

                            ////dsSession.Tables.Add(dtError);
                        }
                    }
                    else
                    {
                        errorResponse = AccesoDatos.EventResponse_s_ByInternalCode(dtValido.EventResponseInternalCode.Value);
                        return(apiHelper.fromError(errorResponse));
                    }
                }
                else //Error
                {
                    errorResponse = AccesoDatos.EventResponse_s_ByInternalCode(22);
                    return(apiHelper.fromError(errorResponse));
                }

                if (errorResponse != null)
                {
                    return(apiHelper.fromError(errorResponse));
                }
                else
                {
                    return(apiHelper.fromObject <UserAutenticacionRes>(loginResponseBE, null, HttpStatusCode.OK));
                    //return apiHelper.fromObject<ApiOkResponse>(new ApiOkResponse(loginResponseBE));
                }
            }
            catch (Exception ex)
            {
                return(apiHelper.fromEx(ex));
            }
        }
Ejemplo n.º 2
0
        public HttpResponseMessage authenticate(UserAutenticacionReq req)
        {
            Error errorResponse = null;
            UserAutenticacionRes loginResponseBE = new UserAutenticacionRes();

            var jsonReq = Fwk.HelperFunctions.SerializationFunctions.SerializeObjectToJson_Newtonsoft(req);
            int reintentos;

            ///Guid guidSession = Guid.NewGuid();
            if (req.AppInstanceGUID == Guid.Empty | req.LoginHost == string.Empty | req.LoginIP == string.Empty
                //req.guidintercambio == Guid.Empty
                | req.AutTypeGUID == Guid.Empty | req.UserName == string.Empty | req.UserKey == string.Empty)
            {
                //Error
                errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(2);
                errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);
                return(apiHelper.fromError(errorResponse));
            }
            try
            {
                var      dtTag = AccesoDatos.Event_s_ByTag(req.Event_Tag);
                int      eventIDUserAutenticacion            = dtTag.EventId; //<--- EventId para USER-AUTENTIC
                DateTime auditTrailLoginEndDateUserAuthentic = DateTime.Now.AddSeconds(dtTag.EventDurationTime);

                //Pregunto si existen los datos del evento
                if (dtTag != null)
                {
                    //Consulto si el guid de negociacion es valido
                    var dtValido = AccesoDatos.AuditTrailLogin_s_ByAuditTrailLoginGUID_Valid(req.AppInstanceGUID, req.guidintercambio);
                    reintentos = CalcularReintentos(req.Event_Tag, req.AppInstanceGUID, req.guidintercambio, null);
                    //si el dtvalido tiene mas de una columna es valido, si tiene solo una columna significa que me devuelve un codigo de error
                    //if (!dtValido.EventResponseInternalCode.HasValue )//No hay error
                    if (dtValido != null) ////TODO: moviedo se comenta para evitar GUID de login ya esta en uso.
                    {
                        if ((reintentos != 999) && (reintentos != 22))
                        {
                            //Verificar que el usuario sea valido
                            UserBE dtUser = AccesoDatos.User_s_ByUserName_Valid(req.UserName);

                            if (dtUser != null)
                            {
                                //idUser = Convert.ToInt32(dtUser.Rows[0][0].ToString());

                                var dtType = AccesoDatos.AuthenticationType_s_ByGUID(req.AutTypeGUID);

                                //Pregunto si la consulta me devuelve resultados para el tipo de autenticacion seleccionado
                                //va a depender entre otras cosas del activeflag
                                if (dtType != null)
                                {
                                    ////AuthenticationTypeTag = dtType.Rows[0][8].ToString();

                                    ///idType = int.Parse(dtType.Rows[0][0].ToString());

                                    var dtEvent = AccesoDatos.Event_s_ByTag("USER-OK");
                                    //Da
                                    if (dtEvent != null)
                                    {
                                        int eventIDUserOk = dtEvent.EventId; //<---obtengo el id para el evento USER-OK
                                        //a la fecha y hora actual se le suman los segundos definidos para el evento req.Event_Tag
                                        ///DateTime auditTrailLoginEndDate = DateTime.Now.AddSeconds(dtEvent.EventDurationTime);
                                        //bool mustChangePassword;
                                        //En caso de que no sea autenticacion de AD
                                        if (req.DomainGUID == Guid.Empty)
                                        {
                                            //Consulta si el usuario tiene acceso a la instncia de la app
                                            //con el tipo de autenticacion seleccionado
                                            var dtInstanceUser = AccesoDatos.AuthenticationTypeApplicationInstanceUser_s_Valid(req.UserName, req.AppInstanceGUID, req.AutTypeGUID);

                                            if (dtInstanceUser != null)
                                            {
                                                //validar previamente si el usuario para el tipo de autenticacion tiene asignado la validacion
                                                //mediante membership
                                                var dtMembership = AccesoDatos.AuthenticationTypeUser_s_MembershipUserID(dtUser.UserId, dtType.AuthenticationTypeId);
                                                //Valido si el usuario tiene activo la opcion de validar mediante membership
                                                if (dtMembership != null)
                                                {
                                                    //Valida si el usuario existe en la aplicación mediante Membership
                                                    if (Membership.ValidateUser(req.UserName, req.UserKey))
                                                    {
                                                        //DataSet dsLogDevolucion = new DataSet();
                                                        //dsLogDevolucion.Tables.Add(Log(Guid.Empty, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq));

                                                        ////Validaciones objValidaciones = new Validaciones();
                                                        ////string eventResponseText = objValidaciones.ToStringAsXml(dsLogDevolucion);
                                                        ////UpdateResponse(dsLogDevolucion.Tables[0], eventResponseText);

                                                        //Guid GuidIntercambio = (Guid)dsLogDevolucion.Tables[0].Rows[0][0];

                                                        //Transacción!!
                                                        var dtSession = AccesoDatos.TransaccionSession(eventIDUserAutenticacion, dtUser.UserId, dtType.AuthenticationTypeId, string.Empty, dtEvent.auditTrailLoginEndDate, 0, req.guidintercambio, req.AppInstanceGUID, req.LoginHost, req.LoginIP, string.Empty, jsonReq, eventIDUserOk, auditTrailLoginEndDateUserAuthentic);

                                                        ////XMLResponse = ResponseUserAuthenticXML(dtInstanceUser.AuthenticationTypeUserMustChangePassword, dtSession.AuditTrailSessionGUID);
                                                        AccesoDatos.UpdateResponseSession(dtSession.AuditTrailSessionId, dtInstanceUser.AuthenticationTypeUserMustChangePassword, dtSession.AuditTrailSessionGUID);
                                                        ///dtSession.Columns.Remove("AuditTrailLoginId");

                                                        loginResponseBE.WsUserId = dtUser.UserId;

                                                        ///dtSession.Columns.Add("UserGuid");
                                                        loginResponseBE.UserGuid = dtInstanceUser.UserGUID;

                                                        ////Se agregan los datos de la persona y el usuario
                                                        ////dtSession.Columns.Add("UserName");
                                                        loginResponseBE.UserName = dtUser.UserName;

                                                        ///dtSession.Columns.Add("PersonFirstName");
                                                        loginResponseBE.PersonFirstName = dtUser.PersonFirstName;

                                                        ///dtSession.Columns.Add("PersonLastName");
                                                        loginResponseBE.PersonLastName = dtUser.PersonLastName;

                                                        ////dtSession.Columns.Add("PersonDocNumber");
                                                        ////dtSession.Rows[0]["PersonDocNumber"] = dtUser.PersonDocNumber;
                                                        loginResponseBE.PersonDocNumber = dtUser.PersonDocNumber;


                                                        ////dtSession.Columns.Add("UserPlaceGUID");
                                                        ////dtSession.Rows[0]["UserPlaceGUID"] = dtUser.UserPlaceGuid;
                                                        loginResponseBE.UserPlaceGuid = dtUser.UserPlaceGuid;

                                                        ////dtSession.Columns.Add("UserPlaceName");
                                                        ////dtSession.Rows[0]["UserPlaceName"] = dtUser.UserPlaceName;
                                                        loginResponseBE.UserPlaceName = dtUser.UserPlaceName;

                                                        //dtSession.Columns.Add("UserPlaceDescript");
                                                        loginResponseBE.UserPlaceDescript = dtUser.UserPlaceDescript;

                                                        ////if (dtUser.Rows[0]["UserPlaceDescript"] != DBNull.Value)
                                                        ////    dtSession.Rows[0]["UserPlaceDescript"] = dtUser.Rows[0]["UserPlaceDescript"].ToString();

                                                        ////dtSession.Columns.Add("PersonGUID");
                                                        ////dtSession.Rows[0]["PersonGUID"] = dtUser.Rows[0]["PersonGUID"].ToString();
                                                        loginResponseBE.PersonGUID = dtUser.PersonGUID;

                                                        ////dtSession.Columns.Add("PersonModifiedDate");
                                                        ////dtSession.Rows[0]["PersonModifiedDate"] = ((DateTime)dtUser.Rows[0]["PersonModifiedDate"]).ToString("o");

                                                        loginResponseBE.PersonModifiedDate = dtUser.PersonModifiedDate;
                                                        /////////////////////////////////////////////

                                                        ///dsSession.Tables.Add(dtSession);

                                                        //GuidIntercambio = new Guid(dtSession.Rows[0][0].ToString());
                                                    }
                                                    else
                                                    {
                                                        //row = dtCampos.NewRow();
                                                        errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(15);
                                                        errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);
                                                        //row["EventResponseId"] = Convert.ToInt32(dtError.Rows[0][0].ToString());
                                                        //row["EventResponseText"] = dtError.Rows[0][1].ToString();
                                                        //row["EventResponseInternalCode"] = Convert.ToInt32(dtError.Rows[0][2].ToString());
                                                        //row["Guid"] = dtLog.Rows[0][0].ToString();

                                                        //dtCampos.Rows.Add(row);
                                                        //XMLResponse = ResponseErrorXML(dtError.Rows[0][1].ToString(), Guid.Parse(dtLog.Rows[0][0].ToString()), "AuditTrailLoguinGUID");
                                                        //UpdateResponse(dtLog, XMLResponse);

                                                        //dsSession.Tables.Add(dtCampos);
                                                    }
                                                }
                                                else
                                                {
                                                    //Usuario no posee relacion con estructura de MemberShip (Autenticacion Propia)
                                                    //row = dtCampos.NewRow();
                                                    errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(42);
                                                    errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);
                                                    //
                                                    //row["EventResponseId"] = Convert.ToInt32(dtError.Rows[0][0].ToString());
                                                    //row["EventResponseText"] = dtError.Rows[0][1].ToString();
                                                    //row["EventResponseInternalCode"] = Convert.ToInt32(dtError.Rows[0][2].ToString());
                                                    //row["Guid"] = dtLog.Rows[0][0].ToString();

                                                    ////dtCampos.Rows.Add(row);
                                                    ////XMLResponse = ResponseErrorXML(dtError.Rows[0][1].ToString(), Guid.Parse(dtLog.Rows[0][0].ToString()), "AuditTrailLoguinGUID");
                                                    ////UpdateResponse(dtLog, XMLResponse);
                                                    ////dsSession.Tables.Add(dtCampos);
                                                    //GuidIntercambio = new Guid(dtLog.Rows[0][0].ToString());
                                                }
                                            }
                                            else
                                            {
                                                //El usuario no posee acceso a la instancia de aplicación
                                                //con el tipo de autenticacion seleccionado   7 (si NO ES Windows)

                                                errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(7);
                                                errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);
                                            }
                                        }
                                        else //Si autentica por Active Directory
                                        {
                                            //Consulta si el dominio de Active Directory existe
                                            DomainBE dtDominio = AccesoDatos.Domain_s_ByGUID(req.DomainGUID);

                                            if (dtDominio != null)
                                            {
                                                //Verifica si el usuario tiene acceso a la instancia de la app
                                                //con el tipo de autenticacion seleccionado
                                                //y dominio seleccionado
                                                var dtDominioUser = AccesoDatos.AuthenticationTypeApplicationInstanceUser_s_Valid_Domain(req.UserName, req.AppInstanceGUID, req.AutTypeGUID, req.DomainGUID);
                                                if (dtDominioUser != null)
                                                {
                                                    ActiveDirectory objAD = new ActiveDirectory();

                                                    //Pregunto si se puede conectar al controlador de dominio
                                                    if (objAD.IsAuthenticated(dtDominio.LDAPPath, dtDominio.DomainUsr.ToString(), Encriptador.desencriptar(dtDominio.DomainPwd.ToString())) == true)
                                                    {
                                                        //Pregunto si el usuario tiene las credenciales necesarias en active directory para dicho dominio
                                                        if (objAD.IsAuthenticated(dtDominio.LDAPPath, req.UserName, req.UserKey) == true)
                                                        {
                                                            //DataSet dsLogDevolucion = new DataSet();
                                                            //dsLogDevolucion.Tables.Add(Log(Guid.Empty, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq));

                                                            ////Validaciones objValidaciones = new Validaciones();
                                                            ////string eventResponseText = objValidaciones.ToStringAsXml(dsLogDevolucion);
                                                            ////UpdateResponse(dsLogDevolucion.Tables[0], eventResponseText);

                                                            //Guid GuidIntercambio = (Guid)dsLogDevolucion.Tables[0].Rows[0][0];

                                                            //Transacción!!}
                                                            ///DataTable dtTransaccion = new DataTable();
                                                            var dtTransaccion = AccesoDatos.TransaccionSession(eventIDUserAutenticacion, dtUser.UserId,
                                                                                                               dtType.AuthenticationTypeId, string.Empty, dtEvent.auditTrailLoginEndDate, dtDominio.DomainId,
                                                                                                               req.guidintercambio, req.AppInstanceGUID, req.LoginHost, req.LoginIP, string.Empty,
                                                                                                               jsonReq, eventIDUserOk, auditTrailLoginEndDateUserAuthentic);
                                                            ///guidSession = dtTransaccion.GUID;
                                                            ///mustChangePassword = bool.Parse(dtDominioUser.Rows[0][1].ToString());
                                                            ////XMLResponse = ResponseUserAuthenticXML(dtDominioUser.AuthenticationTypeUserMustChangePassword, dtTransaccion.AuditTrailSessionGUID);
                                                            ///UpdateResponseSession(dtTransaccion.AuditTrailSessionId, XMLResponse);
                                                            AccesoDatos.UpdateResponseSession(dtTransaccion.AuditTrailSessionId, dtDominioUser.AuthenticationTypeUserMustChangePassword, dtTransaccion.AuditTrailSessionGUID);
                                                            ///dtTransaccion.Columns.Remove("AuditTrailLoginId");

                                                            ///dtTransaccion.Columns.Add("UserGuid");
                                                            loginResponseBE.UserGuid = dtDominioUser.UserGUID;

                                                            //Se agregan los datos de la persona y el usuario.
                                                            //dtTransaccion.Columns.Add("UserName");
                                                            loginResponseBE.UserName = dtUser.UserName.ToString();

                                                            ////dtTransaccion.Columns.Add("PersonFirstName");
                                                            loginResponseBE.PersonFirstName = dtUser.PersonFirstName;

                                                            ////dtTransaccion.Columns.Add("PersonLastName");
                                                            loginResponseBE.PersonLastName = dtUser.PersonLastName;

                                                            ////dtTransaccion.Columns.Add("PersonDocNumber");
                                                            loginResponseBE.PersonDocNumber = dtUser.PersonDocNumber;
                                                            ////dtTransaccion.Columns.Add("UserPlaceGUID");
                                                            loginResponseBE.UserPlaceGuid = dtUser.UserPlaceGuid;

                                                            ////dtTransaccion.Columns.Add("UserPlaceName");
                                                            loginResponseBE.UserPlaceName = dtUser.UserPlaceName;

                                                            ///dtTransaccion.Columns.Add("UserPlaceDescript");
                                                            ////if (dtUser.Rows[0]["UserPlaceDescript"] != DBNull.Value)
                                                            loginResponseBE.UserPlaceDescript = dtUser.UserPlaceDescript;

                                                            ////dtTransaccion.Columns.Add("PersonGUID");
                                                            loginResponseBE.PersonGUID = dtUser.PersonGUID;


                                                            ///dtTr/*/*a*/*/nsaccion.Columns.Add("PersonModifiedDate");
                                                            loginResponseBE.PersonModifiedDate = dtUser.PersonModifiedDate;

                                                            ////dsSession.Tables.Add(dtTransaccion);
                                                            //GuidIntercambio = new Guid(dtTransaccion.Rows[0][0].ToString());
                                                        }
                                                        else
                                                        {
                                                            ///row = dtCampos.NewRow();
                                                            //Error 8
                                                            errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(8);
                                                            errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        //Error 24 - EL usuario no pudo autenticarse en el controlador de active directory

                                                        errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(24);
                                                        errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);
                                                    }
                                                }
                                                else
                                                {
                                                    //El usuario no posee acceso a la aplicación con el tipo de autenticación seleccionado
                                                    //en el dominio seleccionado (si es windows)
                                                    //Anexo 10 no devuelve resultados (AuthenticationTypeApplicationInstanceUser_s_Valid)
                                                    //21 (si ES Windows)

                                                    errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(21);
                                                    errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);
                                                }
                                            }
                                            else
                                            {
                                                ////row = dtCampos.NewRow();
                                                //El dominio de AD no existe
                                                errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(23);
                                                errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);
                                            }
                                        }
                                    }

                                    else
                                    {
                                        //No se encuentran los datos del evento
                                        errorResponse = AccesoDatos.EventResponse_s_ByInternalCode(22);
                                    }
                                }
                                else
                                {
                                    //No hoy datos del tipo de autenticacion

                                    ///row = dtCampos.NewRow();

                                    errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(41);
                                    errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);

                                    ////row["EventResponseId"] = Convert.ToInt32(dtError.Rows[0][0].ToString());
                                    ////row["EventResponseText"] = dtError.Rows[0][1].ToString();
                                    ////row["EventResponseInternalCode"] = Convert.ToInt32(dtError.Rows[0][2].ToString());
                                    ////row["Guid"] = dtLog.Rows[0][0].ToString();



                                    ////XMLResponse = ResponseErrorXML(dtError.Rows[0][1].ToString(), Guid.Parse(dtLog.Rows[0][0].ToString()), "AuditTrailLoguinGUID");
                                    ////UpdateResponse(dtLog, XMLResponse);
                                    ////dtCampos.Rows.Add(row);
                                    ////dsSession.Tables.Add(dtCampos);
                                    //GuidIntercambio = new Guid(dtLog.Rows[0][0].ToString());
                                }
                            }
                            else
                            {
                                //DataRow drow;
                                ///drow = dtCampos.NewRow();
                                //El usuario no es válido
                                errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(6);
                                errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);

                                ////drow["EventResponseId"] = Convert.ToInt32(dtError.Rows[0][0].ToString());
                                ////drow["EventResponseText"] = dtError.Rows[0][1].ToString();
                                ////drow["EventResponseInternalCode"] = Convert.ToInt32(dtError.Rows[0][2].ToString());
                                ////drow["Guid"] = dtLog.Rows[0][0].ToString();

                                ///dtCampos.Rows.Add(drow);

                                //Actualizo el campo Response de AuditTrailLogin
                                ////XMLResponse = ResponseErrorXML(dtError.Rows[0][1].ToString(), Guid.Parse(dtLog.Rows[0][0].ToString()), "AuditTrailLoguinGUID");
                                ////UpdateResponse(dtLog, XMLResponse);

                                ////dsSession.Tables.Add(dtCampos);
                                //GuidIntercambio = new Guid(dtLog.Rows[0][0].ToString());
                            }
                        }
                        if (reintentos == 999)
                        {
                            //Supero la cantidad de reintentos, loguear..
                            //El sistema detecta que se alcanzó el tope de reintentos
                            errorResponse      = AccesoDatos.EventResponse_s_ByInternalCode(18);
                            errorResponse.Guid = Log(req.guidintercambio, req.AppInstanceGUID, req.Event_Tag, req.LoginHost, req.LoginIP, jsonReq);

                            ////dsSession.Tables.Add(dtError);
                            ////XMLResponse = ResponseErrorXML(dtError.Rows[0][1].ToString(), Guid.Parse(dtLog.Rows[0][0].ToString()), "AuditTrailLoguinGUID");
                            ////UpdateResponse(dtLog, XMLResponse);
                        }
                        if (reintentos == 22)
                        {
                            //No se encuentran los datos del evento
                            errorResponse = AccesoDatos.EventResponse_s_ByInternalCode(22);

                            ////dsSession.Tables.Add(dtError);
                        }
                    }
                    else
                    {
                        errorResponse = AccesoDatos.EventResponse_s_ByInternalCode(dtValido.EventResponseInternalCode.Value);
                        return(apiHelper.fromError(errorResponse));
                    }
                }
                else //Error
                {
                    errorResponse = AccesoDatos.EventResponse_s_ByInternalCode(22);
                    return(apiHelper.fromError(errorResponse));
                }

                if (errorResponse != null)
                {
                    return(apiHelper.fromError(errorResponse));
                }
                else
                {
                    return(apiHelper.fromObject <UserAutenticacionRes>(loginResponseBE, null, HttpStatusCode.OK));
                    //return apiHelper.fromObject<ApiOkResponse>(new ApiOkResponse(loginResponseBE));
                }
            }
            catch (Exception ex)
            {
                return(apiHelper.fromEx(ex));
            }
        }