Skip to content

Commit fa12bc7

Browse files
committed
Merge
1 parent 59563df commit fa12bc7

2 files changed

Lines changed: 22 additions & 51 deletions

File tree

pyeudiw/satosa/frontends/openid4vci/endpoints/base_credential_endpoint.py

Lines changed: 22 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ def build_credential(
246246
self._extract_lookup_identifiers(vci_entity.attributes or {})
247247
)
248248
if credential_id:
249-
credential_list.append(self._build_credential(user, credential_id, kwargs.get("holder_key")))
249+
credential_list.append(self._build_credential(vci_entity, user, credential_id, kwargs.get("holder_key")))
250250
else:
251251
pass # todo: manage deferred
252252

@@ -316,10 +316,12 @@ def _issue_sd_jwt(
316316
required_claims = {"iss": self.entity_id, "exp": exp, "issuing_authority": cred_config.issuing_authority,
317317
"issuing_country": cred_config.issuing_country, "vct": iss_cred_supp_conf.vct}
318318
user_id, _ = user_entity # TODO: Generalize for issuing credentials other than PID
319+
319320
supported_optional_claims = {"sub": str(uuid4()), "iat": now, "nbf": now + cred_config.nbf_delta,
320321
"issuance_date": datetime_from_timestamp(now).strftime('%Y-%m-%dT%H:%M:%SZ'), #ISO 8601
321322
"date_of_expiry": (datetime_from_timestamp(now) + timedelta(cred_specification.expiry_days)).strftime('%Y-%m-%dT%H:%M:%SZ'), #ISO 8601
322-
"status": self._build_status_list_payload(user_id),
323+
# "status": self._build_status_list_payload(user_id),
324+
"status": self.revoke_on_credential_reissuance(user_id, auth_session, cred_type_id),
323325
"trust_framework": cred_specification.trust_framework,
324326
"assurance_level": cred_specification.assurance_level,
325327
"vct#integrity": "..."} # TODO: generate it
@@ -355,54 +357,6 @@ def _retrieve_user_data(
355357
user_data["unique_id"] = uuid4()
356358
return user_data
357359

358-
def _loader_v1(
359-
self, user_entity: tuple[str, UserEntity], template, credential_type: str, auth_session: AuthorizationSession, cred_key: str
360-
) -> dict:
361-
logger.debug(
362-
f"Entering method: {inspect.getframeinfo(inspect.currentframe()).function}. "
363-
f"Params [user_entity: {user_entity}, credential_type: {credential_type}, auth_session: {auth_session}, cred_key: {cred_key}]"
364-
)
365-
user_id, user_data = user_entity
366-
match credential_type:
367-
case CredentialConfigurationFormatEnum.SD_JWT.value:
368-
template = json.dumps(
369-
yaml_load_specification_with_placeholder(template)
370-
)
371-
template = Template(template)
372-
user_data = self._retrieve_user_data(user_data)
373-
json_filled = template.render(**user_data)
374-
data = json.loads(json_filled)
375-
revoke_on_credential_reissuance = self.config["endpoints"]["credential"]["revoke_on_credential_reissuance"]
376-
match revoke_on_credential_reissuance:
377-
case "true":
378-
logger.debug("revoke_on_credential_reissuance true.")
379-
data["status"] = self._build_credential_for_user_with_revoke(user_id, credential_type,auth_session)
380-
case "false":
381-
logger.debug("revoke_on_credential_reissuance false.")
382-
data["status"] = self._build_credential_for_user_without_revoke(user_id, credential_type,auth_session, cred_key)
383-
case "true_same_wallet_solution" | "default":
384-
logger.debug("revoke_on_credential_reissuance true_same_wallet_solution.")
385-
data["status"] = self._build_credential_for_user(user_id, credential_type,auth_session, cred_key)
386-
case _:
387-
logger.warning(f"Invalid value for revoke_on_credential_reissuance: {revoke_on_credential_reissuance} - expected 'true', 'false' or 'true_same_wallet_solution'. The default behavior is to revoke the existing credential on reissuance.")
388-
raise ValueError("Invalid value for revoke_on_credential_reissuance")
389-
return data
390-
case CredentialConfigurationFormatEnum.MSO_MDOC.value:
391-
data = render_mso_mdoc_template(
392-
template, user_data.model_dump(), FIELD_TRANSFORMS
393-
)
394-
data["status"] = self._build_status_list_payload(user_id)
395-
return data
396-
case _:
397-
self._log_error(
398-
self.__class__.__name__,
399-
f"unexpected template format {credential_type}",
400-
)
401-
raise Exception(
402-
f"Invalid credential_configurations_supported format {credential_type}"
403-
)
404-
405-
# @TODO DEPRECATED
406360
def _loader(
407361
self, user_entity: tuple[str, UserEntity], template, credential_type: str
408362
, extra_claims: dict = None) -> dict:
@@ -442,6 +396,24 @@ def _build_status_list_payload(self, user_id: str):
442396
}
443397
}
444398

399+
def revoke_on_credential_reissuance(self, user_id: str, auth_session: AuthorizationSession, cred_key: str):
400+
revoke_on_credential_reissuance = self.config["endpoints"]["credential"]["revoke_on_credential_reissuance"]
401+
match revoke_on_credential_reissuance:
402+
case "true":
403+
logger.debug("revoke_on_credential_reissuance true.")
404+
return self._build_credential_for_user_with_revoke(user_id, CredentialConfigurationFormatEnum.SD_JWT.value, auth_session)
405+
case "false":
406+
logger.debug("revoke_on_credential_reissuance false.")
407+
return self._build_credential_for_user_without_revoke(user_id, CredentialConfigurationFormatEnum.SD_JWT.value, auth_session,
408+
cred_key)
409+
case "true_same_wallet_solution" | "default":
410+
logger.debug("revoke_on_credential_reissuance true_same_wallet_solution.")
411+
return self._build_credential_for_user(user_id, CredentialConfigurationFormatEnum.SD_JWT.value, auth_session, cred_key)
412+
case _:
413+
logger.warning(
414+
f"Invalid value for revoke_on_credential_reissuance: {revoke_on_credential_reissuance} - expected 'true', 'false' or 'true_same_wallet_solution'. The default behavior is to revoke the existing credential on reissuance.")
415+
raise ValueError("Invalid value for revoke_on_credential_reissuance")
416+
445417
def _build_credential_for_user(self, user_id: str, credential_type: str, auth_session: AuthorizationSession, cred_key: str):
446418
logger.debug(
447419
f"Entering method: {inspect.getframeinfo(inspect.currentframe()).function}. "

pyeudiw/satosa/frontends/openid4vci/endpoints/credential_endpoint.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ def validate_request(self, context: Context, entity: dict) -> OpenId4VciBaseMode
130130
Raises:
131131
pydantic.ValidationError: If the request body does not match the expected schema.
132132
"""
133-
134133
body = self._get_body(context)
135134
if body is None:
136135
body_dict = {}

0 commit comments

Comments
 (0)