public async Task <string[]> Handle(RetrievePasswordRequest request, CancellationToken cancellationToken)
        {
            _logger.Information("Get group with id {passwordGroupId}", request.PasswordGroupId);

            var redisClient = _redisClientFactory.GetClient();
            var oldCacheKey = new PasswordGroupKey(request.PasswordGroupId);
            var newCacheKey = new PasswordGroupKey(Guid.NewGuid());

            _logger.Information("Renaming key {@oldKey} to {@newKey}", oldCacheKey, newCacheKey);

            try
            {
                await redisClient.RenameAsync(oldCacheKey, newCacheKey);
            }
            catch (RedisServerException rse)
            {
                const string message = "Link not exists";
                _logger.Error(rse.Message);

                throw new HttpResponseException(HttpStatusCode.BadRequest, message);
            }

            var passwordGroup = await redisClient.GetAsync <PasswordGroupKey, PasswordGroup>(newCacheKey);

            await redisClient.DeleteAsync(newCacheKey);

            if (passwordGroup == null)
            {
                const string message = "Link not exists";
                _logger.Error(message);

                throw new HttpResponseException(HttpStatusCode.BadRequest, message);
            }

            var key = _keyGenerator.FromString(request.Key);

            var result = passwordGroup.Passwords
                         .Select(password => Handle(password, key))
                         .ToArray();

            return(result);
        }
Пример #2
0
        public async Task <GenerateLinkModel> Handle(GeneratePasswordLinkRequest request, CancellationToken cancellationToken)
        {
            var key = _keyGenerator.GenerateKey();

            var passwordGroup = new PasswordGroup
            {
                Id        = Guid.NewGuid(),
                Passwords = request.Passwords.Select(password => Handle(password, key)).ToArray(),
            };

            var expiration = TimeSpan.FromSeconds(request.ExpiresIn);

            _logger.Information("Create new group {@group} for {@expiration}", passwordGroup, expiration);

            var redisClient = _redisClientFactory.GetClient();
            await redisClient.SetAsync(new PasswordGroupKey(passwordGroup.Id), passwordGroup, expiration);

            return(new GenerateLinkModel
            {
                Key = _keyGenerator.ToString(key),
                PasswordGroupId = passwordGroup.Id
            });
        }
Пример #3
0
 public IRedisClient GetClient()
 => IRedisClientFactory.GetClient();