Пример #1
0
        public async Task <User> Handle(VerifyCodeCommand request, CancellationToken cancellationToken = default)
        {
            User result = null;

            var identity = await _identityDbContext.Identities.FirstOrDefaultAsync(x => x.Code.Equals(request.Code) && x.Phone.Equals(request.Phone), cancellationToken);

            if (identity == null)
            {
                throw new ConstraintException();
            }

            var user = await _identityDbContext.Users.FirstOrDefaultAsync(x => x.CommunicationChannelsData.PhoneNumber.Equals(identity.Phone), cancellationToken);

            var salt = _utils.GenerateSalt(identity.Phone.Length);

            if (isLoginAttempt(user))
            {
                _identityDbContext.Identities.Remove(identity);
                user.Password = _utils.HashedPassword(user.CommunicationChannelsData.PhoneNumber, salt, _options.Pepper);
                user.Salt     = salt;
                await _identityDbContext.SaveChangesAsync(cancellationToken);

                result = user;
            }
            else
            {
                var newUser = new User
                {
                    Id       = identity.Id,
                    Password = _utils.HashedPassword(identity.Phone, salt, _options.Pepper),
                    PreferredCommunicationChannel = CommunicationChannelId.Phone,
                    CommunicationChannelsData     = new CommunicationChannelsData
                    {
                        PhoneNumber = identity.Phone
                    },
                    Salt = salt
                };
                await _identityDbContext.Users.AddAsync(newUser, cancellationToken);

                _identityDbContext.Identities.Remove(identity);
                await _identityDbContext.SaveChangesAsync(cancellationToken);

                _messageProducer.Enqueue(
                    new UserRegistratedEvent
                {
                    UserId = newUser.Id
                },
                    new Dictionary <string, string>()
                    );
                result = newUser;
            }

            return(result);
        }
        private async Task <bool> IsExist(RemoveUserCommand query, CancellationToken cancellationToken = default)
        {
            var user = await _identityDbContext.Users.SingleAsync(u => u.CommunicationChannelsData.PhoneNumber == query.Phone, cancellationToken);

            return(user.Password == _utils.HashedPassword(user.CommunicationChannelsData.PhoneNumber, user.Salt, _options.Value.Pepper));
        }
Пример #3
0
        public async Task <bool> IsExist(FindUserByPhoneAndPasswordQuery query, CancellationToken cancellationToken)
        {
            var user = await identityDBContext.Users.SingleAsync(u => u.Phone == query.Phone);

            return(user.Password == utils.HashedPassword(user.Phone, query.Password, user.Salt, options.Value.Pepper));
        }
Пример #4
0
        public async Task <bool> IsExist(RemoveUserCommand query, CancellationToken cancellationToken)
        {
            var user = await identityDBContext.Users.SingleAsync(u => u.Phone == query.Phone && u.Email == query.Email);

            return(user.Password == utils.HashedPassword(user.Phone, query.Password, user.Salt, options.Value.Pepper));
        }