Skip to content

Commit 6bfb4f7

Browse files
authored
Merge pull request #4 from Kiber2009/feature/uploading
Feature/uploading
2 parents 8d2f548 + e70f6c5 commit 6bfb4f7

5 files changed

Lines changed: 91 additions & 2 deletions

File tree

‎build.gradle.kts‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ tasks {
3535
description = ""
3636
dependsOn("publishAllPublicationsToMavenCentralRepository")
3737
doLast {
38-
val path = "https://ossrh-staging-api.central.sonatype.com/manual/upload/defaultRepository/$namespace?publishing_type=automatic"
38+
val path =
39+
"https://ossrh-staging-api.central.sonatype.com/manual/upload/defaultRepository/$namespace?publishing_type=automatic"
3940
val auth = Base64.getEncoder().encodeToString(
4041
"${System.getenv("MAVEN_CENTRAL_USERNAME")}:${System.getenv("MAVEN_CENTRAL_PASSWORD")}"
4142
.toByteArray()
@@ -94,6 +95,9 @@ repositories {
9495
dependencies {
9596
@Suppress("VulnerableLibrariesLocal", "RedundantSuppression")
9697
compileOnly("io.papermc.paper:paper-api:${mcVersion}.build.+")
98+
99+
compileOnly("org.apache.httpcomponents:httpclient:4.5.14")
100+
compileOnly("org.apache.httpcomponents:httpmime:4.5.14")
97101
}
98102

99103
java {

‎src/main/java/io/github/kiber2009/plugin/contentapi/ContentApiPlugin.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package io.github.kiber2009.plugin.contentapi;
22

3+
import com.google.gson.Gson;
4+
import com.google.gson.GsonBuilder;
35
import io.github.kiber2009.plugin.contentapi.commands.GiveCommand;
6+
import io.github.kiber2009.plugin.contentapi.uploading.LobfileUploadProvider;
47
import io.papermc.paper.command.brigadier.Commands;
58
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
69
import org.bukkit.plugin.java.JavaPlugin;
710
import org.jspecify.annotations.NonNull;
811

912
public final class ContentApiPlugin extends JavaPlugin {
13+
public static final Gson GSON = new GsonBuilder()
14+
.registerTypeAdapter(LobfileUploadProvider.Response.class, LobfileUploadProvider.Response.Deserializer.INSTANCE)
15+
.create();
1016

1117
private static ContentApiPlugin instance;
1218

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package io.github.kiber2009.plugin.contentapi.uploading;
2+
3+
import com.google.gson.*;
4+
import io.github.kiber2009.plugin.contentapi.ContentApiPlugin;
5+
import org.apache.http.client.methods.CloseableHttpResponse;
6+
import org.apache.http.client.methods.HttpPost;
7+
import org.apache.http.entity.ContentType;
8+
import org.apache.http.entity.mime.MultipartEntityBuilder;
9+
import org.apache.http.impl.client.CloseableHttpClient;
10+
import org.apache.http.impl.client.HttpClients;
11+
import org.apache.http.util.EntityUtils;
12+
import org.jspecify.annotations.NonNull;
13+
14+
import java.io.IOException;
15+
import java.lang.reflect.Type;
16+
import java.net.URI;
17+
18+
public class LobfileUploadProvider implements UploadProvider {
19+
private static final URI UPLOAD_URI = URI.create("https://lobfile.com/api/v3/upload");
20+
21+
private final String apiKey;
22+
23+
public LobfileUploadProvider(final String apiKey) {
24+
this.apiKey = apiKey;
25+
}
26+
27+
@Override
28+
public @NonNull String uploadBytes(final @NonNull String fileName, final byte @NonNull [] bytes) {
29+
try (final CloseableHttpClient client = HttpClients.createDefault()) {
30+
final HttpPost request = new HttpPost(UPLOAD_URI);
31+
request.setHeader("X-API-Key", apiKey);
32+
request.setEntity(MultipartEntityBuilder.create()
33+
.addBinaryBody("file", bytes, ContentType.APPLICATION_OCTET_STREAM, fileName)
34+
.addTextBody("sha256", "john_doe")
35+
.build());
36+
try (final CloseableHttpResponse httpResponse = client.execute(request)) {
37+
final String responseString = EntityUtils.toString(httpResponse.getEntity());
38+
final Response response = ContentApiPlugin.GSON.fromJson(responseString, Response.class);
39+
if (response.success)
40+
return response.url;
41+
else
42+
throw new RuntimeException("Error: " + response.error);
43+
}
44+
} catch (final IOException e) {
45+
throw new RuntimeException(e);
46+
}
47+
}
48+
49+
public record Response(boolean success, String url, String error) {
50+
public static final class Deserializer implements JsonDeserializer<Response> {
51+
public static final Deserializer INSTANCE = new Deserializer();
52+
53+
private Deserializer() {
54+
}
55+
56+
@Override
57+
public Response deserialize(final JsonElement json, final Type typeOfT,
58+
final JsonDeserializationContext context) throws JsonParseException {
59+
final JsonObject object = json.getAsJsonObject();
60+
61+
final JsonElement url = object.get("url");
62+
final JsonElement error = object.get("error");
63+
64+
return new Response(object.get("success").getAsBoolean(),
65+
url != null ? url.getAsString() : null,
66+
error != null ? error.getAsString() : null);
67+
}
68+
}
69+
}
70+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.github.kiber2009.plugin.contentapi.uploading;
2+
3+
import org.jspecify.annotations.NonNull;
4+
5+
public interface UploadProvider {
6+
@NonNull String uploadBytes(final @NonNull String fileName, final byte @NonNull [] bytes);
7+
}

‎src/main/resources/plugin.yml‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ version: $version
33
main: io.github.kiber2009.plugin.contentapi.ContentApiPlugin
44
api-version: $mcVersion
55
author: $author
6-
description: $description
6+
description: $description
7+
libraries:
8+
- org.apache.httpcomponents:httpmime:4.5.14

0 commit comments

Comments
 (0)