@@ -29,6 +29,7 @@ import eu.europa.ec.corelogic.model.FormatType
29
29
import eu.europa.ec.corelogic.model.ScopedDocument
30
30
import eu.europa.ec.corelogic.model.toDocumentIdentifier
31
31
import eu.europa.ec.eudi.openid4vci.MsoMdocCredential
32
+ import eu.europa.ec.eudi.statium.Status
32
33
import eu.europa.ec.eudi.wallet.EudiWallet
33
34
import eu.europa.ec.eudi.wallet.document.DeferredDocument
34
35
import eu.europa.ec.eudi.wallet.document.Document
@@ -45,6 +46,7 @@ import eu.europa.ec.eudi.wallet.issue.openid4vci.OfferResult
45
46
import eu.europa.ec.eudi.wallet.issue.openid4vci.OpenId4VciManager
46
47
import eu.europa.ec.resourceslogic.R
47
48
import eu.europa.ec.resourceslogic.provider.ResourceProvider
49
+ import eu.europa.ec.storagelogic.controller.RevokedDocumentsStorageController
48
50
import kotlinx.coroutines.CoroutineDispatcher
49
51
import kotlinx.coroutines.Dispatchers
50
52
import kotlinx.coroutines.channels.ProducerScope
@@ -171,12 +173,19 @@ interface WalletCoreDocumentsController {
171
173
suspend fun getScopedDocuments (locale : Locale ): FetchScopedDocumentsPartialState
172
174
173
175
fun getAllDocumentCategories (): DocumentCategories
176
+
177
+ suspend fun getRevokedDocumentIds (): List <String >
178
+
179
+ suspend fun isDocumentRevoked (id : String ): Boolean
180
+
181
+ suspend fun resolveDocumentStatus (document : IssuedDocument ): Result <Status >
174
182
}
175
183
176
184
class WalletCoreDocumentsControllerImpl (
177
185
private val resourceProvider : ResourceProvider ,
178
186
private val eudiWallet : EudiWallet ,
179
187
private val walletCoreConfig : WalletCoreConfig ,
188
+ private val revokedDocumentsStorageController : RevokedDocumentsStorageController ,
180
189
private val dispatcher : CoroutineDispatcher = Dispatchers .IO
181
190
) : WalletCoreDocumentsController {
182
191
@@ -329,7 +338,10 @@ class WalletCoreDocumentsControllerImpl(
329
338
override fun deleteDocument (documentId : String ): Flow <DeleteDocumentPartialState > = flow {
330
339
eudiWallet.deleteDocumentById(documentId = documentId)
331
340
.kotlinResult
332
- .onSuccess { emit(DeleteDocumentPartialState .Success ) }
341
+ .onSuccess {
342
+ revokedDocumentsStorageController.delete(documentId)
343
+ emit(DeleteDocumentPartialState .Success )
344
+ }
333
345
.onFailure {
334
346
emit(
335
347
DeleteDocumentPartialState .Failure (
@@ -346,10 +358,12 @@ class WalletCoreDocumentsControllerImpl(
346
358
347
359
override fun deleteAllDocuments (mainPidDocumentId : String ): Flow <DeleteAllDocumentsPartialState > =
348
360
flow {
361
+
349
362
val allDocuments = getAllDocuments()
350
363
val mainPidDocument = getMainPidDocument()
351
364
352
365
mainPidDocument?.let {
366
+
353
367
val restOfDocuments = allDocuments.minusElement(it)
354
368
355
369
var restOfAllDocsDeleted = true
@@ -510,6 +524,15 @@ class WalletCoreDocumentsControllerImpl(
510
524
return walletCoreConfig.documentCategories
511
525
}
512
526
527
+ override suspend fun getRevokedDocumentIds (): List <String > =
528
+ revokedDocumentsStorageController.retrieveAll().map { it.identifier }
529
+
530
+ override suspend fun isDocumentRevoked (id : String ): Boolean =
531
+ revokedDocumentsStorageController.retrieve(id) != null
532
+
533
+ override suspend fun resolveDocumentStatus (document : IssuedDocument ): Result <Status > =
534
+ eudiWallet.resolveStatus(document)
535
+
513
536
private fun issueDocumentWithOpenId4VCI (configId : String ): Flow <IssueDocumentsPartialState > =
514
537
callbackFlow {
515
538
0 commit comments