Skip to content
This repository was archived by the owner on Jan 9, 2024. It is now read-only.

Commit 5f13402

Browse files
committed
fix: use db internal ids for credentials reference
1 parent a1e314d commit 5f13402

File tree

7 files changed

+42
-34
lines changed

7 files changed

+42
-34
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package id.walt.service
22

3+
import kotlinx.serialization.Serializable
34
import kotlinx.serialization.json.JsonObject
45

6+
@Serializable
57
data class Credential(
8+
val id: String,
69
val parsedCredential: JsonObject,
710
val rawCredential: String
811
)

src/main/kotlin/id/walt/service/SSIKit2WalletService.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ class SSIKit2WalletService(accountId: UUID) : WalletService(accountId) {
9191
Base64.UrlSafe.decode(cred.split(".")[1]).decodeToString()
9292
).jsonObject["vc"]!!.jsonObject
9393
else throw IllegalArgumentException("Unknown credential format")
94-
Credential(parsedCred, cred)
94+
Credential(it.id.toString(), parsedCred, cred)
9595
}.onFailure { it.printStackTrace() }.getOrNull()?.let { cred ->
96-
Credential(JsonObject(cred.parsedCredential.toMutableMap().also {
96+
Credential(it.id.toString(), JsonObject(cred.parsedCredential.toMutableMap().also {
9797
it.putIfAbsent("id", JsonPrimitive(credentialId))
9898
}), cred.rawCredential)
9999
}

src/main/kotlin/id/walt/service/WalletKitWalletService.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class WalletKitWalletService(accountId: UUID) : WalletService(accountId) {
128128
/* Credentials */
129129

130130
override suspend fun listCredentials() = authenticatedJsonGet("/api/wallet/credentials/list")
131-
.body<JsonObject>()["list"]!!.jsonArray.toList().map { Credential(it.jsonObject, it.toString()) }
131+
.body<JsonObject>()["list"]!!.jsonArray.toList().map { Credential("null", it.jsonObject, it.toString()) }
132132

133133
override suspend fun listRawCredentials(): List<String> {
134134
TODO("Not yet implemented")

src/main/kotlin/id/walt/service/credentials/CredentialsService.kt

+23-19
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,15 @@ import id.walt.db.repositories.AccountCredentialsRepository
77
import id.walt.db.repositories.CredentialsRepository
88
import id.walt.db.repositories.DbAccountCredentials
99
import id.walt.db.repositories.DbCredential
10-
import id.walt.service.dids.DidUpdateDataObject
1110
import org.jetbrains.exposed.sql.innerJoin
1211
import org.jetbrains.exposed.sql.select
1312
import org.jetbrains.exposed.sql.selectAll
14-
import java.net.URLEncoder
1513
import java.util.*
1614

1715
//TODO: replace DbCredential with a dto
1816
object CredentialsService {
19-
fun get(account: UUID, credentialId: String): DbCredential? =
20-
list(account).singleOrNull { it.credentialId == credentialId }
17+
fun get(account: UUID, id: String): DbCredential? =
18+
list(account).singleOrNull { it.id == UUID.fromString(id) }
2119

2220
fun list(account: UUID): List<DbCredential> = join(account).let {
2321
AccountCredentialsRepository.query(it) {
@@ -29,43 +27,49 @@ object CredentialsService {
2927
}
3028
}
3129

32-
fun add(account: UUID, credential: DbCredential): UUID =
33-
getOrInsert(credential.credentialId, credential.document).let { cid ->
34-
join(account, credential.credentialId).let {
35-
AccountCredentialsRepository.query(it) {
36-
it[AccountCredentials.id]
37-
}
38-
}.takeIf { it.isNotEmpty() }?.single()?.value ?: let {
39-
AccountCredentialsRepository.insert(DbAccountCredentials(
30+
fun add(account: UUID, credential: DbCredential): UUID = CredentialsRepository.insert(
31+
DbCredential(
32+
credentialId = credential.credentialId,
33+
document = credential.document,
34+
)
35+
).let { cid ->
36+
join(account, cid).let {
37+
AccountCredentialsRepository.query(it) {
38+
it[AccountCredentials.id]
39+
}
40+
}.takeIf { it.isNotEmpty() }?.single()?.value ?: let {
41+
AccountCredentialsRepository.insert(
42+
DbAccountCredentials(
4043
account = account,
4144
credential = cid,
42-
))
43-
}
45+
)
46+
)
4447
}
48+
}
4549

46-
fun delete(account: UUID, credentialId: String): Boolean = join(account, credentialId).let {
50+
fun delete(account: UUID, id: String): Boolean = join(account, UUID.fromString(id)).let {
4751
AccountCredentialsRepository.query(it) {
4852
it[AccountCredentials.id]
4953
}.singleOrNull()?.value
5054
}?.let {
5155
AccountCredentialsRepository.delete(it)
5256
}?.let { it > 0 } ?: false
5357

54-
fun update(account: UUID, did: DidUpdateDataObject): Boolean {
58+
fun update(account: UUID, credential: DbCredential): Boolean {
5559
TODO()
5660
}
5761

58-
private fun join(account: UUID, credentialId: String? = null) = Accounts.innerJoin(AccountCredentials,
62+
private fun join(account: UUID, id: UUID? = null) = Accounts.innerJoin(AccountCredentials,
5963
onColumn = { Accounts.id },
6064
otherColumn = { AccountCredentials.account },
6165
additionalConstraint = {
6266
Accounts.id eq account
6367
}).innerJoin(Credentials,
6468
onColumn = { Credentials.id },
6569
otherColumn = { AccountCredentials.credential },
66-
additionalConstraint = credentialId?.let {
70+
additionalConstraint = id?.let {
6771
{
68-
Credentials.credentialId eq credentialId
72+
Credentials.id eq id
6973
}
7074
}).selectAll()
7175

src/main/kotlin/id/walt/web/controllers/CredentialController.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ fun Application.credentials() = walletRoute {
2323
}
2424
}
2525
}) {
26-
context.respond(getWalletService().listCredentials().map { it.parsedCredential })
26+
// context.respond(getWalletService().listCredentials().map { it.parsedCredential })
27+
context.respond(getWalletService().listCredentials().map { it })
2728
}
2829

2930
put({

web/src/pages/credentials/[credentialId].vue web/src/pages/credentials/[id].vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ import {ref} from "vue";
332332
import {decodeBase64ToUtf8} from "~/composables/base64";
333333
334334
const route = useRoute();
335-
const credentialId = route.params.credentialId;
335+
const credentialId = route.params.id;
336336
337337
let showCredentialJson = ref(false);
338338

web/src/pages/index.vue

+10-10
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@
3737
<div class="bg-white p-6 rounded-2xl shadow-2xl h-full">
3838
<div class="flex justify-end">
3939
<div
40-
:class="credential.expirationDate ? new Date(credential.expirationDate).getTime() > new Date().getTime() ? 'bg-cyan-50' : 'bg-red-50' : 'bg-cyan-50'"
40+
:class="credential.parsedCredential.expirationDate ? new Date(credential.parsedCredential.expirationDate).getTime() > new Date().getTime() ? 'bg-cyan-50' : 'bg-red-50' : 'bg-cyan-50'"
4141
class="rounded-lg px-3 mb-2">
4242
<span
43-
:class="credential.expirationDate ? new Date(credential.expirationDate).getTime() > new Date().getTime() ? 'text-cyan-900' : 'text-orange-900' : 'text-cyan-900'">{{
44-
credential.expirationDate
45-
? new Date(credential.expirationDate).getTime() >
43+
:class="credential.parsedCredential.expirationDate ? new Date(credential.parsedCredential.expirationDate).getTime() > new Date().getTime() ? 'text-cyan-900' : 'text-orange-900' : 'text-cyan-900'">{{
44+
credential.parsedCredential.expirationDate
45+
? new Date(credential.parsedCredential.expirationDate).getTime() >
4646
new Date().getTime()
4747
? "Valid"
4848
: "Expired"
@@ -51,19 +51,19 @@
5151
</div>
5252
<h2 class="text-2xl font-bold mb-2 text-gray-900 bold mb-8">
5353
{{
54-
credential.type[credential.type.length - 1].replace(
54+
credential.parsedCredential.type[credential.parsedCredential.type.length - 1].replace(
5555
/([a-z0-9])([A-Z])/g,
5656
"$1 $2"
5757
)
5858
}}
5959
</h2>
60-
<div v-if="credential.issuer" class="flex items-center">
61-
<img class="w-12" :src="credential.issuer?.image?.id
62-
? credential.issuer?.image?.id
63-
: credential.issuer?.image
60+
<div v-if="credential.parsedCredential.issuer" class="flex items-center">
61+
<img class="w-12" :src="credential.parsedCredential.issuer?.image?.id
62+
? credential.parsedCredential.issuer?.image?.id
63+
: credential.parsedCredential.issuer?.image
6464
" />
6565
<div class="text-natural-600 ml-2 w-32">
66-
{{ credential.issuer?.name }}
66+
{{ credential.parsedCredential.issuer?.name }}
6767
</div>
6868
</div>
6969
</div>

0 commit comments

Comments
 (0)