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
import io.ktor.server.config.ApplicationConfig
import io.ktor.server.application.*
import io.ktor.server.config.*
import kotlinx.serialization.Serializable
data class DatabaseConfig(
val host: String,
val username: String,
val password: String,
data class Config(
val database: Database,
val security: Security,
) {
val url: String
get() = "jdbc:postgresql://${host}/account"
@Serializable
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 cookie: CookieConfig,
)
data class CookieConfig(
val domain: String,
val path: String,
val secure: Boolean,
)
val ApplicationConfig.database: DatabaseConfig
val Application.configuration: Config
get() {
val host = property("database.host").getString()
val username = property("database.username").getString()
val password = property("database.password").getString()
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)
return Config(
database = property("database"),
security = property("security"),
)
}

View File

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

View File

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