@@ -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 } . "
0 commit comments