Пример #1
0
        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);
            }
        }
Пример #2
0
    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)
        });
Пример #3
0
        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);
        }
Пример #5
0
        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);
        }
Пример #7
0
    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));
    }
Пример #9
0
        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());
                        }
                    }
                });
            });
        }
Пример #10
0
        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"));
        }