コード例 #1
0
ファイル: PostalCodeValidator.cs プロジェクト: meutley/ISTS
        public async Task ValidateAsync(string postalCode, PostalCodeValidatorTypes validationTypes = PostalCodeValidatorTypes.Format)
        {
            ArgumentNotNullValidator.Validate(postalCode, nameof(postalCode));

            if (string.IsNullOrWhiteSpace(postalCode))
            {
                throw new DomainValidationException(new ArgumentException("Postal Code cannot be empty or whitespace"));
            }

            if (validationTypes.HasFlag(PostalCodeValidatorTypes.Format))
            {
                if (!Regex.IsMatch(postalCode, FiveDigitPattern))
                {
                    throw new DomainValidationException(new PostalCodeFormatException("Postal Code must be a 5-digit (#####) value"));
                }
            }

            if (validationTypes.HasFlag(PostalCodeValidatorTypes.Exists))
            {
                var entity = await _postalCodeRepository.GetAsync(postalCode);

                if (entity == null)
                {
                    throw new DomainValidationException(new PostalCodeNotFoundException());
                }
            }
        }
コード例 #2
0
ファイル: StudioService.cs プロジェクト: meutley/ISTS
        public async Task <List <StudioSearchResultDto> > SearchAsync(StudioSearchModel searchModel)
        {
            ArgumentNotNullValidator.Validate(searchModel, nameof(searchModel));

            var postalCodes = await GetPostalCodes(searchModel);

            var studios = await _studioRepository.GetAsync();

            var studiosWithPostalCodes = studios
                                         .Where(
                s =>
                postalCodes.Any(p => p.Code == s.PostalCode));

            var result = studiosWithPostalCodes.Select(s =>
                                                       new StudioSearchResultDto
            {
                Id          = s.Id,
                Name        = s.Name,
                FriendlyUrl = s.FriendlyUrl,
                OwnerUserId = s.OwnerUserId,
                PostalCode  = s.PostalCode,
                Distance    = (double)postalCodes.First(p => p.Code == s.PostalCode).Distance
            })
                         .OrderBy(s => s.Distance)
                         .ToList();

            return(result);
        }
コード例 #3
0
ファイル: UserPasswordService.cs プロジェクト: meutley/ISTS
        public bool ValidateHash(string password, byte[] passwordHash, byte[] passwordSalt)
        {
            ArgumentNotNullValidator.Validate(password, nameof(password));

            if (string.IsNullOrWhiteSpace(password))
            {
                throw new ArgumentException("Value cannot be empty or whitespace", nameof(password));
            }

            if (passwordHash.Length != 64)
            {
                throw new ArgumentException("Expected 64-byte password hash", nameof(passwordHash));
            }

            if (passwordSalt.Length != 128)
            {
                throw new ArgumentException("Expected 128-byte password salt", nameof(passwordSalt));
            }

            using (var hmac = new System.Security.Cryptography.HMACSHA512(passwordSalt))
            {
                var computedHash = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password));
                for (var x = 0; x < computedHash.Length; x++)
                {
                    if (computedHash[x] != passwordHash[x])
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
コード例 #4
0
        public async Task <IActionResult> Put([FromBody] StudioDto model)
        {
            ArgumentNotNullValidator.Validate(model, nameof(model));
            ValidateUserIsOwner(model.OwnerUserId);

            var studio = await _studioService.UpdateAsync(model);

            return(Ok(studio));
        }
コード例 #5
0
        public Room CreateRoom(string name)
        {
            ArgumentNotNullValidator.Validate(name, nameof(name));

            var room = Room.Create(this.Id, name);

            Rooms.Add(room);

            return(room);
        }
コード例 #6
0
        public async Task <IActionResult> Post([FromBody] StudioDto model)
        {
            ArgumentNotNullValidator.Validate(model, nameof(model));

            model.OwnerUserId = UserId.Value;
            var studio = await _studioService.CreateAsync(model);

            var studioUri = ApiHelper.GetResourceUri("studios", studio.Id);

            return(Created(studioUri, studio));
        }
コード例 #7
0
ファイル: StudioService.cs プロジェクト: meutley/ISTS
        private async Task <List <PostalCodeDistance> > GetPostalCodes(
            StudioSearchModel searchModel)
        {
            var criteria = searchModel.PostalCodeSearchCriteria;

            ArgumentNotNullValidator.Validate(criteria, nameof(criteria));

            var postalCodesWithinDistance =
                (await _postalCodeRepository.GetPostalCodesWithinDistance(
                     criteria.FromPostalCode,
                     criteria.Distance)).ToList();

            return(postalCodesWithinDistance);
        }
コード例 #8
0
        public async Task ValidateAsync(Guid?userId, string email, string displayName, string password, string postalCode)
        {
            ArgumentNotNullValidator.Validate(email, nameof(email));
            ArgumentNotNullValidator.Validate(displayName, nameof(displayName));
            ArgumentNotNullValidator.Validate(password, nameof(password));
            ArgumentNotNullValidator.Validate(postalCode, nameof(postalCode));

            if (string.IsNullOrWhiteSpace(password))
            {
                throw new DomainValidationException(new ArgumentException(string.Format("Password cannot be empty or whitespace")));
            }

            _emailValidator.Validate(email);

            await _postalCodeValidator.ValidateAsync(
                postalCode,
                PostalCodeValidatorTypes.Format | PostalCodeValidatorTypes.Exists);

            await CheckIfEmailInUse(userId, email);

            ValidateDisplayName(displayName);
        }