public async Task <IActionResult> Login(SSODto.Login.RequestModel oItem) { try { var oResponse = new Response <SSODto.Login.Response>(); oResponse.IsSuccess = false; #region VALIDACION DE CAPTCHA if (string.IsNullOrEmpty(oItem.sCode)) { oResponse.Message = Messages.SSO.Login.EX008; return(Ok(oResponse)); } if (!this._captchaApplication.ComputeMd5Hash(oItem.sCode).Equals(CaptchaHash)) { HttpContext.Session.Remove(this._sCaptchaHashKey); oResponse.Message = Messages.SSO.Login.EX009; return(Ok(oResponse)); } if (CaptchaHash != null) { HttpContext.Session.Remove(this._sCaptchaHashKey); } #endregion #region VALIDACION DE USUARIO var oUser = await this._sSOApplication.Login(oItem); if (!oUser.IsSuccess) { oResponse.Message = Messages.SSO.Login.EX001; return(Ok(oResponse)); } if (oUser.Data == null) { oResponse.Message = Messages.SSO.Login.EX001; return(Ok(oResponse)); } if (oUser.Data.IdUsuario == 0) { oResponse.Message = Messages.SSO.Login.EX001; return(Ok(oResponse)); } #endregion #region VALIDACION DE EMPRESAS var oEmpresas = await this._sSOApplication.GetEmpresas(oItem.sUsername); if (!oEmpresas.IsSuccess) { oResponse.Message = Messages.SSO.Login.EX002; return(Ok(oResponse)); } if (oEmpresas.Data == null) { oResponse.Message = Messages.SSO.Login.EX002; return(Ok(oResponse)); } if (oEmpresas.Data.Count == 0) { oResponse.Message = Messages.SSO.Login.EX002; return(Ok(oResponse)); } #endregion var oTmpEmpresa = oEmpresas.Data[0]; #region VALIDACION DE LOCALES if (oTmpEmpresa.Locales == null) { oResponse.Message = Messages.SSO.Login.EX003; return(Ok(oResponse)); } if (oTmpEmpresa.Locales.Count == 0) { oResponse.Message = Messages.SSO.Login.EX003; return(Ok(oResponse)); } #endregion oUser.Data.nIdEmpresa = oTmpEmpresa.IdEmpresa; oUser.Data.sNombreEmpresa = oTmpEmpresa.NombreCentro; oUser.Data.nIdLocal = oTmpEmpresa.Locales[0].IdLocal; oUser.Data.sNombreLocal = oTmpEmpresa.Locales[0].NombreLocal; #region VALIDACION DE PERFILES var oPerfiles = await this._sSOApplication.GetPerfiles(oItem.sUsername, oUser.Data.nIdLocal.ToString()); if (!oPerfiles.IsSuccess) { oResponse.Message = Messages.SSO.Login.EX004; return(Ok(oResponse)); } if (oPerfiles.Data == null) { oResponse.Message = Messages.SSO.Login.EX004; return(Ok(oResponse)); } if (oPerfiles.Data.Count == 0) { oResponse.Message = Messages.SSO.Login.EX004; return(Ok(oResponse)); } #if DEBUG // ================================ // ===== SECCION PARA PRUEBAS ===== // ================================ //oPerfiles.Data[0].NombreRol = "OES"; oPerfiles.Data[0].NombreRol = "OGTU"; //oPerfiles.Data[0].NombreRol = "Promovilidad"; #endif int nCantPerfilesValidos = 0; foreach (var item in oPerfiles.Data) { nCantPerfilesValidos = this._perfilesPermitidos.Count(str => str.ToUpper().Equals(item.NombreRol.ToUpper())); if (nCantPerfilesValidos > 0) { oUser.Data.nIdPerfil = item.IdRol; oUser.Data.sNombrePerfil = item.NombreRol; break; } } if (nCantPerfilesValidos == 0) { oResponse.Message = Messages.SSO.Login.EX005; return(Ok(oResponse)); } #endregion #region VALIDACION INFORMACION DE USUARIO var oUserInfo = await this._sSOApplication.GetUserInfo(oUser.Data.IdUsuario); if (!oUserInfo.IsSuccess) { oResponse.Message = Messages.SSO.Login.EX006; return(Ok(oResponse)); } if (oUserInfo.Data == null) { oResponse.Message = Messages.SSO.Login.EX006; return(Ok(oResponse)); } if (oUserInfo.Data.PK_eIdUsuario == 0) { oResponse.Message = Messages.SSO.Login.EX006; return(Ok(oResponse)); } #endregion oUser.Data.sCorreo = oUserInfo.Data.uCorElectronico; oUser.Data.sNombreCompleto = oUserInfo.Data.NombreCompleto; #region VALIDACION DE REGISTRO DE SESION EN BD var oRequestRegistrarSesion = new AdminDto.RegistrarSesion(); oRequestRegistrarSesion.sUsuario = oItem.sUsername.ToUpper(); oRequestRegistrarSesion.sUsuarioSSO = null; oRequestRegistrarSesion.sIp = "0.0.0.0"; oRequestRegistrarSesion.sFlag = "1"; oRequestRegistrarSesion.nIdSessionSSO = oUser.Data.IdUsuario; var oRegistroSesion = await this._adminApplication.RegistrarSesion(oRequestRegistrarSesion); if (!oRegistroSesion.IsSuccess) { oResponse.Message = Messages.SSO.Login.EX007; return(Ok(oResponse)); } if (oRegistroSesion.Data == 0) { oResponse.Message = Messages.SSO.Login.EX007; return(Ok(oResponse)); } #endregion oUser.Data.nIdSession = oRegistroSesion.Data; //Obtiene Id Sesion del SIROS (DB) #region GENERAR JWT var oJwt = new JwtDto.Request(); oJwt.sUsername = oItem.sUsername.ToUpper(); //Forzar mayuscula oJwt.sUsernameSSO = oUser.Data.IdUsuario.ToString(); oJwt.sProfile = oUser.Data.sNombrePerfil; oJwt.sIdSession = oUser.Data.nIdSession.ToString(); oJwt.nIdEmpresa = oUser.Data.nIdEmpresa; oJwt.nIdLocal = oUser.Data.nIdLocal; #if DEBUG // ================================ // ===== SECCION PARA PRUEBAS ===== // ================================ oJwt.nIdEmpresa = 1166; #endif var oToken = await this._jwtApplication.GenerateJwtToken(oJwt); oUser.Data.sToken = oToken.Data.sToken; oUser.Data.dTokenExpiration = oToken.Data.dTokenExpiration; #endregion oResponse.IsSuccess = true; oResponse.Data = oUser.Data; return(Ok(oResponse)); } catch (Exception ex) { _ = this._logApplication.SetLog(EnumLogType.TEXT_N_EMAIL, EnumLogCategory.ERROR, "SSO-Login", ex, oItem); return(Ok(new Response <Object> { Message = $"[SSO]: ERR-Fallo en el servidor: {ex.StackTrace}" })); } }
public async Task <Response <SSODto.Login.Response> > Login(SSODto.Login.RequestModel oItem) { const string METHOD_NAME = "Login"; try { string sToken = await this.AuthMiddleWare(); if (string.IsNullOrEmpty(sToken)) { throw new Exception($"({SERVICE_NAME}-{METHOD_NAME}): Metodo Auth devolvio un token vacio o null."); } var oResponse = new Response <SSODto.Login.Response>(); oResponse.IsSuccess = false; using (WebApiClient oHttpClient = new WebApiClient(sToken)) { string sUrl = this._settingsServicios.MiddleWareAPI + "api/v1/sso/Login"; var oRequest = new SSODto.Login.Request(); oRequest.ApplicationId = this._settingsSSO.ApplicationId; oRequest.TokenUser = this._settingsSSO.TokenUser; oRequest.TokenPassword = this._settingsSSO.TokenPassword; oRequest.UserName = oItem.sUsername; oRequest.UserPassword = oItem.sPassword; var oClientResponse = await oHttpClient.CallPostAsync <SSODto.Login.Request, SSODto.SSOResponse <SSODto.Login.Response> >(sUrl, oRequest); if (oClientResponse.StatusCode == HttpStatusCode.OK) { oResponse.IsSuccess = oClientResponse.Content.Success; oResponse.Data = oClientResponse.Content.Data; } else if (oClientResponse.StatusCode == HttpStatusCode.BadRequest) { oResponse.Message = $"({SERVICE_NAME}-{METHOD_NAME}) {oClientResponse.Content.Message}"; } else if (oClientResponse.StatusCode == HttpStatusCode.Unauthorized) { oResponse.Message = $"({SERVICE_NAME}-{METHOD_NAME}) [401] Acceso Denegado."; } else if (oClientResponse.StatusCode == HttpStatusCode.NotFound) { oResponse.Message = $"({SERVICE_NAME}-{METHOD_NAME}) [404] Ruta Invalida."; } else if (oClientResponse.StatusCode == HttpStatusCode.InternalServerError) { oResponse.Message = $"({SERVICE_NAME}-{METHOD_NAME}) [500] Error Interno."; } else { oResponse.Message = $"({SERVICE_NAME}-{METHOD_NAME}) [{(int)oClientResponse.StatusCode}] Error Desconocido."; } } return(oResponse); } catch (Exception ex) { throw new Exception($"({SERVICE_NAME}-{METHOD_NAME}) : " + ex.Message); } }