could store credentials to db
parent
636b3c7034
commit
629728f865
|
|
@ -7,6 +7,7 @@ kotlin-logging = "6.0.4"
|
|||
kotlinx = "1.7.3"
|
||||
kotlin = "1.9.22"
|
||||
hoplite = "2.7.5"
|
||||
exposed = "0.49.0"
|
||||
|
||||
[libraries]
|
||||
koin-core = {module = "io.insert-koin:koin-core", version.ref = "koin" }
|
||||
|
|
@ -31,11 +32,31 @@ gradle-kotlin-jvm = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", vers
|
|||
hoplite-core = { module = "com.sksamuel.hoplite:hoplite-core", version.ref = "hoplite" }
|
||||
hoplite-toml = { module = "com.sksamuel.hoplite:hoplite-toml", version.ref = "hoplite" }
|
||||
|
||||
exposed-core = { module = "org.jetbrains.exposed:exposed-core", version.ref = "exposed" }
|
||||
exposed-crypt = { module = "org.jetbrains.exposed:exposed-crypt", version.ref = "exposed" }
|
||||
exposed-dao = { module = "org.jetbrains.exposed:exposed-dao", version.ref = "exposed" }
|
||||
exposed-jdbc = { module = "org.jetbrains.exposed:exposed-jdbc", version.ref = "exposed" }
|
||||
exposed-json = { module = "org.jetbrains.exposed:exposed-json", version.ref = "exposed" }
|
||||
exposed-kotlin-datetime = { module = "org.jetbrains.exposed:exposed-kotlin-datetime", version.ref = "exposed" }
|
||||
exposed-money = { module = " org.jetbrains.exposed:exposed-money", version.ref = "exposed" }
|
||||
exposed-java-time = { module = "org.jetbrains.exposed:exposed-java-time", version.ref = "exposed" }
|
||||
exposed-jodatime = { module = "org.jetbrains.exposed:exposed-jodatime", version.ref = "exposed" }
|
||||
|
||||
|
||||
[plugins]
|
||||
jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
||||
kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin"}
|
||||
|
||||
[bundles]
|
||||
exposed = [
|
||||
"exposed-core",
|
||||
"exposed-crypt",
|
||||
"exposed-dao",
|
||||
"exposed-jdbc",
|
||||
"exposed-money",
|
||||
"exposed-json",
|
||||
"exposed-kotlin-datetime",
|
||||
]
|
||||
hoplite = [
|
||||
"hoplite-core",
|
||||
"hoplite-toml",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package de.itkl.modConfiguration.loaders
|
||||
|
||||
import assertk.assertThat
|
||||
import assertk.assertions.hasSize
|
||||
import de.itkl.moduleCore.support.requiredResourcePath
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
|
|
@ -8,6 +10,7 @@ class AccountLoaderTests {
|
|||
fun testAccountLoad() {
|
||||
val accountsToml = requiredResourcePath("testAccounts.toml")
|
||||
val accounts = loadAccounts(accountsToml)
|
||||
println(accounts)
|
||||
assertThat(accounts)
|
||||
.hasSize(2)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
dependencies {
|
||||
implementation(project(":modules:ModuleCore"))
|
||||
implementation("org.postgresql:postgresql:42.7.3")
|
||||
implementation(libs.bundles.exposed)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package de.itkl.module
|
||||
package de.itkl.modCredentialManager
|
||||
|
||||
import de.itkl.moduleCore.types.Expirable
|
||||
import de.itkl.moduleCore.types.MaybeExpirable
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
package de.itkl.modCredentialManager
|
||||
|
||||
interface CredentialManager {
|
||||
fun find(id: String): Credential?
|
||||
|
||||
fun add(credential: Credential)
|
||||
|
||||
fun delete(id: String)
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.itkl.module
|
||||
package de.itkl.modCredentialManager
|
||||
|
||||
import org.koin.dsl.module
|
||||
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
package de.itkl.modCredentialManager.postgresBackend
|
||||
|
||||
import de.itkl.modCredentialManager.Credential
|
||||
import de.itkl.modCredentialManager.CredentialManager
|
||||
import io.github.oshai.kotlinlogging.KotlinLogging
|
||||
import kotlinx.datetime.Clock
|
||||
import kotlinx.datetime.Instant
|
||||
import org.jetbrains.exposed.dao.UUIDEntity
|
||||
import org.jetbrains.exposed.dao.UUIDEntityClass
|
||||
import org.jetbrains.exposed.dao.id.EntityID
|
||||
import org.jetbrains.exposed.dao.id.UUIDTable
|
||||
import org.jetbrains.exposed.sql.*
|
||||
import org.jetbrains.exposed.sql.kotlin.datetime.timestamp
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import java.util.UUID
|
||||
import kotlin.time.Duration.Companion.hours
|
||||
|
||||
private val Log = KotlinLogging.logger { }
|
||||
|
||||
class PostgresBackend : CredentialManager {
|
||||
val dbConnection = Database.connect(
|
||||
"jdbc:postgresql://localhost:5432/postgres",
|
||||
driver = "org.postgresql.Driver",
|
||||
user = "kinch",
|
||||
)
|
||||
|
||||
init {
|
||||
transaction {
|
||||
addLogger(StdOutSqlLogger)
|
||||
SchemaUtils.create(Credentials)
|
||||
}
|
||||
}
|
||||
|
||||
override fun find(id: String): Credential? {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun add(credential: Credential) {
|
||||
transaction {
|
||||
DbCredential.new {
|
||||
displayName = credential.id
|
||||
secret = "timo"
|
||||
expiresAt = Clock.System.now() + 1.hours
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun delete(id: String) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
|
||||
object Credentials : UUIDTable() {
|
||||
val displayName: Column<String> = varchar("displayName", 255)
|
||||
val username: Column<String?> = varchar("username", 255).nullable()
|
||||
val notes: Column<String?> = text("notes").nullable()
|
||||
val secret: Column<String> = text("secret")
|
||||
val expiresAt: Column<Instant?> = timestamp("expiresAt").nullable()
|
||||
}
|
||||
|
||||
class DbCredential(id: EntityID<UUID>) : UUIDEntity(id) {
|
||||
companion object : UUIDEntityClass<DbCredential>(Credentials)
|
||||
|
||||
var displayName by Credentials.displayName
|
||||
var username by Credentials.username
|
||||
var notes by Credentials.notes
|
||||
var secret by Credentials.secret
|
||||
var expiresAt by Credentials.expiresAt
|
||||
}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
package de.itkl.module
|
||||
|
||||
interface CredentialManager {
|
||||
fun find(id: String): Credential?
|
||||
|
||||
fun add(credential: Credential) {}
|
||||
|
||||
fun delete(id: String) {}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package de.itkl.modCredentialManager.postgresBackend
|
||||
|
||||
import de.itkl.modCredentialManager.UsernameAndPassword
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class PostgresBackendTest {
|
||||
@Test
|
||||
fun `can create a table`() {
|
||||
PostgresBackend().add(UsernameAndPassword("username", "password", username = "", password = ""))
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue