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 thehostname
.
+ *
+ * @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(