Skip to content

Commit b0e56d3

Browse files
authored
Merge pull request #4030 from ChimneySwift/generic-s3
Allow generic S3 endpoints for alternative services
2 parents 20700c2 + 1ba6dd4 commit b0e56d3

File tree

25 files changed

+56
-18
lines changed

25 files changed

+56
-18
lines changed

DynmapCore/build.gradle

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@ dependencies {
1919
implementation 'org.yaml:snakeyaml:1.23' // DON'T UPDATE - NEWER ONE TRIPS ON WINDOWS ENCODED FILES
2020
implementation 'com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer:20180219.1'
2121
implementation 'org.postgresql:postgresql:42.2.18'
22-
implementation 'io.github.linktosriram:s3-lite-core:0.2.0'
23-
implementation 'io.github.linktosriram:s3-lite-api:0.2.0'
24-
implementation 'io.github.linktosriram:s3-lite-http-client-url-connection:0.2.0'
25-
implementation 'io.github.linktosriram:s3-lite-http-client-spi:0.2.0'
26-
implementation 'io.github.linktosriram:s3-lite-util:0.2.0'
22+
implementation 'io.github.linktosriram.s3lite:core:0.0.2-SNAPSHOT'
23+
implementation 'io.github.linktosriram.s3lite:api:0.0.2-SNAPSHOT'
24+
implementation 'io.github.linktosriram.s3lite:http-client-url-connection:0.0.2-SNAPSHOT'
25+
implementation 'io.github.linktosriram.s3lite:http-client-spi:0.0.2-SNAPSHOT'
26+
implementation 'io.github.linktosriram.s3lite:util:0.0.2-SNAPSHOT'
27+
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1'
28+
implementation 'com.sun.xml.bind:jaxb-impl:3.0.0'
2729
}
2830

