public void OnActionExecuting(ActionExecutingContext context) { if (context.ModelState.IsValid == false) { var errors = new List <object>(); for (int errorItemIndex = 0; errorItemIndex < context.ModelState.Keys.Count(); errorItemIndex++) { var errorKey = context.ModelState.Keys.ToList()[errorItemIndex]; var errorValue = context.ModelState.Values.ToList()[errorItemIndex]; errors.Add(new { Field = char.ToLowerInvariant(errorKey[0]) + errorKey.Substring(1), Reasons = errorValue.Errors.Select(error => error.ErrorMessage) }); } ErrorResponseViewModel errorResponse = new ErrorResponseViewModel { ErrorCode = HttpStatusCode.BadRequest.ToString(), Message = "Model is invalid", Errors = errors }; context.Result = new BadRequestObjectResult(errorResponse); } }
public async Task <IActionResult> Callback( AuthorizationCodeResponseViewModel authorizationCodeResponseViewModel, ImplicitFlowResponseQueryStringViewModel implicitFlowResponseQueryStringViewModel, ErrorResponseViewModel errorResponseAtResponseViewModel) { if (!string.IsNullOrWhiteSpace(errorResponseAtResponseViewModel.Error)) { var errorResponseAtCallback = OAuthMapper.Map(errorResponseAtResponseViewModel); return(ProcessOAuthClientErrorResponse(errorResponseAtCallback)); } var originalState = (string)TempData.ReadAndClear(Common.State); var codeVerifier = (string)TempData.ReadAndClear(Common.CodeVerifier); var authorizationCodeCallbackResponse = OAuthMapper.Map(authorizationCodeResponseViewModel); var implicitFlowCallbackResponse = OAuthMapper.Map(implicitFlowResponseQueryStringViewModel); var response = await _oAuthFlows.RunFlow( _oAuthClientConfiguration, authorizationCodeCallbackResponse, implicitFlowCallbackResponse, originalState : originalState, codeVerifier : codeVerifier); return(response switch { AccessTokenResponse accessTokenResponse => await SignInUser(accessTokenResponse, originalState), ErrorResponse errorResponse => ProcessOAuthClientErrorResponse(errorResponse) });
public void OnException(ExceptionContext context) { logger.LogInformation(context.Exception.ToString()); HttpResponse response = context.HttpContext.Response; ErrorResponseViewModel errorVM = CreateErrorResponseVM(context); if (context.Exception is HttpRequestException) { errorVM.Summary = "Machine learning server encoutered an error"; response.StatusCode = StatusCodes.Status500InternalServerError; } else if (context.Exception is WebScrappingException) { errorVM.Summary = "Error encountered when attempting to scrap website"; response.StatusCode = StatusCodes.Status500InternalServerError; } else if (context.Exception is DataPreprocessingException) { errorVM.Summary = "Documents submitted for analysis is not preprocessed properly"; response.StatusCode = StatusCodes.Status400BadRequest; } else { errorVM.Summary = "An unhandled error occured"; response.StatusCode = StatusCodes.Status500InternalServerError; } }
protected bool HasResponseErrors(ErrorResponseViewModel response) { if (response != null && response.Errors.Any()) { response.Errors.ForEach(e => ModelState.AddModelError(string.Empty, e)); return(true); } return(false); }
protected ErrorResponseViewModel CreateErrorResponseVM(ExceptionContext exceptionContext) { ErrorResponseViewModel errorVM = new ErrorResponseViewModel(); errorVM.Message = exceptionContext.Exception.Message; errorVM.Path = exceptionContext.HttpContext.Request.Path; errorVM.StackTrace = (exceptionContext.Exception.StackTrace)?.Substring(0, 500); errorVM.ExceptionName = exceptionContext.GetType().ToString(); errorVM.InnerException = exceptionContext.Exception.InnerException?.Message; return(errorVM); }
public ErrorResponseViewModel Error() { var context = HttpContext.Features.Get <IExceptionHandlerFeature>(); var exception = context?.Error; var responseException = new ErrorResponseViewModel(exception); //TODO Костыль. Код 204 не возвращает json => мы будем валиться на попытке получить тело ответа. Переделать по умному) Response.StatusCode = responseException.IsNoContent ? 403 : (int)responseException.Code; return(responseException); }
public static ErrorResponse Map(ErrorResponseViewModel source) { if (source == null) { return(null); } var destination = new ErrorResponse { Error = source.Error, ErrorDescription = source.ErrorDescription, ErrorUri = source.ErrorUri }; return(destination); }
public async Task <IActionResult> Callback( AuthorizationCodeResponseViewModel authorizationCodeResponseViewModel, ImplicitFlowResponseQueryStringViewModel implicitFlowResponseQueryStringViewModel, ErrorResponseViewModel errorResponseAtResponseViewModel) { if (!string.IsNullOrWhiteSpace(errorResponseAtResponseViewModel.Error)) { var errorResponseAtCallback = Utils.Mappers.OAuthMapper.Map(errorResponseAtResponseViewModel); return(ProcessOAuthClientErrorResponse(errorResponseAtCallback)); } var configurationName = (string)TempData.ReadAndClear(TempDataNames.OAuthTesterConfigurationName); var originalState = (string)TempData.ReadAndClear(Common.State); var codeVerifier = (string)TempData.ReadAndClear(Common.CodeVerifier); var oAuthTesterViewModel = Utils.Mappers.OAuthMapper.GetNewOAuthTesterViewModel(configurationName); oAuthTesterViewModel.OAuthClientConfiguration = _optionsMonitor.GetEx(configurationName); var oAuthFlows = _oAuthFlowsFactory.CreateOAuthFlows(configurationName); var authorizationCodeCallbackResponse = Utils.Mappers.OAuthMapper.Map(authorizationCodeResponseViewModel); var implicitFlowCallbackResponse = Utils.Mappers.OAuthMapper.Map(implicitFlowResponseQueryStringViewModel); var response = await oAuthFlows.RunFlow( oAuthTesterViewModel.OAuthClientConfiguration, authorizationCodeCallbackResponse, implicitFlowCallbackResponse, originalState : originalState, codeVerifier : codeVerifier); switch (response) { case AccessTokenResponse accessTokenResponse: oAuthTesterViewModel.AccessTokenResponse = Utils.Mappers.OAuthMapper.Map(accessTokenResponse); break; case ErrorResponse errorResponse: return(ProcessOAuthClientErrorResponse(errorResponse)); } return(View("Index", oAuthTesterViewModel)); }
public static void ConfigureExceptionHandler(this IApplicationBuilder app, ILoggerFactory loggerFactory) { var logger = loggerFactory.CreateLogger(typeof(ExceptionMiddlewareExtensions)); app.UseExceptionHandler(appError => { appError.Run(async context => { context.Response.ContentType = MediaTypeNames.Application.Json; IExceptionHandlerFeature contextFeature = context.Features.Get <IExceptionHandlerFeature>(); if (contextFeature != null) { if (contextFeature.Error is CalendarPlusApplicationException) { CalendarPlusApplicationException CalendarPlusException = contextFeature.Error as CalendarPlusApplicationException; context.Response.StatusCode = (int)HttpStatusCode.BadRequest; ErrorResponseViewModel errorModel = new ErrorResponseViewModel { ErrorCode = CalendarPlusException.StatusCode.ToString(), Message = contextFeature.Error.Message }; await context.Response.WriteAsync(Newtonsoft.Json.JsonConvert.SerializeObject(errorModel)); } else { logger.LogError($"Something went wrong: {contextFeature.Error}"); context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; await context.Response.WriteAsync(new ErrorResponseViewModel() { Message = "Internal Server Error." }.ToString()); } } }); }); }
public ActionResult Register(string userName, string password, string firstName, string lastName) { var user = _userDbContext.FindByEmail(userName); if (user != null) { var errorResponse = new ErrorResponseViewModel { HasErrors = true, Errors = new List <string> { "This email address is already registered" } }; return(View(errorResponse)); } var createdUser = _userDbContext.Add(new User { Email = userName, Password = CalculateMD5Hash(password), IsActive = false, FirstName = firstName, LastName = lastName }); if (createdUser != null) { var userId = createdUser.Id.ToString(); var identifier = Convert.ToBase64String(Encoding.Unicode.GetBytes(userId)); var confirmationLink = $"http://adslicenta.azurewebsites.net/Home/ConfirmEmail?id={identifier}"; var subject = "Conrfim your email"; var body = $"Click <a href='{confirmationLink}' target='_blank'>here</a> to register."; _emailService.SendEmail(createdUser.Email, subject, body); TempData["isEmailSent"] = true; } return(RedirectToAction("Index", "Home")); }