diff --git a/org.eclipse.jgit.lfs.server/resources/org/eclipse/jgit/lfs/server/internal/LfsServerText.properties b/org.eclipse.jgit.lfs.server/resources/org/eclipse/jgit/lfs/server/internal/LfsServerText.properties index 659714528..911cdcf12 100644 --- a/org.eclipse.jgit.lfs.server/resources/org/eclipse/jgit/lfs/server/internal/LfsServerText.properties +++ b/org.eclipse.jgit.lfs.server/resources/org/eclipse/jgit/lfs/server/internal/LfsServerText.properties @@ -4,6 +4,7 @@ objectNotFound=Object ''{0}'' not found undefinedS3AccessKey=S3 configuration: 'accessKey' is undefined undefinedS3Bucket=S3 configuration: 'bucket' is undefined undefinedS3Region=S3 configuration: 'region' is undefined +undefinedS3Hostname=S3 configuration: 'hostname' is undefined undefinedS3SecretKey=S3 configuration: 'secretKey' is undefined undefinedS3StorageClass=S3 configuration: 'storageClass' is undefined unparsableEndpoint=Unable to parse service endpoint: {0} diff --git a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/internal/LfsServerText.java b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/internal/LfsServerText.java index bed485f60..56d59bb54 100644 --- a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/internal/LfsServerText.java +++ b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/internal/LfsServerText.java @@ -33,6 +33,7 @@ public class LfsServerText extends TranslationBundle { /***/ public String undefinedS3AccessKey; /***/ public String undefinedS3Bucket; /***/ public String undefinedS3Region; + /***/ public String undefinedS3Hostname; /***/ public String undefinedS3SecretKey; /***/ public String undefinedS3StorageClass; /***/ public String unparsableEndpoint; diff --git a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/s3/S3Config.java b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/s3/S3Config.java index f3dd2781c..3942e22a8 100644 --- a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/s3/S3Config.java +++ b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/s3/S3Config.java @@ -16,6 +16,7 @@ package org.eclipse.jgit.lfs.server.s3; * @since 4.3 */ public class S3Config { + private final String hostname; private final String region; private final String bucket; private final String storageClass; @@ -25,8 +26,12 @@ public class S3Config { private final boolean disableSslVerify; /** - *

Constructor for S3Config.

+ *

+ * Constructor for S3Config. + *

* + * @param hostname + * S3 API host * @param region * AWS region * @param bucket @@ -43,10 +48,12 @@ public class S3Config { * @param disableSslVerify * if {@code true} disable Amazon server certificate and hostname * verification + * @since 5.8 */ - public S3Config(String region, String bucket, String storageClass, + public S3Config(String hostname, String region, String bucket, String storageClass, String accessKey, String secretKey, int expirationSeconds, boolean disableSslVerify) { + this.hostname = hostname; this.region = region; this.bucket = bucket; this.storageClass = storageClass; @@ -56,6 +63,44 @@ public class S3Config { this.disableSslVerify = disableSslVerify; } + /** + *

Constructor for S3Config.

+ * + * @param region + * AWS region + * @param bucket + * S3 storage bucket + * @param storageClass + * S3 storage class + * @param accessKey + * access key for authenticating to AWS + * @param secretKey + * secret key for authenticating to AWS + * @param expirationSeconds + * period in seconds after which requests signed for this bucket + * will expire + * @param disableSslVerify + * if {@code true} disable Amazon server certificate and hostname + * verification + */ + public S3Config(String region, String bucket, String storageClass, + String accessKey, String secretKey, int expirationSeconds, + boolean disableSslVerify) { + this(String.format("s3-%s.amazonaws.com", region), region, bucket, //$NON-NLS-1$ + storageClass, accessKey, secretKey, expirationSeconds, + disableSslVerify); + } + + /** + * Get the hostname. + * + * @return Get the S3 API host + * @since 5.8 + */ + public String getHostname() { + return hostname; + } + /** * Get the region. * diff --git a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/s3/S3Repository.java b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/s3/S3Repository.java index bd1705b82..c7c7a7146 100644 --- a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/s3/S3Repository.java +++ b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/s3/S3Repository.java @@ -159,6 +159,8 @@ public class S3Repository implements LargeFileRepository { config.getBucket()); assertNotEmpty(LfsServerText.get().undefinedS3Region, config.getRegion()); + assertNotEmpty(LfsServerText.get().undefinedS3Hostname, + config.getHostname()); assertNotEmpty(LfsServerText.get().undefinedS3SecretKey, config.getSecretKey()); assertNotEmpty(LfsServerText.get().undefinedS3StorageClass, @@ -173,8 +175,8 @@ public class S3Repository implements LargeFileRepository { private URL getObjectUrl(AnyLongObjectId oid) { try { - return new URL(String.format("https://s3-%s.amazonaws.com/%s/%s", //$NON-NLS-1$ - s3Config.getRegion(), s3Config.getBucket(), + return new URL(String.format("https://%s/%s/%s", //$NON-NLS-1$ + s3Config.getHostname(), s3Config.getBucket(), getPath(oid))); } catch (MalformedURLException e) { throw new IllegalArgumentException(MessageFormat.format(