refactor config

This commit is contained in:
2025-08-20 11:04:49 +02:00
parent b868e5c675
commit 0237f34dd2
3 changed files with 45 additions and 48 deletions

View File

@@ -1,45 +1,42 @@
package com.infendro.account.config package com.infendro.account.config
import io.ktor.server.config.ApplicationConfig import io.ktor.server.application.*
import io.ktor.server.config.*
import kotlinx.serialization.Serializable
data class DatabaseConfig( data class Config(
val host: String, val database: Database,
val username: String, val security: Security,
val password: String,
) { ) {
val url: String @Serializable
get() = "jdbc:postgresql://${host}/account" data class Database(
val host: String,
val username: String,
val password: String,
) {
val url: String
get() = "jdbc:postgresql://${host}/account"
operator fun component4() = url
}
@Serializable
data class Security(
val cookie: Cookie,
) {
@Serializable
data class Cookie(
val domain: String,
val path: String,
val secure: Boolean,
)
}
} }
data class SecurityConfig( val Application.configuration: Config
val cookie: CookieConfig,
)
data class CookieConfig(
val domain: String,
val path: String,
val secure: Boolean,
)
val ApplicationConfig.database: DatabaseConfig
get() { get() {
val host = property("database.host").getString() return Config(
val username = property("database.username").getString() database = property("database"),
val password = property("database.password").getString() security = property("security"),
)
return DatabaseConfig(host, username, password)
}
val ApplicationConfig.security: SecurityConfig
get() {
return SecurityConfig(cookie)
}
private val ApplicationConfig.cookie: CookieConfig
get() {
val domain = property("security.cookie.domain").getString()
val path = property("security.cookie.path").getString()
val secure = property("security.cookie.secure").getString().toBooleanStrict()
return CookieConfig(domain, path, secure)
} }

View File

@@ -8,12 +8,12 @@ import io.ktor.server.application.*
import org.jetbrains.exposed.sql.Database import org.jetbrains.exposed.sql.Database
fun Application.configureDatabase() { fun Application.configureDatabase() {
val config = environment.config.database val config = configuration
Database.connect( Database.connect(
url = config.url, url = config.database.url,
user = config.username, user = config.database.username,
password = config.password, password = config.database.password,
) )
install(Migration) { install(Migration) {

View File

@@ -28,16 +28,16 @@ data class AuthenticationPrincipal(
} }
fun Application.configureSecurity() { fun Application.configureSecurity() {
val config = environment.config.security val config = configuration
install(Sessions) { install(Sessions) {
cookie<AuthenticationSession>("Authentication") { cookie<AuthenticationSession>("Authentication") {
cookie.domain = config.cookie.domain this.cookie.domain = config.security.cookie.domain
cookie.path = config.cookie.path this.cookie.path = config.security.cookie.path
cookie.httpOnly = true this.cookie.httpOnly = true
cookie.secure = config.cookie.secure this.cookie.secure = config.security.cookie.secure
cookie.extensions["SameSite"] = "Strict" this.cookie.extensions["SameSite"] = "Strict"
cookie.maxAge = 7.days this.cookie.maxAge = 7.days
} }
} }
install(Authentication) { install(Authentication) {