public async Task <ActionResult <Models.WorkerWithToken> > SignIn([FromBody] Models.AuthModel authModel)
        {
            var authModelValidator = new AuthModelValidator();
            var validationResult   = authModelValidator.Validate(authModel);

            if (!validationResult.IsValid)
            {
                return(UnprocessableEntity(validationResult.Errors.Select(x => new ValidatorException {
                    Field = x.PropertyName,
                    Message = x.ErrorCode,
                    Description = x.ErrorMessage
                }).ToList()));
            }

            var hashPassword = HashPassword.Hash(authModel.Password);
            var existUser    = _context.Workers
                               .Include(x => x.Speciality)
                               .ThenInclude(x => x.Department)
                               .SingleOrDefault(x => x.Email == authModel.Email && x.Password == hashPassword);

            if (existUser != null)
            {
                Models.File avatar;


                if (existUser.AvatarUrl != null)
                {
                    var fullFileName = existUser.AvatarUrl.Replace(Constans.ApiUrl + Constans.FileDownloadPart, string.Empty);
                    avatar = _context.Files.SingleOrDefault(x => x.Name == fullFileName);
                }
                else
                {
                    avatar = null;
                }


                var token = JWTExtension.CreateToken(existUser);
                return(Ok(new Models.WorkerWithToken {
                    Token = token,
                    Worker = ResponseWorkerList.FromApiWorker(existUser, avatar: avatar),
                }));
            }
            else
            {
                return(NotFound(new ExceptionInfo {
                    Message = AuthErrorsMessages.UserNotFound,
                    Description = "Сотрудник с таким Email и паролем не существует"
                }));
            }
        }
        public async Task <IResult <AuthEntity> > AddAsync(AuthModel authModel)
        {
            var validation = new AuthModelValidator().Validate(authModel);

            if (validation.Failed)
            {
                return(Result <AuthEntity> .Fail(validation.Message));
            }

            if (await _authRepository.AnyByLoginAsync(authModel.Login))
            {
                return(Result <AuthEntity> .Fail(Texts.AuthError));
            }

            var authEntity = AuthFactory.Create(authModel);

            var password = _hashService.Create(authEntity.Password, authEntity.Salt);

            authEntity.ChangePassword(password);

            await _authRepository.AddAsync(authEntity);

            return(Result <AuthEntity> .Success(authEntity));
        }
Beispiel #3
0
    public async Task <IResult <Auth> > AddAsync(AuthModel model)
    {
        var validation = new AuthModelValidator().Validation(model);

        if (validation.Failed)
        {
            return(validation.Fail <Auth>());
        }

        if (await _authRepository.AnyByLoginAsync(model.Login))
        {
            return(Result <Auth> .Fail("Login exists!"));
        }

        var auth = _authFactory.Create(model);

        var password = _hashService.Create(auth.Password, auth.Salt);

        auth.UpdatePassword(password);

        await _authRepository.AddAsync(auth);

        return(auth.Success());
    }