Skip to content

Commit

Permalink
feat(api): auth
Browse files Browse the repository at this point in the history
  • Loading branch information
tristancamejo committed Dec 25, 2022
1 parent d5ed035 commit 32e1b2f
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 0 deletions.
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
plugins {
id 'java'
id 'org.jetbrains.kotlin.jvm' version '1.7.22'
id 'org.jetbrains.kotlin.plugin.serialization' version '1.7.22'
id 'io.ktor.plugin' version '2.2.1'
}

Expand Down Expand Up @@ -32,6 +33,8 @@ dependencies {
implementation("ch.qos.logback:logback-classic:$logback_version")
compileOnly 'io.papermc.paper:paper-api:1.19.2-R0.1-SNAPSHOT'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
implementation 'com.akuleshov7:ktoml-core:0.3.0'
implementation 'com.akuleshov7:ktoml-file:0.3.0'
}

def targetJavaVersion = 17
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/com/tristansmp/elytra/Elytra.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.tristansmp.elytra

import com.tristansmp.elytra.lib.ConfigManager
import com.tristansmp.elytra.plugins.configureHTTP
import com.tristansmp.elytra.plugins.configureRouting
import com.tristansmp.elytra.plugins.configureSerialization
Expand All @@ -10,13 +11,21 @@ import org.bukkit.plugin.java.JavaPlugin

class Elytra : JavaPlugin() {

companion object {
lateinit var instance: Elytra
}

lateinit var config: ConfigManager

override fun onEnable() {
Thread {
embeddedServer(Netty, port = 8080, host = "0.0.0.0", module = Application::module)
.start(wait = true)
}.start()

instance = this

config = ConfigManager()
}

override fun onDisable() {
Expand Down
58 changes: 58 additions & 0 deletions src/main/java/com/tristansmp/elytra/lib/Config.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.tristansmp.elytra.lib

import com.akuleshov7.ktoml.Toml
import com.akuleshov7.ktoml.TomlIndentation
import com.akuleshov7.ktoml.TomlInputConfig
import com.akuleshov7.ktoml.TomlOutputConfig
import com.tristansmp.elytra.Elytra
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import java.io.File
import java.io.IOException

@Serializable
data class Config(
val token: String?,
)

class ConfigManager {
val config: Config
private val outputConfig = TomlOutputConfig(
indentation = TomlIndentation.FOUR_SPACES,
ignoreNullValues = false
)

init {
if (!Elytra.instance.dataFolder.exists()) {
Elytra.instance.dataFolder.mkdirs()
}

val file = File(Elytra.instance.dataFolder, "config.toml")

if (!file.exists()) {
try {
Toml(outputConfig = outputConfig).encodeToString(Config(null)).toByteArray()
.also { file.writeBytes(it) }
} catch (ex: IOException) {
ex.printStackTrace()
}
}

config = Toml(
inputConfig = TomlInputConfig(
ignoreUnknownNames = false,
allowEmptyValues = true,
allowNullValues = true,
allowEscapedQuotesInLiteralStrings = true,
allowEmptyToml = true,
),
outputConfig = outputConfig
).decodeFromString(
file.readText()
)

Elytra.instance.logger.info("Loaded config")
Elytra.instance.logger.info("Authentication is ${if (config.token == null) "disabled" else "enabled"}")
}
}
11 changes: 11 additions & 0 deletions src/main/java/com/tristansmp/elytra/plugins/Routing.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.tristansmp.elytra.plugins

import com.tristansmp.elytra.Elytra
import com.tristansmp.elytra.routes.Health
import com.tristansmp.elytra.routes.Player
import io.ktor.http.*
import io.ktor.server.application.*
import io.ktor.server.application.ApplicationCallPipeline.ApplicationPhase.Plugins
import io.ktor.server.plugins.statuspages.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
Expand All @@ -16,6 +18,15 @@ fun Application.configureRouting() {
}

routing {
intercept(Plugins) {
if (Elytra.instance.config.config.token != null && Elytra.instance.config.config.token != call.request.headers["Authorization"]) {
call.respond(HttpStatusCode.Unauthorized)
return@intercept finish()
}

return@intercept proceed()
}

get("/") {
call.respondRedirect("https://github.com/tristansmp/elytra")
}
Expand Down

0 comments on commit 32e1b2f

Please sign in to comment.