server/plugins/Authentication.kt: - Custom Ktor AuthenticationProvider supporting both X-API-Key header and Authorization: Bearer <key> for API-Key validation - ApiKeyPrincipal data class implementing Principal interface - 401 Unauthorized with ErrorResponse body for missing/invalid keys server/plugins/Routing.kt: - Inventory routes wrapped in authenticate(api-key) block - Health endpoint remains public (no auth required) server/src/main/resources/application.conf: - API key configurable via krisenvorrat.apiKey property - Environment variable override via KRISENVORRAT_API_KEY server/tests: - 7 new AuthenticationTest cases (valid bearer, valid X-API-Key, missing key, invalid bearer, invalid X-API-Key, PUT without key, health without key) - All existing ApplicationTest cases updated with bearer auth header Closes #43
46 lines
1.2 KiB
Text
46 lines
1.2 KiB
Text
plugins {
|
|
alias(libs.plugins.kotlin.jvm)
|
|
alias(libs.plugins.kotlin.serialization)
|
|
alias(libs.plugins.ktor)
|
|
}
|
|
|
|
application {
|
|
mainClass.set("de.krisenvorrat.server.ApplicationKt")
|
|
}
|
|
|
|
ktor {
|
|
fatJar {
|
|
archiveFileName.set("server.jar")
|
|
}
|
|
}
|
|
|
|
java {
|
|
sourceCompatibility = JavaVersion.VERSION_11
|
|
targetCompatibility = JavaVersion.VERSION_11
|
|
}
|
|
|
|
kotlin {
|
|
compilerOptions {
|
|
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11)
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation(project(":shared"))
|
|
|
|
implementation(libs.ktor.server.core)
|
|
implementation(libs.ktor.server.netty)
|
|
implementation(libs.ktor.server.content.negotiation)
|
|
implementation(libs.ktor.server.status.pages)
|
|
implementation(libs.ktor.server.auth)
|
|
implementation(libs.ktor.server.call.logging)
|
|
implementation(libs.ktor.serialization.kotlinx.json)
|
|
implementation(libs.logback.classic)
|
|
implementation(libs.exposed.core)
|
|
implementation(libs.exposed.jdbc)
|
|
implementation(libs.h2.database)
|
|
|
|
testImplementation(libs.ktor.server.test.host)
|
|
testImplementation(libs.junit)
|
|
testImplementation(libs.kotlinx.serialization.json)
|
|
}
|