summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.lfs.server/src
diff options
context:
space:
mode:
authorPat Long <pllong@arista.com>2020-04-23 13:52:22 -0400
committerMatthias Sohn <matthias.sohn@sap.com>2020-05-10 11:29:27 +0200
commitd27dceb3844415510e5bad54ace67add7c75e293 (patch)
treea06aa3485129d2847eed2f4e079d420e81bc189c /org.eclipse.jgit.lfs.server/src
parentf30e48914e72efe2ac0d28140e07aa8d647de4f8 (diff)
downloadjgit-d27dceb3844415510e5bad54ace67add7c75e293.tar.gz
jgit-d27dceb3844415510e5bad54ace67add7c75e293.zip
Allow for using custom s3 host with lfs server
By default, it will generate hostname using the aws region passed to the constructor. This will allow for easier testing, since you can just spin up a local minio (or other s3-compatible storage service) instance and point the application at that for the storage mechanism. It will also allow for storing lfs objects on-prem. Change-Id: I2566b1fcce58f3d306ddd23a8da702ef5a451c7b Signed-off-by: Pat Long <pllong@arista.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.jgit.lfs.server/src')
-rw-r--r--org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/internal/LfsServerText.java1
-rw-r--r--org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/s3/S3Config.java49
-rw-r--r--org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/s3/S3Repository.java6
3 files changed, 52 insertions, 4 deletions
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 bed485f605..56d59bb540 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 f3dd2781c8..3942e22a8e 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;
/**
- * <p>Constructor for S3Config.</p>
+ * <p>
+ * Constructor for S3Config.
+ * </p>
*
+ * @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;
@@ -57,6 +64,44 @@ public class S3Config {
}
/**
+ * <p>Constructor for S3Config.</p>
+ *
+ * @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 <code>hostname</code>.
+ *
+ * @return Get the S3 API host
+ * @since 5.8
+ */
+ public String getHostname() {
+ return hostname;
+ }
+
+ /**
* Get the <code>region</code>.
*
* @return Get name of AWS region this bucket resides in
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 bd1705b827..c7c7a7146b 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(