diff --git a/docker-compose/docker-compose.yaml b/docker-compose/docker-compose.yaml index c7bb8f93a..29012ab46 100644 --- a/docker-compose/docker-compose.yaml +++ b/docker-compose/docker-compose.yaml @@ -17,7 +17,7 @@ services: - .env extra_hosts: - "host.docker.internal:host-gateway" - - "wase:host-gateway" + - "waltid.enterprise.localhost:host-gateway" volumes: - ./wallet-api/config:/waltid-wallet-api/config - ./wallet-api/walt.yaml:/waltid-wallet-api/walt.yaml diff --git a/waltid-services/waltid-service-commons/build.gradle.kts b/waltid-services/waltid-service-commons/build.gradle.kts index d8e8f21ad..14f2fc6e0 100644 --- a/waltid-services/waltid-service-commons/build.gradle.kts +++ b/waltid-services/waltid-service-commons/build.gradle.kts @@ -19,6 +19,8 @@ object Versions { dependencies { api(project(":waltid-libraries:waltid-library-commons")) + // OIDC + api(project(":waltid-libraries:protocols:waltid-openid4vc")) // Ktor api("io.ktor:ktor-server-core-jvm:${Versions.KTOR_VERSION}") diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/AuditEvent.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/AuditEvent.kt new file mode 100644 index 000000000..541da6448 --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/AuditEvent.kt @@ -0,0 +1,16 @@ +package id.walt.commons.audit + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +sealed class AuditEvent( + @SerialName("_id") val id: String, + val eventType: EventType +) { + abstract val target: String + abstract val timestamp: Long + abstract val status: EventStatus + abstract val callId: String? + abstract val error: String? +} diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/DeviceFlow.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/DeviceFlow.kt new file mode 100644 index 000000000..a43debfeb --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/DeviceFlow.kt @@ -0,0 +1,6 @@ +package id.walt.commons.audit + +enum class DeviceFlow { + Multi, + Single +} diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/DidEvent.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/DidEvent.kt new file mode 100644 index 000000000..375617cf6 --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/DidEvent.kt @@ -0,0 +1,18 @@ +package id.walt.commons.audit + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlin.uuid.ExperimentalUuidApi +import kotlin.uuid.Uuid + +@OptIn(ExperimentalUuidApi::class) +@Serializable +class DidEvent( + override val target: String, + override val timestamp: Long, + override val status: EventStatus, + val didEventType: DidEventType, + val didMethod: String, + override val callId: String? = null, + override val error: String? = null +) : AuditEvent(Uuid.random().toHexString(), EventType.DIDEvent) diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/DidEventType.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/DidEventType.kt new file mode 100644 index 000000000..fa6194bf2 --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/DidEventType.kt @@ -0,0 +1,8 @@ +package id.walt.commons.audit + +enum class DidEventType { + Create, + Update, + Delete, + Resolve +} diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/EventStatus.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/EventStatus.kt new file mode 100644 index 000000000..f51025829 --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/EventStatus.kt @@ -0,0 +1,7 @@ +package id.walt.commons.audit + +enum class EventStatus { + Open, + Success, + Failure +} diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/EventType.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/EventType.kt new file mode 100644 index 000000000..24f1e4a4c --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/EventType.kt @@ -0,0 +1,21 @@ +package id.walt.commons.audit + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +enum class EventType { + @SerialName("IssuanceEvent") IssuanceEvent, + @SerialName("VerificationEvent") VerificationEvent, + @SerialName("KeyEvent") KeyEvent, + @SerialName("DIDEvent") DIDEvent; + + override fun toString(): String { + return when (this) { + IssuanceEvent -> "IssuanceEvent" + VerificationEvent -> "VerificationEvent" + DIDEvent -> "DIDEvent" + KeyEvent -> "KeyEvent" + } + } +} diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/IssuanceEvent.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/IssuanceEvent.kt new file mode 100644 index 000000000..a71dca238 --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/IssuanceEvent.kt @@ -0,0 +1,21 @@ +package id.walt.commons.audit + +import id.walt.oid4vc.data.ProofType +import kotlinx.serialization.Serializable +import kotlin.uuid.ExperimentalUuidApi +import kotlin.uuid.Uuid + +@OptIn(ExperimentalUuidApi::class) +@Serializable +class IssuanceEvent( + override val target: String, + override val timestamp: Long, + override val status: EventStatus, + val sessionId: String, + val credentialConfigurationId: String, + val format: String?, + val proofType: ProofType? = null, + val holderId: String? = null, + override val callId: String? = null, + override val error: String? = null +) : AuditEvent(Uuid.random().toHexString(), EventType.IssuanceEvent) diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/KeyEvent.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/KeyEvent.kt new file mode 100644 index 000000000..1736ab711 --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/KeyEvent.kt @@ -0,0 +1,18 @@ +package id.walt.commons.audit + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlin.uuid.ExperimentalUuidApi +import kotlin.uuid.Uuid + +@OptIn(ExperimentalUuidApi::class) +@Serializable +class KeyEvent( + override val target: String, + override val timestamp: Long, + override val status: EventStatus, + val keyEventType: KeyEventType, + val keyAlgorithm: String, + override val callId: String? = null, + override val error: String? = null +) : AuditEvent(Uuid.random().toHexString(), EventType.KeyEvent) diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/KeyEventType.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/KeyEventType.kt new file mode 100644 index 000000000..bc240d99e --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/KeyEventType.kt @@ -0,0 +1,8 @@ +package id.walt.commons.audit + +enum class KeyEventType { + Create, + Import, + Export, + Rotation +} diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/VerificationEvent.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/VerificationEvent.kt new file mode 100644 index 000000000..e1e2d3d87 --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/VerificationEvent.kt @@ -0,0 +1,21 @@ +package id.walt.commons.audit + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlin.uuid.ExperimentalUuidApi +import kotlin.uuid.Uuid + +@OptIn(ExperimentalUuidApi::class) +@Serializable +class VerificationEvent( + override val target: String, + override val timestamp: Long, + override val status: EventStatus, + val sessionId: String, + val format: String, + val signatureAlgorithm: String, + val credentialType: String? = null, + val holderId: String? = null, + override val callId: String? = null, + override val error: String? = null +) : AuditEvent(Uuid.random().toHexString(), EventType.VerificationEvent) diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/DidEventFilter.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/DidEventFilter.kt new file mode 100644 index 000000000..6da41f4dc --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/DidEventFilter.kt @@ -0,0 +1,10 @@ +package id.walt.commons.audit.filter + +import id.walt.commons.audit.DidEventType +import kotlinx.serialization.Serializable + +@Serializable +data class DidEventFilter( + val didEventType: Set? = null, + val didMethod: Set? = null +) diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/EventFilter.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/EventFilter.kt new file mode 100644 index 000000000..3f8434482 --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/EventFilter.kt @@ -0,0 +1,18 @@ +package id.walt.commons.audit.filter + +import id.walt.commons.audit.EventStatus +import id.walt.commons.audit.EventType +import kotlinx.serialization.Serializable + +@Serializable +data class EventFilter( + val eventType: Set? = null, + val status: Set? = null, + val fromTimestamp: Long? = null, + val toTimestamp: Long? = null, + val callId: String? = null, + val issuanceEventFilter: IssuanceEventFilter? = null, + val verificationEventFilter: VerificationEventFilter? = null, + val keyEventFilter: KeyEventFilter? = null, + val didEventFilter: DidEventFilter? = null +) diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/IssuanceEventFilter.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/IssuanceEventFilter.kt new file mode 100644 index 000000000..7b5470781 --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/IssuanceEventFilter.kt @@ -0,0 +1,14 @@ +package id.walt.commons.audit.filter + +import id.walt.oid4vc.data.CredentialFormat +import id.walt.oid4vc.data.ProofType +import kotlinx.serialization.Serializable + +@Serializable +data class IssuanceEventFilter( + val credentialConfigurationId: Set? = null, + val format: Set? = null, + val sessionId: String? = null, + val proofType: Set? = null, + val holder: Set? = null, +) diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/KeyEventFilter.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/KeyEventFilter.kt new file mode 100644 index 000000000..41b8265b6 --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/KeyEventFilter.kt @@ -0,0 +1,10 @@ +package id.walt.commons.audit.filter + +import id.walt.commons.audit.KeyEventType +import kotlinx.serialization.Serializable + +@Serializable +data class KeyEventFilter( + val keyEventType: Set? = null, + val keyAlgorithm: Set? = null, +) diff --git a/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/VerificationEventFilter.kt b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/VerificationEventFilter.kt new file mode 100644 index 000000000..807a6cf14 --- /dev/null +++ b/waltid-services/waltid-service-commons/src/main/kotlin/id/walt/commons/audit/filter/VerificationEventFilter.kt @@ -0,0 +1,20 @@ +package id.walt.commons.audit.filter + +import id.walt.commons.audit.DeviceFlow +import id.walt.oid4vc.data.CredentialFormat +import id.walt.oid4vc.data.ProofType +import kotlinx.serialization.Serializable + +@Serializable +data class VerificationEventFilter( + val format: Set? = null, + val signatureAlgorithm: Set? = null, + val sessionId: String? = null, + val holder: Set? = null, + val credentialType: Set? = null, + val ecosystem: Set? = null, + val walletId: Set? = null, + val protocol: Set? = null, + val deviceFlow: Set? = null, + val asyncFlow: Set? = null +)