Use multiline strings in `PostPolicyGenerator`

This commit is contained in:
Jon Chambers 2024-10-21 12:58:48 -04:00 committed by Jon Chambers
parent e6eb702a88
commit e3ee5c1f2e
1 changed files with 26 additions and 24 deletions

View File

@ -14,39 +14,41 @@ import org.whispersystems.textsecuregcm.util.Pair;
public class PostPolicyGenerator { public class PostPolicyGenerator {
public static final DateTimeFormatter AWS_DATE_TIME = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmssX"); public static final DateTimeFormatter AWS_DATE_TIME = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmssX");
private static final DateTimeFormatter CREDENTIAL_DATE = DateTimeFormatter.ofPattern("yyyyMMdd" ); private static final DateTimeFormatter CREDENTIAL_DATE = DateTimeFormatter.ofPattern("yyyyMMdd");
private final String region; private final String region;
private final String bucket; private final String bucket;
private final String awsAccessId; private final String awsAccessId;
public PostPolicyGenerator(String region, String bucket, String awsAccessId) { public PostPolicyGenerator(final String region, final String bucket, final String awsAccessId) {
this.region = region; this.region = region;
this.bucket = bucket; this.bucket = bucket;
this.awsAccessId = awsAccessId; this.awsAccessId = awsAccessId;
} }
public Pair<String, String> createFor(ZonedDateTime now, String object, int maxSizeInBytes) { public Pair<String, String> createFor(final ZonedDateTime now, final String object, final int maxSizeInBytes) {
String expiration = now.plusMinutes(30).format(DateTimeFormatter.ISO_INSTANT); final String expiration = now.plusMinutes(30).format(DateTimeFormatter.ISO_INSTANT);
String credentialDate = now.format(CREDENTIAL_DATE); final String credentialDate = now.format(CREDENTIAL_DATE);
String requestDate = now.format(AWS_DATE_TIME); final String requestDate = now.format(AWS_DATE_TIME);
String credential = String.format("%s/%s/%s/s3/aws4_request", awsAccessId, credentialDate, region); final String credential = String.format("%s/%s/%s/s3/aws4_request", awsAccessId, credentialDate, region);
String policy = String.format("{ \"expiration\": \"%s\",\n" + final String policy = String.format("""
" \"conditions\": [\n" + {
" {\"bucket\": \"%s\"},\n" + "expiration": "%s",
" {\"key\": \"%s\"},\n" + "conditions": [
" {\"acl\": \"private\"},\n" + {"bucket": "%s"},
" [\"starts-with\", \"$Content-Type\", \"\"],\n" + {"key": "%s"},
" [\"content-length-range\", 1, " + maxSizeInBytes + "],\n" + {"acl": "private"},
"\n" + ["starts-with", "$Content-Type", ""],
" {\"x-amz-credential\": \"%s\"},\n" + ["content-length-range", 1, %d],
" {\"x-amz-algorithm\": \"AWS4-HMAC-SHA256\"},\n" +
" {\"x-amz-date\": \"%s\" }\n" + {"x-amz-credential": "%s"},
" ]\n" + {"x-amz-algorithm": "AWS4-HMAC-SHA256"},
"}", expiration, bucket, object, credential, requestDate); {"x-amz-date": "%s" }
]
}
""", expiration, bucket, object, maxSizeInBytes, credential, requestDate);
return new Pair<>(credential, Base64.getEncoder().encodeToString(policy.getBytes(StandardCharsets.UTF_8))); return new Pair<>(credential, Base64.getEncoder().encodeToString(policy.getBytes(StandardCharsets.UTF_8)));
} }
} }