71 lines
2.1 KiB
Scala
71 lines
2.1 KiB
Scala
package net.dergrimm.keycloak.providers.events.mqtt
|
|
|
|
import org.keycloak.events.Event
|
|
import org.keycloak.events.admin.AdminEvent
|
|
import org.keycloak.models.KeycloakSession
|
|
import upickle.default.ReadWriter
|
|
|
|
object Payload:
|
|
def fromEvent(event: Event, session: KeycloakSession): Payload =
|
|
val error = event.getError()
|
|
val realmId = event.getRealmId()
|
|
|
|
Payload(
|
|
admin = false,
|
|
time = event.getTime(),
|
|
realm = session.realms().getRealm(realmId).getName(),
|
|
realmId,
|
|
authDetails = PayloadAuthDetails.fromEvent(event),
|
|
resourceType = null,
|
|
operationType = event.getType().toString(),
|
|
resourcePath = null,
|
|
representation = null,
|
|
error,
|
|
resourceTypeAsString = null
|
|
)
|
|
|
|
def fromEvent(event: AdminEvent, session: KeycloakSession): Payload =
|
|
val resourceType = event.getResourceType()
|
|
val representation = event.getRepresentation()
|
|
val error = event.getError()
|
|
val realmId = event.getRealmId()
|
|
|
|
Payload(
|
|
admin = true,
|
|
time = event.getTime(),
|
|
realm = session.realms().getRealm(realmId).getName(),
|
|
realmId,
|
|
authDetails = PayloadAuthDetails.fromEvent(event),
|
|
resourceType =
|
|
if resourceType == null then null else resourceType.toString(),
|
|
operationType = event.getOperationType().toString(),
|
|
resourcePath = event.getResourcePath(),
|
|
representation,
|
|
error,
|
|
resourceTypeAsString = event.getResourceTypeAsString()
|
|
)
|
|
|
|
private final case class Payload(
|
|
admin: Boolean,
|
|
time: Long,
|
|
realm: String,
|
|
realmId: String,
|
|
authDetails: PayloadAuthDetails,
|
|
resourceType: String,
|
|
operationType: String,
|
|
resourcePath: String,
|
|
representation: String,
|
|
error: String,
|
|
resourceTypeAsString: String
|
|
) derives ReadWriter:
|
|
private def result: String =
|
|
if error != null then "error" else "success"
|
|
|
|
def topic: String =
|
|
println(resourceType.toString())
|
|
if admin
|
|
then
|
|
s"admin/${realm}/${result}/${resourceType.toLowerCase()}/${operationType.toLowerCase()}"
|
|
else
|
|
s"client/${realm}/${result}/${authDetails.clientId}/${operationType.toLowerCase()}"
|