2931
processResources {
@@ -58,11 +60,13 @@ shadowJar {
5860
include(dependency('org.eclipse.jetty::'))
5961
include(dependency('org.eclipse.jetty.orbit:javax.servlet:'))
6062
include(dependency('org.postgresql:postgresql:'))
61-
include(dependency('io.github.linktosriram:s3-lite-core:'))
62-
include(dependency('io.github.linktosriram:s3-lite-api:'))
63-
include(dependency('io.github.linktosriram:s3-lite-http-client-url-connection:'))
64-
include(dependency('io.github.linktosriram:s3-lite-http-client-spi:'))
65-
include(dependency('io.github.linktosriram:s3-lite-util:'))
63+
include(dependency('io.github.linktosriram.s3lite:core:'))
64+
include(dependency('io.github.linktosriram.s3lite:api:'))
65+
include(dependency('io.github.linktosriram.s3lite:http-client-url-connection:'))
66+
include(dependency('io.github.linktosriram.s3lite:http-client-spi:'))
67+
include(dependency('io.github.linktosriram.s3lite:util:'))
68+
include(dependency('jakarta.xml.bind::'))
69+
include(dependency('com.sun.xml.bind::'))
6670
include(dependency(':DynmapCoreAPI'))
6771
exclude("META-INF/maven/**")
6872
exclude("META-INF/services/**")

DynmapCore/src/main/java/org/dynmap/storage/aws_s3/AWSS3MapStorage.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.dynmap.storage.aws_s3;
22

33
import java.io.IOException;
4+
import java.net.URI;
45
import java.nio.charset.StandardCharsets;
56
import java.security.MessageDigest;
67
import java.security.NoSuchAlgorithmException;
@@ -139,7 +140,7 @@ public boolean write(long hash, BufferOutputStream encImage, long timestamp) {
139140
else {
140141
PutObjectRequest req = PutObjectRequest.builder().bucketName(bucketname).key(baseKey).contentType(map.getImageFormat().getEncoding().getContentType())
141142
.addMetadata("x-dynmap-hash", Long.toHexString(hash)).addMetadata("x-dynmap-ts", Long.toString(timestamp)).build();
142-
s3.putObject(req, RequestBody.fromBytes(encImage.buf, encImage.len));
143+
s3.putObject(req, RequestBody.fromBytes(encImage.buf));
143144
}
144145
done = true;
145146
} catch (S3Exception x) {
@@ -221,7 +222,7 @@ public String toString() {
221222
}
222223

223224
private String bucketname;
224-
private String region;
225+
private Region region;
225226
private String access_key_id;
226227
private String secret_access_key;
227228
private String prefix;
@@ -248,10 +249,20 @@ public boolean init(DynmapCore core) {
248249
}
249250
// Get our settings
250251
bucketname = core.configuration.getString("storage/bucketname", "dynmap");
251-
region = core.configuration.getString("storage/region", "us-east-1");
252252
access_key_id = core.configuration.getString("storage/aws_access_key_id", System.getenv("AWS_ACCESS_KEY_ID"));
253253
secret_access_key = core.configuration.getString("storage/aws_secret_access_key", System.getenv("AWS_SECRET_ACCESS_KEY"));
254254
prefix = core.configuration.getString("storage/prefix", "");
255+
256+
// Either use a custom region, or one of the default AWS regions
257+
String region_name = core.configuration.getString("storage/region", "us-east-1");
258+
String region_endpoint = core.configuration.getString("storage/override_endpoint", "");
259+
260+
if (region_endpoint.length() > 0) {
261+
region = Region.of(region_name, URI.create(region_endpoint));
262+
} else {
263+
region = Region.fromString(region_name);
264+
}
265+
255266
if ((prefix.length() > 0) && (prefix.charAt(prefix.length()-1) != '/')) {
256267
prefix += '/';
257268
}
@@ -518,7 +529,7 @@ public boolean setPlayerFaceImage(String playername, FaceType facetype,
518529
}
519530
else {
520531
PutObjectRequest req = PutObjectRequest.builder().bucketName(bucketname).key(baseKey).contentType("image/png").build();
521-
s3.putObject(req, RequestBody.fromBytes(encImage.buf, encImage.len));
532+
s3.putObject(req, RequestBody.fromBytes(encImage.buf));
522533
}
523534
done = true;
524535
} catch (S3Exception x) {
@@ -571,7 +582,7 @@ public boolean setMarkerImage(String markerid, BufferOutputStream encImage) {
571582
}
572583
else {
573584
PutObjectRequest req = PutObjectRequest.builder().bucketName(bucketname).key(baseKey).contentType("image/png").build();
574-
s3.putObject(req, RequestBody.fromBytes(encImage.buf, encImage.len));
585+
s3.putObject(req, RequestBody.fromBytes(encImage.buf));
575586
}
576587
done = true;
577588
} catch (S3Exception x) {
@@ -734,7 +745,7 @@ else if (fileid.endsWith(".js")) {
734745
ct = "application/x-javascript";
735746
}
736747
PutObjectRequest req = PutObjectRequest.builder().bucketName(bucketname).key(baseKey).contentType(ct).build();
737-
s3.putObject(req, RequestBody.fromBytes(content.buf, content.len));
748+
s3.putObject(req, RequestBody.fromBytes(content.buf));
738749
standalone_cache.put(fileid, digest);
739750
}
740751
done = true;
@@ -763,7 +774,7 @@ private S3Client getConnection() throws S3Exception, StorageShutdownException {
763774
if (cpoolCount < POOLSIZE) { // Still more we can have
764775
c = new DefaultS3ClientBuilder()
765776
.credentialsProvider(() -> AwsBasicCredentials.create(access_key_id, secret_access_key))
766-
.region(Region.fromString(region))
777+
.region(region)
767778
.httpClient(URLConnectionSdkHttpClient.create())
768779
.build();
769780
if (c == null) {

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ allprojects {
3030
mavenLocal()
3131
maven { url 'https://libraries.minecraft.net/' }
3232
maven { url "https://oss.sonatype.org/content/repositories/releases" }
33+
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
3334
maven { url "https://repo.mikeprimm.com" }
3435
maven { url "https://repo.maven.apache.org/maven2" }
3536
maven { url "https://hub.spigotmc.org/nexus/content/repositories/snapshots/" }

fabric-1.14.4/src/main/resources/configuration.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ storage:
4747
#aws_access_key_id: "<aws-access-key-id>"
4848
#aws_secret_access_key: "<aws-secret-access-key>"
4949
#prefix: ""
50+
#override_endpoint: ""
5051

5152
components:
5253
- class: org.dynmap.ClientConfigurationComponent

fabric-1.15.2/src/main/resources/configuration.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ storage:
4747
#aws_access_key_id: "<aws-access-key-id>"
4848
#aws_secret_access_key: "<aws-secret-access-key>"
4949
#prefix: ""
50+
#override_endpoint: ""
5051

5152
components:
5253
- class: org.dynmap.ClientConfigurationComponent

fabric-1.16.4/src/main/resources/configuration.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ storage:
4747
#aws_access_key_id: "<aws-access-key-id>"
4848
#aws_secret_access_key: "<aws-secret-access-key>"
4949
#prefix: ""
50+
#override_endpoint: ""
5051

5152
components:
5253
- class: org.dynmap.ClientConfigurationComponent

fabric-1.17.1/src/main/resources/configuration.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ storage:
4747
#aws_access_key_id: "<aws-access-key-id>"
4848
#aws_secret_access_key: "<aws-secret-access-key>"
4949
#prefix: ""
50+
#override_endpoint: ""
5051

5152
components:
5253
- class: org.dynmap.ClientConfigurationComponent

fabric-1.18.2/src/main/resources/configuration.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ storage:
4747
#aws_access_key_id: "<aws-access-key-id>"
4848
#aws_secret_access_key: "<aws-secret-access-key>"
4949
#prefix: ""
50+
#override_endpoint: ""
5051

5152
components:
5253
- class: org.dynmap.ClientConfigurationComponent

fabric-1.19.1/src/main/resources/configuration.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ storage:
4747
#aws_access_key_id: "<aws-access-key-id>"
4848
#aws_secret_access_key: "<aws-secret-access-key>"
4949
#prefix: ""
50+
#override_endpoint: ""
5051

5152
components:
5253
- class: org.dynmap.ClientConfigurationComponent

fabric-1.19.3/src/main/resources/configuration.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ storage:
4747
#aws_access_key_id: "<aws-access-key-id>"
4848
#aws_secret_access_key: "<aws-secret-access-key>"
4949
#prefix: ""
50+
#override_endpoint: ""
5051

5152
components:
5253
- class: org.dynmap.ClientConfigurationComponent

0 commit comments

Comments
 (0)