Beispiel #1
0
        public async Task <UsersLoginResultDto> RegisterManager(ManagerCreateDto managerDto)
        {
            await ValidateManagerCreateDto(managerDto);

            var manager = _mapper.Map <AppUser>(managerDto.User);

            manager.Company               = _mapper.Map <Company>(managerDto.Company);
            manager.Company.ChangeDate    = DateTime.Now;
            manager.UserName              = managerDto.User.Login;
            manager.Company.Subscriptions = new List <Subscription>()
            {
                new Subscription
                {
                    StartDate = DateTime.UtcNow,
                    EndDate   = DateTime.UtcNow.AddDays(7),
                    TariffId  = 2,
                    Active    = true
                }
            };

            manager.Created = DateTime.UtcNow;

            var result = _userManager.CreateAsync(manager, managerDto.User.Password).Result;

            if (!result.Succeeded)
            {
                var validationErrors = new List <ValidationResult>();
                foreach (var error in result.Errors)
                {
                    validationErrors.Add(new ValidationResult(error.Description));
                }

                var ex = new Exceptions.ValidationException("Ошибка регистрации", validationErrors);

                throw ex;
            }


            var user = _userManager.FindByNameAsync(manager.UserName).Result;
            await _userManager.AddToRoleAsync(user, "manager");

            var token = await GenerateJwtToken(user);

            return(new UsersLoginResultDto {
                Name = user.UserName, Token = token
            });
        }
        /// <summary>
        /// Stores the errors in a ValidationException object to the specified modelstate dictionary.
        /// </summary>
        public static void AddValidationException(this ModelStateDictionary modelState,
                                                  Exceptions.ValidationException exception)
        {
            if (!string.IsNullOrEmpty(exception.Message))
            {
                modelState.AddModelError(string.Empty, exception.Message);
            }

            foreach (var failure in exception.Failures)
            {
                var key = failure.MemberName;

                if (!modelState.ContainsKey(key) || modelState[key].Errors.All(i => i.ErrorMessage != failure.Message))
                {
                    modelState.AddModelError(key, failure.Message);
                }
            }
        }
        public void Domain_validation_exception_should_take_into_account_IValidatableObject()
        {
            // Arrange
            var obj = new User();

            // Act
            Exceptions.ValidationException validationException = null;
            try
            {
                Saritasa.Tools.Domain.Exceptions.ValidationException.ThrowFromObjectValidation(obj);
            }
            catch (Exceptions.ValidationException ex)
            {
                validationException = ex;
            }

            // Assert
            Assert.NotNull(validationException);
            Assert.Equal(1, validationException.SummaryErrors.Count());
            Assert.Equal(2, validationException.Errors.Count);
        }
        public void Domain_validation_exception_should_throw_on_not_valid_object()
        {
            // Arrange
            var obj = new Product();

            // Act
            Exceptions.ValidationException validationException = null;
            try
            {
                Saritasa.Tools.Domain.Exceptions.ValidationException.ThrowFromObjectValidation(obj);
            }
            catch (Exceptions.ValidationException ex)
            {
                validationException = ex;
            }

            // Assert
            Assert.NotNull(validationException);
            Assert.Equal(0, validationException.SummaryErrors.Count());
            Assert.Equal(1, validationException.Errors.Count);
        }
        public void Domain_validation_should_work_on_MetadataType_attribute()
        {
            // Arrange
            var obj = new Job();

            // Act
            Exceptions.ValidationException.UseMetadataType = true;
            Exceptions.ValidationException validationException = null;
            try
            {
                Saritasa.Tools.Domain.Exceptions.ValidationException.ThrowFromObjectValidation(obj);
            }
            catch (Exceptions.ValidationException ex)
            {
                validationException = ex;
            }

            // Assert
            Assert.NotNull(validationException);
            Assert.Equal(0, validationException.SummaryErrors.Count());
            Assert.Equal(2, validationException.Errors.Count);
        }
        /// <summary>
        /// Validates Model automatically
        /// </summary>
        /// <param name="context"></param>
        /// <inheritdoc />
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            string traceId = Guid.NewGuid().ToString();

            _logger.LogInformation("({traceId}): Start validation OnActionExecuting", traceId);

            if (context == null)
            {
                Exception exception = new Exception("ConsistentApiResponseErrors ValidateModelStateAttribute: The context is null");
                _logger.LogError(exception, exception.Message + " ({traceId})", traceId);

                throw exception;
            }


            List <ValidationFailure> allErrors = new List <ValidationFailure>();

            // Validate the basic model state
            if (!context.ModelState.IsValid)
            {
                // 2020-01-04: Use the "Exceptions.ValidationException" to convert ModelState to Fluent-ValidationFailures
                Exceptions.ValidationException validationException = new Exceptions.ValidationException("bad_request", context.ModelState, traceId);
                allErrors.AddRange(validationException.ValidationFailures);
            }
            else if (context.ActionArguments != null)
            {
                // Get the fluent validator for each argument and perform validation:
                foreach (KeyValuePair <string, object> ActionArgument in context.ActionArguments)
                {
                    if (ActionArgument.Value == null)
                    {
                        Exception exception = new Exception("ConsistentApiResponseErrors ValidateModelStateAttribute: The ActionArgument.Value is null");
                        _logger.LogError(exception, exception.Message + " ({traceId})", traceId);

                        throw exception;
                    }

                    IValidator validator = _validatorFactory.GetValidator(ActionArgument.Value.GetType());
                    if (validator == null)
                    {
                        // Add log if no validator is found:
                        _logger.LogWarning("{traceId}: The validator is null for type {ActionArgumentType}", traceId, ActionArgument.Value.GetType().ToString());
                        continue;
                    }

                    ValidationResult result = validator.Validate(ActionArgument.Value);
                    if (!result.IsValid)
                    {
                        allErrors.AddRange(result.Errors);
                    }

                    // Add log for the validation result:
                    _logger.LogInformation("({traceId}): The validation result: {IsResultValid} for value \"{ActionArgumentValue}\"", traceId, result.IsValid.ToString(), ActionArgument.Value.ToString());
                }
            }

            // When errors exist return a BadRequestObjectResult
            if (allErrors.Count > 0)
            {
                // Log validation errors with this specific traceID:
                _logger.LogWarning("({traceId}): Validation Errors: {ValidationErrors}", traceId, allErrors);

                context.Result = new BadRequestObjectResult(new ValidationError(allErrors, traceId));
            }

            // Add log for the validation result:
            _logger.LogInformation("({traceId}): OnActionExecuting: End validation", traceId);
        }