Add upload from web support
This commit is contained in:
1 parent
95ed2a8a85
commit
43c704044a
1 file changed
+21
-9
@@ -10,6 +10,7 @@ import io.ib67.sfcraft.util.litematic.LitematicConverterV3;
|
|||||||
import io.javalin.Javalin;
|
import io.javalin.Javalin;
|
||||||
import io.javalin.http.Context;
|
import io.javalin.http.Context;
|
||||||
import io.javalin.http.UploadedFile;
|
import io.javalin.http.UploadedFile;
|
||||||
|
import io.netty.buffer.Unpooled;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.log4j.Log4j2;
|
import lombok.extern.log4j.Log4j2;
|
||||||
import net.minecraft.nbt.NbtIo;
|
import net.minecraft.nbt.NbtIo;
|
||||||
@@ -18,6 +19,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.util.Base64;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Log4j2
|
@Log4j2
|
||||||
@@ -35,31 +37,41 @@ public class WebModule extends ServerModule {
|
|||||||
public void onInitialize() {
|
public void onInitialize() {
|
||||||
Files.createDirectories(SCHEMATIC_DIR);
|
Files.createDirectories(SCHEMATIC_DIR);
|
||||||
javalin = Javalin.create(cfg -> cfg.useVirtualThreads = false)
|
javalin = Javalin.create(cfg -> cfg.useVirtualThreads = false)
|
||||||
.put("/api/schematics", this::uploadSchematic);
|
.options("/api/schematics/{name}", this::onUploadOptions)
|
||||||
|
.put("/api/schematics/{name}", this::uploadSchematic);
|
||||||
Thread.ofVirtual().name("SFCraft API Web").start(() -> {
|
Thread.ofVirtual().name("SFCraft API Web").start(() -> {
|
||||||
javalin.start(config.httpPort);
|
javalin.start(config.httpPort);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onUploadOptions(@NotNull Context context) {
|
||||||
|
context.res().addHeader("Access-Control-Allow-Origin", "*");
|
||||||
|
context.res().addHeader("Access-Control-Allow-Methods", "OPTIONS, PUT");
|
||||||
|
context.res().addHeader("Access-Control-Allow-Headers", context.header("Access-Control-Request-Headers"));
|
||||||
|
context.res().addHeader("Access-Control-Max-Age", "86400");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
javalin.stop();
|
javalin.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void uploadSchematic(@NotNull Context context) {
|
private void uploadSchematic(@NotNull Context context) {
|
||||||
|
onUploadOptions(context);
|
||||||
if (context.contentLength() > config.maxSchematicSize) {
|
if (context.contentLength() > config.maxSchematicSize) {
|
||||||
context.result("Content is too large!");
|
context.result("Content is too large!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// var signRaw = Base64.getUrlDecoder().decode(context.pathParam("sign"));
|
var signRaw = Base64.getUrlDecoder().decode(context.pathParam("sign"));
|
||||||
// var verifiedSign = signatureService.readSignature(Unpooled.wrappedBuffer(signRaw));
|
var verifiedSign = signatureService.readSignature(Unpooled.wrappedBuffer(signRaw));
|
||||||
// if ((verifiedSign.permission() & PERMISSION_UPLOAD_SCHEMATICS) == 0) {
|
if ((verifiedSign.permission() & PERMISSION_UPLOAD_SCHEMATICS) == 0) {
|
||||||
// context.result("Permission denied!");
|
context.result("Permission denied!");
|
||||||
// return;
|
return;
|
||||||
// }
|
}
|
||||||
var files = context.uploadedFileMap();
|
var files = context.uploadedFileMap();
|
||||||
files.forEach((k, v) -> handleUploadSchematic(context, k, v));
|
var name = context.pathParam("name");
|
||||||
|
files.forEach((k, v) -> handleUploadSchematic(context, name, v));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@@ -76,7 +88,7 @@ public class WebModule extends ServerModule {
|
|||||||
var baseFileName = Helper.cleanFileName(fileName.substring(0, fileName.length() - 10));
|
var baseFileName = Helper.cleanFileName(fileName.substring(0, fileName.length() - 10));
|
||||||
log.info("Handling new file: {}", fileName);
|
log.info("Handling new file: {}", fileName);
|
||||||
if (fileName.endsWith(".schematic")) {
|
if (fileName.endsWith(".schematic")) {
|
||||||
Files.write(SCHEMATIC_DIR.resolve(baseFileName+".schematic"), file.content().readAllBytes());
|
Files.write(SCHEMATIC_DIR.resolve(baseFileName + ".schematic"), file.content().readAllBytes());
|
||||||
log.info("Saved " + fileName + " as a schematic.");
|
log.info("Saved " + fileName + " as a schematic.");
|
||||||
} else if (fileName.endsWith(".litematic")) {
|
} else if (fileName.endsWith(".litematic")) {
|
||||||
log.error("Handling new {}", fileName);
|
log.error("Handling new {}", fileName);
|
||||||
|
|||||||
Reference in new issue
Block a user