diff --git a/backend/src/main/kotlin/com/infendro/account/config/Config.kt b/backend/src/main/kotlin/com/infendro/account/config/Config.kt index d8e3487..2ade724 100644 --- a/backend/src/main/kotlin/com/infendro/account/config/Config.kt +++ b/backend/src/main/kotlin/com/infendro/account/config/Config.kt @@ -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"), + ) } diff --git a/backend/src/main/kotlin/com/infendro/account/config/Database.kt b/backend/src/main/kotlin/com/infendro/account/config/Database.kt index 056c8e5..b11a29f 100644 --- a/backend/src/main/kotlin/com/infendro/account/config/Database.kt +++ b/backend/src/main/kotlin/com/infendro/account/config/Database.kt @@ -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) { diff --git a/backend/src/main/kotlin/com/infendro/account/config/Security.kt b/backend/src/main/kotlin/com/infendro/account/config/Security.kt index 33d9eee..15a226e 100644 --- a/backend/src/main/kotlin/com/infendro/account/config/Security.kt +++ b/backend/src/main/kotlin/com/infendro/account/config/Security.kt @@ -28,16 +28,16 @@ data class AuthenticationPrincipal( } fun Application.configureSecurity() { - val config = environment.config.security + val config = configuration install(Sessions) { cookie("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) {