in teamcity-s3-sdk/src/main/java/jetbrains/buildServer/artifacts/s3/ListCloudFrontDistributionsFetcher.java [55:118]
protected ListDistributionsDto fetchDto(Map<String, String> parameters, @NotNull String projectId) throws ConnectionCredentialsException {
String bucketName = S3Util.getBucketName(parameters);
if (bucketName == null) {
throw new IllegalArgumentException("No S3 bucket specified");
}
String bucketRegion = BucketLocationFetcher.getRegionName(myAmazonS3Builder.withCorrectingRegionAndAcceleration(
parameters,
projectId,
correctedClient -> correctedClient.headBucket(b -> b.bucket(bucketName)).bucketRegion(),
true
));
String domainPattern = String.format(CloudFrontConstants.S3_BUCKET_DOMAIN_PATTERN, bucketName, bucketRegion);
String domainPatternNoRegion = String.format(CloudFrontConstants.S3_BUCKET_DOMAIN_PATTERN_NO_REGION, bucketName);
return myAmazonS3Builder.withCloudFrontClient(parameters, projectId, client -> {
final List<DistributionSummary> distributionSummaries = new LinkedList<>();
DistributionList distributionsList;
String marker = null;
do {
ListDistributionsRequest.Builder requestBuilder = ListDistributionsRequest.builder().maxItems("1000").marker(marker);
distributionsList = client.listDistributions(requestBuilder.build()).distributionList();
distributionSummaries.addAll(distributionsList.items());
marker = distributionsList.nextMarker();
} while (marker != null);
final List<KeyGroupSummary> keyGroups = new LinkedList<>();
KeyGroupList keyGroupList;
do {
ListKeyGroupsRequest.Builder requestBuilder = ListKeyGroupsRequest.builder().maxItems("1000").marker(marker);
keyGroupList = client.listKeyGroups(requestBuilder.build()).keyGroupList();
keyGroups.addAll(keyGroupList.items());
marker = keyGroupList.nextMarker();
} while (marker != null);
Map<String, KeyGroup> groupMap = keyGroups
.stream()
.map(KeyGroupSummary::keyGroup)
.collect(Collectors.toMap(KeyGroup::id, Function.identity()));
List<DistributionDto> distributions = distributionSummaries
.stream()
.filter(d -> d.origins()
.items()
.stream()
.anyMatch(o -> o.domainName().equals(domainPattern) || o.domainName().equals(domainPatternNoRegion))
).map(d -> {
String id = d.id();
String comment = d.comment();
Boolean enabled = d.enabled();
Set<String> publicKeys = new HashSet<>();
TrustedKeyGroups defaultKeyGroups = d.defaultCacheBehavior().trustedKeyGroups();
publicKeys.addAll(getAllPublicKeys(groupMap, defaultKeyGroups));
for (CacheBehavior item : d.cacheBehaviors().items()) {
publicKeys.addAll(getAllPublicKeys(groupMap, item.trustedKeyGroups()));
}
return new DistributionDto(id, comment, enabled, publicKeys);
})
.collect(Collectors.toList());
return new ListDistributionsDto(distributions);
});
}