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); }
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 }); }
public IRedisClient GetClient() => IRedisClientFactory.GetClient();