diff options
author | Pat Long <pllong@arista.com> | 2020-04-23 13:52:22 -0400 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2020-05-10 11:29:27 +0200 |
commit | d27dceb3844415510e5bad54ace67add7c75e293 (patch) | |
tree | a06aa3485129d2847eed2f4e079d420e81bc189c /org.eclipse.jgit.lfs.server/src/org/eclipse | |
parent | f30e48914e72efe2ac0d28140e07aa8d647de4f8 (diff) | |
download | jgit-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/org/eclipse')
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( |