Skip to content

Commit acbe76d

Browse files
committed
Move duplicated code to extension method
1 parent 2edd4c9 commit acbe76d

File tree

3 files changed

+29
-53
lines changed

3 files changed

+29
-53
lines changed

shared/src/commonMain/kotlin/at/asitplus/wallet/app/common/Extensions.kt

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package at.asitplus.wallet.app.common
22

3+
import at.asitplus.dif.Constraint
34
import at.asitplus.dif.ConstraintField
45
import at.asitplus.dif.ConstraintFilter
6+
import at.asitplus.dif.DifInputDescriptor
7+
import at.asitplus.dif.FormatContainerJwt
8+
import at.asitplus.dif.FormatHolder
59
import at.asitplus.dif.InputDescriptor
10+
import at.asitplus.iso.DocRequest
611
import at.asitplus.jsonpath.core.NormalizedJsonPath
712
import at.asitplus.jsonpath.core.NormalizedJsonPathSegment
813
import at.asitplus.jsonpath.core.NormalizedJsonPathSegment.NameSegment
@@ -30,8 +35,6 @@ import at.asitplus.wallet.lib.data.dif.PresentationExchangeInputEvaluator
3035
import at.asitplus.wallet.lib.data.vckJsonSerializer
3136
import at.asitplus.wallet.lib.oidvci.toFormat
3237
import at.asitplus.wallet.mdl.MobileDrivingLicenceScheme
33-
import at.asitplus.wallet.por.PowerOfRepresentationDataElements
34-
import at.asitplus.wallet.por.PowerOfRepresentationScheme
3538
import at.asitplus.wallet.taxid.TaxIdScheme
3639
import data.credentials.JsonClaimReference
3740
import data.credentials.MdocClaimReference
@@ -321,4 +324,23 @@ fun NormalizedJsonPath.minus(name: String) =
321324
NormalizedJsonPath(this.segments.filter {
322325
(it as NameSegment).memberName != name
323326
}
324-
)
327+
)
328+
fun Array<DocRequest>.toDifInputDescriptorList() = this.map {
329+
val itemsRequest = it.itemsRequest.value
330+
DifInputDescriptor(
331+
id = itemsRequest.docType,
332+
format = FormatHolder(msoMdoc = FormatContainerJwt()),
333+
constraints = Constraint(fields = itemsRequest.namespaces.flatMap { requestedNamespace ->
334+
requestedNamespace.value.entries.map { requestedAttribute ->
335+
ConstraintField(
336+
path = listOf(
337+
NormalizedJsonPath(
338+
NameSegment(requestedNamespace.key),
339+
NameSegment(requestedAttribute.dataElementIdentifier),
340+
).toString()
341+
), intentToRetain = requestedAttribute.intentToRetain
342+
)
343+
}
344+
}.toSet())
345+
)
346+
}

shared/src/commonMain/kotlin/ui/viewmodels/authentication/NewDCAPIAuthenticationViewModel.kt

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,11 @@ package ui.viewmodels.authentication
33
import androidx.compose.ui.graphics.ImageBitmap
44
import at.asitplus.catchingUnwrapped
55
import at.asitplus.dcapi.request.DCAPIWalletRequest
6-
import at.asitplus.dif.Constraint
7-
import at.asitplus.dif.ConstraintField
86
import at.asitplus.dif.DifInputDescriptor
9-
import at.asitplus.dif.FormatContainerJwt
10-
import at.asitplus.dif.FormatHolder
117
import at.asitplus.dif.PresentationDefinition
128
import at.asitplus.iso.DeviceRequest
13-
import at.asitplus.jsonpath.core.NormalizedJsonPath
14-
import at.asitplus.jsonpath.core.NormalizedJsonPathSegment
159
import at.asitplus.wallet.app.common.WalletMain
10+
import at.asitplus.wallet.app.common.toDifInputDescriptorList
1611
import at.asitplus.wallet.lib.agent.SubjectCredentialStore
1712
import at.asitplus.wallet.lib.data.CredentialPresentation
1813
import at.asitplus.wallet.lib.data.CredentialPresentationRequest
@@ -43,25 +38,7 @@ class NewDCAPIAuthenticationViewModel(
4338
private var descriptors: List<DifInputDescriptor> = listOf()
4439

4540
fun initWithDeviceRequest(parsedRequest: DeviceRequest) {
46-
descriptors = parsedRequest.docRequests.map {
47-
val itemsRequest = it.itemsRequest.value
48-
DifInputDescriptor(
49-
id = itemsRequest.docType,
50-
format = FormatHolder(msoMdoc = FormatContainerJwt()),
51-
constraints = Constraint(fields = itemsRequest.namespaces.flatMap { requestedNamespace ->
52-
requestedNamespace.value.entries.map { requestedAttribute ->
53-
ConstraintField(
54-
path = listOf(
55-
NormalizedJsonPath(
56-
NormalizedJsonPathSegment.NameSegment(requestedNamespace.key),
57-
NormalizedJsonPathSegment.NameSegment(requestedAttribute.key),
58-
).toString()
59-
), intentToRetain = requestedAttribute.value
60-
)
61-
}
62-
}.toSet())
63-
)
64-
}
41+
descriptors = parsedRequest.docRequests.toDifInputDescriptorList()
6542
}
6643

6744
override val transactionData = null

shared/src/commonMain/kotlin/ui/viewmodels/authentication/PresentationViewModel.kt

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,15 @@ package ui.viewmodels.authentication
22

33
import androidx.compose.ui.graphics.ImageBitmap
44
import at.asitplus.catchingUnwrapped
5-
import at.asitplus.dif.Constraint
6-
import at.asitplus.dif.ConstraintField
75
import at.asitplus.dif.DifInputDescriptor
8-
import at.asitplus.dif.FormatContainerJwt
9-
import at.asitplus.dif.FormatHolder
106
import at.asitplus.dif.PresentationDefinition
11-
import at.asitplus.jsonpath.core.NormalizedJsonPath
12-
import at.asitplus.jsonpath.core.NormalizedJsonPathSegment
137
import at.asitplus.wallet.app.common.WalletMain
148
import at.asitplus.wallet.lib.agent.SubjectCredentialStore
159
import at.asitplus.wallet.lib.data.CredentialPresentation
1610
import at.asitplus.wallet.lib.data.CredentialPresentationRequest
1711
import at.asitplus.iso.DeviceRequest
1812
import at.asitplus.iso.SessionTranscript
13+
import at.asitplus.wallet.app.common.toDifInputDescriptorList
1914
import at.asitplus.wallet.lib.ktor.openid.OpenId4VpWallet
2015
import at.asitplus.wallet.lib.openid.CredentialMatchingResult
2116
import at.asitplus.wallet.lib.openid.PresentationExchangeMatchingResult
@@ -49,25 +44,7 @@ class PresentationViewModel(
4944
finishFunction: (ByteArray) -> Unit,
5045
sessionTranscript: SessionTranscript?
5146
) {
52-
descriptors = parsedRequest.docRequests.map {
53-
val itemsRequest = it.itemsRequest.value
54-
DifInputDescriptor(
55-
id = itemsRequest.docType,
56-
format = FormatHolder(msoMdoc = FormatContainerJwt()),
57-
constraints = Constraint(fields = itemsRequest.namespaces.flatMap { requestedNamespace ->
58-
requestedNamespace.value.entries.map { requestedAttribute ->
59-
ConstraintField(
60-
path = listOf(
61-
NormalizedJsonPath(
62-
NormalizedJsonPathSegment.NameSegment(requestedNamespace.key),
63-
NormalizedJsonPathSegment.NameSegment(requestedAttribute.key),
64-
).toString()
65-
), intentToRetain = requestedAttribute.value
66-
)
67-
}
68-
}.toSet())
69-
)
70-
}
47+
descriptors = parsedRequest.docRequests.toDifInputDescriptorList()
7148
this.finishFunction = finishFunction
7249
this.sessionTranscript = sessionTranscript
7350
}

0 commit comments

Comments
 (0)