From 12b5afe1209d837b9eb1a6f76121e039d83c0c26 Mon Sep 17 00:00:00 2001
From: Gregor Lohaus
Date: Wed, 25 Feb 2026 12:44:20 +0100
Subject: [PATCH] more htmx
---
.../gtransfer/config/ConfigRuntimeHints.java | 5 +
.../gtransfer/config/DefaultConfig.java | 7 +
.../gtransfer/config/types/Config.java | 2 +
.../gtransfer/config/types/UploadConfig.java | 12 ++
.../controller/UploadController.java | 42 +++++-
Backend/src/main/resources/static/crypto.js | 28 ++++
Backend/src/main/resources/static/upload.js | 138 +++++++-----------
.../src/main/resources/templates/index.html | 51 +------
.../resources/templates/upload/options.html | 27 ++++
.../resources/templates/upload/result.html | 17 +++
10 files changed, 191 insertions(+), 138 deletions(-)
create mode 100644 Backend/src/main/java/com/gregor_lohaus/gtransfer/config/types/UploadConfig.java
create mode 100644 Backend/src/main/resources/static/crypto.js
create mode 100644 Backend/src/main/resources/templates/upload/options.html
create mode 100644 Backend/src/main/resources/templates/upload/result.html
diff --git a/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/ConfigRuntimeHints.java b/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/ConfigRuntimeHints.java
index e1acb05..94fe489 100644
--- a/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/ConfigRuntimeHints.java
+++ b/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/ConfigRuntimeHints.java
@@ -50,6 +50,11 @@ public class ConfigRuntimeHints implements RuntimeHintsRegistrar {
MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS,
MemberCategory.ACCESS_DECLARED_FIELDS,
MemberCategory.ACCESS_PUBLIC_FIELDS);
+ hints.reflection().registerType(UploadConfig.class,
+ MemberCategory.INVOKE_DECLARED_CONSTRUCTORS,
+ MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS,
+ MemberCategory.ACCESS_DECLARED_FIELDS,
+ MemberCategory.ACCESS_PUBLIC_FIELDS);
hints.reflection().registerType(TypeAdapter.class,
MemberCategory.ACCESS_DECLARED_FIELDS,
MemberCategory.ACCESS_PUBLIC_FIELDS);
diff --git a/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/DefaultConfig.java b/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/DefaultConfig.java
index c47322e..e3c96c8 100644
--- a/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/DefaultConfig.java
+++ b/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/DefaultConfig.java
@@ -10,6 +10,7 @@ import com.gregor_lohaus.gtransfer.config.types.ServletConfig;
import com.gregor_lohaus.gtransfer.config.types.SpringConfig;
import com.gregor_lohaus.gtransfer.config.types.StorageService;
import com.gregor_lohaus.gtransfer.config.types.StorageServiceType;
+import com.gregor_lohaus.gtransfer.config.types.UploadConfig;
public class DefaultConfig {
public static final Config config;
@@ -42,6 +43,12 @@ public class DefaultConfig {
sc.servletConfig = svc;
c.springConfig = sc;
+
+ UploadConfig uc = new UploadConfig();
+ uc.maxDownloadLimit = 100;
+ uc.maxExpiryDays = 30;
+ c.uploadConfig = uc;
+
config = c;
}
}
diff --git a/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/types/Config.java b/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/types/Config.java
index f7b7b32..f5f3284 100644
--- a/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/types/Config.java
+++ b/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/types/Config.java
@@ -11,4 +11,6 @@ public class Config implements TomlSerializable {
public SpringConfig springConfig;
@Nested(name = "storageService")
public StorageService storageService;
+ @Nested(name = "upload")
+ public UploadConfig uploadConfig;
}
diff --git a/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/types/UploadConfig.java b/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/types/UploadConfig.java
new file mode 100644
index 0000000..61251b6
--- /dev/null
+++ b/Backend/src/main/java/com/gregor_lohaus/gtransfer/config/types/UploadConfig.java
@@ -0,0 +1,12 @@
+package com.gregor_lohaus.gtransfer.config.types;
+
+import com.gregor_lohaus.gtransfer.config.annotations.Property;
+
+import io.github.wasabithumb.jtoml.serial.TomlSerializable;
+
+public class UploadConfig implements TomlSerializable {
+ @Property(name = "maxDownloadLimit")
+ public Integer maxDownloadLimit;
+ @Property(name = "maxExpiryDays")
+ public Integer maxExpiryDays;
+}
diff --git a/Backend/src/main/java/com/gregor_lohaus/gtransfer/controller/UploadController.java b/Backend/src/main/java/com/gregor_lohaus/gtransfer/controller/UploadController.java
index cf228cf..4760da0 100644
--- a/Backend/src/main/java/com/gregor_lohaus/gtransfer/controller/UploadController.java
+++ b/Backend/src/main/java/com/gregor_lohaus/gtransfer/controller/UploadController.java
@@ -1,37 +1,63 @@
package com.gregor_lohaus.gtransfer.controller;
import java.io.IOException;
-import java.util.Map;
+import java.time.LocalDateTime;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.gregor_lohaus.gtransfer.model.File;
import com.gregor_lohaus.gtransfer.model.FileRepository;
import com.gregor_lohaus.gtransfer.services.filewriter.AbstractStorageService;
-@RestController
+@Controller
public class UploadController {
+ @Value("${gtransfer-config.upload.maxDownloadLimit:100}")
+ private Integer maxDownloadLimit;
+
+ @Value("${gtransfer-config.upload.maxExpiryDays:30}")
+ private Integer maxExpiryDays;
+
@Autowired
private AbstractStorageService storageService;
@Autowired
private FileRepository fileRepository;
+ @GetMapping("/upload/options")
+ public String options(@RequestParam String name, Model model) {
+ model.addAttribute("name", name);
+ model.addAttribute("maxExpiryDays", maxExpiryDays);
+ model.addAttribute("maxDownloadLimit", maxDownloadLimit);
+ return "upload/options :: form";
+ }
+
@PostMapping("/upload")
- public ResponseEntity
+
-
-
-
-
📂
-
- Choose a file
- or drag and drop here
-
-
Any file type · Up to 10GB
+
📂
+
+ Choose a file
+ or drag and drop here
-
-
-
-
📄
-
-
-
-
-
-
-
-
-
-
-
-
-
✅
-
Your file is ready to share
-
-
-
-
-
-
-
-
+
Any file type · Up to 10GB
diff --git a/Backend/src/main/resources/templates/upload/options.html b/Backend/src/main/resources/templates/upload/options.html
new file mode 100644
index 0000000..43dc8ee
--- /dev/null
+++ b/Backend/src/main/resources/templates/upload/options.html
@@ -0,0 +1,27 @@
+
+
+
+
+
📄
+
filename
+
+
+
+
+
+
+
+
+
+
diff --git a/Backend/src/main/resources/templates/upload/result.html b/Backend/src/main/resources/templates/upload/result.html
new file mode 100644
index 0000000..f623ee4
--- /dev/null
+++ b/Backend/src/main/resources/templates/upload/result.html
@@ -0,0 +1,17 @@
+
+
+
+
+
✅
+
Your file is ready to share
+
+
+
+
+
+
+
+