Skip to content

Commit

Permalink
feat: config
Browse files Browse the repository at this point in the history
  • Loading branch information
powercasgamer committed Nov 11, 2023
1 parent 61b8ffb commit a73cd4f
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 21 deletions.
3 changes: 3 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
plugins {
id("org.jetbrains.kotlin.jvm") version "1.9.20"
`java-library`
id("com.github.johnrengelman.shadow") version "8.1.1"
id("net.kyori.indra") version "3.1.3"
application
Expand All @@ -20,6 +21,7 @@ dependencies {
implementation("io.javalin:javalin:6.0.0-beta.2")
implementation("com.github.ben-manes.caffeine:caffeine:3.1.8")
implementation("org.spongepowered:configurate-gson:4.2.0-SNAPSHOT")
implementation("org.spongepowered:configurate-hocon:4.2.0-SNAPSHOT")
implementation("org.spongepowered:configurate-extra-kotlin:4.2.0-SNAPSHOT")
}

Expand All @@ -28,6 +30,7 @@ indra {
target(17)
minimumToolchain(17)
}
mitLicense()
}

application {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package dev.mizule.imagery.app.config;

import org.spongepowered.configurate.objectmapping.ConfigSerializable;

@ConfigSerializable
public class JavaConfigNotUsed {


}
71 changes: 50 additions & 21 deletions app/src/main/kotlin/dev/mizule/imagery/app/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,18 @@ package dev.mizule.imagery.app
import com.github.benmanes.caffeine.cache.Caffeine
import com.google.gson.Gson
import com.google.gson.JsonObject
import dev.mizule.imagery.app.config.Config
import dev.mizule.imagery.app.model.UploadedFile
import io.javalin.Javalin
import io.javalin.http.ContentType
import io.javalin.http.HttpStatus
import io.javalin.json.JavalinGson
import org.eclipse.jetty.http.MimeTypes
import org.spongepowered.configurate.BasicConfigurationNode
import org.spongepowered.configurate.CommentedConfigurationNode
import org.spongepowered.configurate.ConfigurateException
import org.spongepowered.configurate.gson.GsonConfigurationLoader
import org.spongepowered.configurate.hocon.HoconConfigurationLoader
import java.io.FileOutputStream
import java.nio.file.Files
import java.nio.file.Path
Expand All @@ -21,14 +24,14 @@ import kotlin.io.path.exists

class App {
private val gson = Gson()
private lateinit var config: BasicConfigurationNode
private lateinit var loader: GsonConfigurationLoader
private lateinit var config: Config
private lateinit var configNode: CommentedConfigurationNode
private lateinit var configLoader: HoconConfigurationLoader
private lateinit var dataConfig: BasicConfigurationNode
private lateinit var dataLoader: GsonConfigurationLoader
private val javalin: Javalin by lazy {
Javalin.create {
it.jsonMapper(JavalinGson(gson))
it.contextResolver.ip = { ctx ->
ctx.header("CF-Connecting-IP")?: ctx.req().remoteAddr
}
it.router.ignoreTrailingSlashes = true
}
}
Expand All @@ -41,16 +44,10 @@ class App {

fun load() {
initializeStorage()
initializeConfigs()

this.loader = GsonConfigurationLoader.builder()
.path(path.resolve("files.json"))
.build()

try {
this.config = loader.load()
loader.save(this.config)
} catch (e: ConfigurateException) {
throw RuntimeException(e)
javalin.unsafeConfig().contextResolver.ip = { ctx ->
ctx.header("CF-Connecting-IP") ?: ctx.req().remoteAddr
}

configureEndpoints()
Expand All @@ -60,11 +57,43 @@ class App {
if (!storage.exists()) {
Files.createDirectories(storage)
}

// cache?
}

private fun initializeConfigs() {
this.dataLoader = GsonConfigurationLoader.builder()
.path(path.resolve("files.json"))
.build()
this.configLoader = HoconConfigurationLoader.builder()
.path(path.resolve("config.conf"))
.defaultOptions {
it.shouldCopyDefaults(true)
}
.build()

try {
this.dataConfig = dataLoader.load()
this.configNode = configLoader.load()
dataLoader.save(this.dataConfig)
configLoader.save(this.configNode)
this.config = configNode.get(Config::class.java) ?: return
} catch (e: ConfigurateException) {
throw RuntimeException(e)
}
}

private fun configureEndpoints() {
javalin.beforeMatched { ctx ->
println(String.format("Received %s request from: %s:%s for %s", ctx.method(), ctx.ip(), ctx.port(), ctx.fullUrl()));
println(
String.format(
"Received %s request from: %s:%s for %s",
ctx.method(),
ctx.ip(),
ctx.port(),
ctx.fullUrl()
)
)
}
javalin.post("/upload") { ctx ->
handleFileUpload(ctx)
Expand All @@ -77,7 +106,7 @@ class App {

private fun handleFileUpload(ctx: io.javalin.http.Context) {
ctx.uploadedFiles("file").first().also { file ->
val fileName = getRandomString(8) + file.extension()
val fileName = getRandomString() + file.extension()
val filePath = storage.resolve(fileName)
Files.createFile(filePath)
FileOutputStream(filePath.toFile()).use {
Expand All @@ -91,9 +120,9 @@ class App {
file.extension(),
MimeTypes.getDefaultMimeByExtension(file.extension())
)
config.node(uploadedFile.id).set(uploadedFile)
dataConfig.node(uploadedFile.id).set(uploadedFile)
try {
loader.save(this.config)
dataLoader.save(this.dataConfig)
} catch (e: ConfigurateException) {
throw RuntimeException(e)
}
Expand All @@ -120,14 +149,14 @@ class App {
}

fun enable() {
javalin.start(5462)
javalin.start(this.config.port)
}

fun disable() {
// Add any necessary cleanup logic here
println("Shutting down...")
}

private fun getRandomString(length: Int): String {
private fun getRandomString(length: Int = 8): String {
val allowedChars = ('A'..'Z') + ('a'..'z') + ('0'..'9')
return (1..length)
.map { allowedChars.random() }
Expand Down
13 changes: 13 additions & 0 deletions app/src/main/kotlin/dev/mizule/imagery/app/config/Config.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package dev.mizule.imagery.app.config

import org.spongepowered.configurate.objectmapping.ConfigSerializable
import org.spongepowered.configurate.objectmapping.meta.Comment

@ConfigSerializable
data class Config(
@Comment("The port to start the application on")
val port: Int = 8052,

@Comment("The domain that this will be on")
val domain: String = "https://example.com"
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,8 @@ fun main() {

app.load()
app.enable()

Runtime.getRuntime().addShutdownHook(Thread {
app.disable()
})
}

0 comments on commit a73cd4f

Please sign in to comment.