diff --git a/Dockerfile b/Dockerfile
index 8a987b1..807e041 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,6 @@
FROM openjdk:14-alpine as jdkbuilder
RUN apk add --no-cache binutils
-ENV MODULES java.base,java.desktop,java.instrument,java.logging,java.management,java.naming,java.security.jgss,java.sql,java.xml
+ENV MODULES java.base,java.xml,jdk.httpserver
RUN jlink --output /myjdk --module-path $JAVA_HOME/jmods --add-modules $MODULES --no-header-files --no-man-pages --strip-debug --compress=2
RUN strip -p --strip-unneeded /myjdk/lib/server/libjvm.so
@@ -22,4 +22,4 @@ COPY --from=jdkbuilder /myjdk /myjdk
COPY config.toml /app/config.toml
WORKDIR /app
EXPOSE 7000
-CMD ["/myjdk/bin/java", "-server", "-jar", "app.jar"]
+CMD ["/myjdk/bin/java", "-server", "-Xmx64m", "-XX:+UseG1GC", "-XX:+UseStringDeduplication", "-jar", "app.jar"]
diff --git a/pom.xml b/pom.xml
index 9a813da..6c404a2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,11 +26,6 @@
pebble
3.1.4
-
- ch.qos.logback
- logback-classic
- 1.2.3
-
com.electronwill.night-config
toml
@@ -42,9 +37,9 @@
${kotlin.version}
- io.javalin
- javalin
- 3.10.1
+ org.http4k
+ http4k-core
+ 3.260.0
org.apache.commons
@@ -74,13 +69,35 @@
shade
- false
+ true
starter.KotlinStarterKt
+
+
+ com.electronwill.night-config:*
+
+ **
+
+
+
+ *:*
+
+ META-INF/maven/**
+ META-INF/proguard/**
+ META-INF/*.kotlin_module
+ META-INF/DEPENDENCIES*
+ META-INF/NOTICE*
+ META-INF/LICENSE*
+ LICENSE*
+ META-INF/README*
+ META-INF/native-image/**
+
+
+
@@ -117,4 +134,4 @@
-
\ No newline at end of file
+
diff --git a/src/main/kotlin/starter/Server.kt b/src/main/kotlin/starter/Server.kt
index f928bb7..cb21919 100644
--- a/src/main/kotlin/starter/Server.kt
+++ b/src/main/kotlin/starter/Server.kt
@@ -1,6 +1,17 @@
package starter
-import io.javalin.Javalin
+import org.http4k.core.HttpHandler
+import org.http4k.core.Method
+import org.http4k.core.Response
+import org.http4k.core.Status
+import org.http4k.core.body.form
+import org.http4k.core.body.formAsMap
+import org.http4k.routing.ResourceLoader
+import org.http4k.routing.bind
+import org.http4k.routing.routes
+import org.http4k.routing.static
+import org.http4k.server.SunHttp
+import org.http4k.server.asServer
import starter.utils.sanitizeFilename
import java.io.ByteArrayInputStream
@@ -9,23 +20,18 @@ class Server(
private val conf: StarterConfig,
private val projectZip: ProjectZip,
) {
+
fun run() {
- val app = Javalin.create {
- it.addStaticFiles("/assets")
- }.start(7000)
-
- app.get("/") { ctx ->
- ctx.result(views.index(conf.dependencies, conf.inputs))
- ctx.contentType("text/html")
+ val indexHandler: HttpHandler = {
+ Response(Status.OK).body(views.index(conf.dependencies, conf.inputs)).header("Content-Type", "text/html")
}
-
- app.post("/") { ctx ->
+ val zipHandler: HttpHandler = { req ->
val deps = conf.dependencies.filter {
- ctx.formParam(it.name) != null
+ req.form(it.name) != null
}
val inputKeys = conf.inputs.map { it.name }
- val inputs = ctx.formParamMap()
+ val inputs = req.formAsMap()
.filter { it.key in inputKeys }
.map { (name, value) ->
conf.inputs.find { it.name == name }!!.copy(value = value.first())
@@ -35,21 +41,28 @@ class Server(
val basePackage = inputs.find { it.name == "basePackage" }!!.value!!
if (basePackage.contains("/") || basePackage.contains("..")) {
- ctx.status(400)
- ctx.result("Invalid Base Package")
- return@post
+ Response(Status.BAD_REQUEST).body("Invalid Base Package")
+ } else {
+ val repositories = conf.repositories
+ .filter { repo -> repo.name in deps.mapNotNull { it.repository } }
+
+ val project = Project(projectName, basePackage, inputs, deps, repositories)
+ val outputStream = projectZip.createZip(project)
+
+ Response(Status.OK).header("Content-Type", "application/zip")
+ .header("Content-Disposition", "attachment; filename=\"${sanitizeFilename(projectName)}.zip\"")
+ .body(ByteArrayInputStream(outputStream.toByteArray()))
}
-
- val repositories = conf.repositories
- .filter { repo -> repo.name in deps.mapNotNull { it.repository } }
-
- val project = Project(projectName, basePackage, inputs, deps, repositories)
-
- ctx.contentType("application/zip")
- ctx.header("Content-Disposition", "attachment; filename=\"${sanitizeFilename(projectName)}.zip\"")
-
- val outputStream = projectZip.createZip(project)
- ctx.result(ByteArrayInputStream(outputStream.toByteArray()))
}
+
+ val app = routes(
+ "/" bind Method.GET to indexHandler,
+ "/" bind Method.POST to zipHandler,
+ static(ResourceLoader.Classpath("/assets"))
+ )
+
+ app.asServer(SunHttp(7000)).start()
+ println("Started on http://localhost:7000")
}
+
}
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
deleted file mode 100644
index b35c238..0000000
--- a/src/main/resources/logback.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
- true
-
- %cyan(%d{YYYY-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{36}) - %msg%n
-
-
-
-
-
-
-
-
-