Refactor DatabaseHandler
to use an Entity for some code instead of manual operations
This commit is contained in:
parent
3c999daebc
commit
3fc97ff6ea
|
@ -8,6 +8,9 @@ package org.muellerssoftware.openproximitychat.tracker
|
|||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.UseSerializers
|
||||
import org.h2.security.SHA3
|
||||
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.SqlExpressionBuilder.eq
|
||||
|
@ -29,6 +32,46 @@ class Client(
|
|||
var sampledClients: List<UUID>
|
||||
)
|
||||
|
||||
class ClientEntity(id: EntityID<UUID>): UUIDEntity(id) {
|
||||
companion object : UUIDEntityClass<ClientEntity>(Clients)
|
||||
|
||||
var uuid by Clients.id
|
||||
var name by Clients.name
|
||||
var timeout by Clients.timeout
|
||||
var ip by Clients.ip
|
||||
var port by Clients.port
|
||||
var passwordHash by Clients.passwordHash
|
||||
var sampledClient1 by Clients.sampledClient1
|
||||
var sampledClient2 by Clients.sampledClient2
|
||||
var sampledClient3 by Clients.sampledClient3
|
||||
var sampledClient4 by Clients.sampledClient4
|
||||
var sampledClient5 by Clients.sampledClient5
|
||||
var sampledClient6 by Clients.sampledClient6
|
||||
var sampledClient7 by Clients.sampledClient7
|
||||
var sampledClient8 by Clients.sampledClient8
|
||||
|
||||
fun toClient(): Client {
|
||||
return Client(
|
||||
uuid.value,
|
||||
name,
|
||||
timeout,
|
||||
ip,
|
||||
port,
|
||||
passwordHash,
|
||||
listOfNotNull(
|
||||
sampledClient1,
|
||||
sampledClient2,
|
||||
sampledClient3,
|
||||
sampledClient4,
|
||||
sampledClient5,
|
||||
sampledClient6,
|
||||
sampledClient7,
|
||||
sampledClient8
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
object Clients: UUIDTable() {
|
||||
var name = varchar("name", 16)
|
||||
var ip = varchar("ip", 21)
|
||||
|
@ -95,9 +138,9 @@ object DatabaseHandler {
|
|||
return pw
|
||||
}
|
||||
|
||||
private fun checkTimeout(client: Client): Client? {
|
||||
private fun checkTimeout(client: ClientEntity): ClientEntity? {
|
||||
if (client.timeout < Instant.now()) {
|
||||
removeClient(client.uuid)
|
||||
client.delete()
|
||||
return null
|
||||
}
|
||||
|
||||
|
@ -105,29 +148,15 @@ object DatabaseHandler {
|
|||
}
|
||||
|
||||
fun getClient(name: String): Client? {
|
||||
val client = transaction {
|
||||
Clients.select { Clients.name eq name }.map {
|
||||
Client(it[Clients.id].value, it[Clients.name], it[Clients.timeout], it[Clients.ip], it[Clients.port], it[Clients.passwordHash], listOf(
|
||||
it[Clients.sampledClient1],it[Clients.sampledClient2],it[Clients.sampledClient3],it[Clients.sampledClient4],
|
||||
it[Clients.sampledClient5],it[Clients.sampledClient6],it[Clients.sampledClient7],it[Clients.sampledClient8]
|
||||
))
|
||||
}.firstOrNull()
|
||||
} ?: return null
|
||||
|
||||
return checkTimeout(client)
|
||||
return transaction {
|
||||
ClientEntity.find { Clients.name eq name }.firstOrNull()
|
||||
}?.let { checkTimeout(it) }?.toClient()
|
||||
}
|
||||
|
||||
fun getClient(id: UUID): Client? {
|
||||
val client = transaction {
|
||||
Clients.select { Clients.id eq id }.map {
|
||||
Client(it[Clients.id].value, it[Clients.name], it[Clients.timeout], it[Clients.ip], it[Clients.port], it[Clients.passwordHash], listOf(
|
||||
it[Clients.sampledClient1],it[Clients.sampledClient2],it[Clients.sampledClient3],it[Clients.sampledClient4],
|
||||
it[Clients.sampledClient5],it[Clients.sampledClient6],it[Clients.sampledClient7],it[Clients.sampledClient8]
|
||||
))
|
||||
}.firstOrNull()
|
||||
} ?: return null
|
||||
|
||||
return checkTimeout(client)
|
||||
return transaction {
|
||||
ClientEntity.find { Clients.id eq id }.firstOrNull()
|
||||
}?.let { checkTimeout(it) }?.toClient()
|
||||
}
|
||||
|
||||
fun doHeartbeat(id: UUID): String {
|
||||
|
@ -151,9 +180,11 @@ object DatabaseHandler {
|
|||
}
|
||||
|
||||
fun checkCredentials(id: UUID, passwordHash: String): Boolean {
|
||||
val client = getClient(id) ?: return false
|
||||
val client = transaction {
|
||||
ClientEntity.find { Clients.id eq id }.firstOrNull()
|
||||
}?.let { checkTimeout(it) }
|
||||
|
||||
return if (checkTimeout(client) != null) {
|
||||
return if (client != null) {
|
||||
client.passwordHash == passwordHash
|
||||
} else {
|
||||
false
|
||||
|
|
Loading…
Reference in New Issue
Block a user