refactor config
This commit is contained in:
@@ -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(
|
||||
data class Config(
|
||||
val database: Database,
|
||||
val security: Security,
|
||||
) {
|
||||
@Serializable
|
||||
data class Database(
|
||||
val host: String,
|
||||
val username: String,
|
||||
val password: String,
|
||||
) {
|
||||
) {
|
||||
val url: String
|
||||
get() = "jdbc:postgresql://${host}/account"
|
||||
}
|
||||
|
||||
data class SecurityConfig(
|
||||
val cookie: CookieConfig,
|
||||
)
|
||||
operator fun component4() = url
|
||||
}
|
||||
|
||||
data class CookieConfig(
|
||||
@Serializable
|
||||
data class Security(
|
||||
val cookie: Cookie,
|
||||
) {
|
||||
@Serializable
|
||||
data class Cookie(
|
||||
val domain: String,
|
||||
val path: String,
|
||||
val secure: Boolean,
|
||||
)
|
||||
|
||||
val ApplicationConfig.database: DatabaseConfig
|
||||
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
|
||||
val Application.configuration: Config
|
||||
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"),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user