Source code for pyeudiw.satosa.frontends.openid4vci.models.notification_request

import re
from typing import Optional

from pydantic import model_validator

from pyeudiw.satosa.frontends.openid4vci.models.openid4vci_basemodel import OpenId4VciBaseModel

NOTIFICATION_ENDPOINT = "notification"

ACCEPTED_EVENT = [
    "credential_accepted",
    "credential_deleted",
    "credential_failure"
]
ALLOWED_EVENT_DESCRIPTION_REGEX = re.compile(r'^[\x20-\x21\x23-\x5B\x5D-\x7E]*$')


[docs] class NotificationRequest(OpenId4VciBaseModel): """ Request body sent by the Wallet Instance to the Notification Endpoint to inform the Credential Issuer about events related to the issued Credential. """ notification_id: str = None event: str = None event_description: Optional[str] = None
[docs] @model_validator(mode='after') def check_notification_endpoint_request(self) -> "NotificationRequest": self.validate_notification_id() self.validate_event() self.validate_event_description() return self
[docs] def validate_notification_id(self): self.notification_id = self.strip(self.notification_id) self.check_missing_parameter(self.notification_id, "notification_id", NOTIFICATION_ENDPOINT) #TODO: check MUST match the notification_id provided by the Credential Issuer. self.check_invalid_parameter( False, self.notification_id, "notification_id", NOTIFICATION_ENDPOINT )
[docs] def validate_event(self): self.event = self.strip(self.event) self.check_missing_parameter(self.event, "event", NOTIFICATION_ENDPOINT) self.check_invalid_parameter( self.event not in ACCEPTED_EVENT, self.event, "event", NOTIFICATION_ENDPOINT )
[docs] def validate_event_description(self): self.event_description = self.strip(self.event_description) if self.event_description: self.check_invalid_parameter( not ALLOWED_EVENT_DESCRIPTION_REGEX.match(self.event_description), self.event_description, "event_description", NOTIFICATION_ENDPOINT )