Ktor RateLimit-Plugin mit abgestuften Limits pro Endpoint-Gruppe: - Auth (/api/auth/*): 10 req/min per IP (Brute-Force-Schutz) - Messages (/api/messages/*): 30 req/min per IP (Spam-Schutz) - Inventory (/api/inventory/*): 60 req/min per IP (DoS-Schutz) - Admin (/api/admin/*): 20 req/min per IP Neue Dateien: - RateLimiting.kt: Plugin-Konfiguration mit 4 benannten Limitern - RateLimitingTest.kt: 5 Tests (Limit-Ueberschreitung, Within-Limit, Health-Endpoint ohne Limit, Retry-After-Header) Geaenderte Dateien: - Routing.kt: rateLimit()-Wrapper um Route-Gruppen - Application.kt: configureRateLimiting() in Plugin-Pipeline - libs.versions.toml + build.gradle.kts: ktor-server-rate-limit Dep Closes #75
59 lines
1.6 KiB
Text
59 lines
1.6 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.auth.jwt)
|
|
implementation(libs.ktor.server.websockets)
|
|
implementation(libs.ktor.server.rate.limit)
|
|
implementation(libs.ktor.server.call.logging)
|
|
implementation(libs.ktor.serialization.kotlinx.json)
|
|
implementation(libs.jbcrypt)
|
|
implementation(libs.logback.classic)
|
|
implementation(libs.exposed.core)
|
|
implementation(libs.exposed.jdbc)
|
|
implementation(libs.postgresql)
|
|
implementation(libs.hikaricp)
|
|
|
|
testImplementation(libs.h2.database)
|
|
testImplementation(libs.ktor.server.test.host)
|
|
testImplementation(libs.ktor.client.websockets)
|
|
testImplementation(libs.junit)
|
|
testImplementation(libs.kotlinx.serialization.json)
|
|
}
|
|
|
|
tasks {
|
|
named("distZip") { dependsOn("shadowJar") }
|
|
named("distTar") { dependsOn("shadowJar") }
|
|
named("startScripts") { dependsOn("shadowJar") }
|
|
}
|