@@ -338,6 +338,7 @@ class Wallet2ExtendedIntegrationTest {
338338 credentialEndpointHandlers = CredentialEndpointHandlers ()
339339 )
340340 )
341+ val proofSupport = TestIssuerProofSupport (issuerBase, accessTokenKey)
341342 val session = DefaultSession (subject = " holder-isolated" )
342343 runBlocking {
343344 preAuthRepo.save(
@@ -387,6 +388,14 @@ class Wallet2ExtendedIntegrationTest {
387388 )
388389 }
389390 get(" /credential-offer" ) { call.respond(offer) }
391+ post(" /nonce" ) {
392+ val nonce = proofSupport.issueNonce()
393+ call.response.header(HttpHeaders .CacheControl , " no-store" )
394+ call.respond(buildJsonObject {
395+ put(" c_nonce" , nonce.nonce)
396+ put(" c_nonce_expires_in" , nonce.expiresInSeconds)
397+ })
398+ }
390399 post(" /token" ) {
391400 val params = call.receiveParameters()
392401 val code = params[" pre-authorized_code" ] ? : return @post call.respond(
@@ -406,11 +415,12 @@ class Wallet2ExtendedIntegrationTest {
406415 if (tokenResponse !is AccessTokenResponseResult .Success ) return @post call.respond(
407416 HttpStatusCode .InternalServerError , buildJsonObject { put(" error" , " server_error" ) }
408417 )
418+ val nonce = proofSupport.issueNonce()
409419 call.respond(buildJsonObject {
410420 put(" access_token" , tokenResponse.response.accessToken)
411421 put(" token_type" , " Bearer" )
412- put(" c_nonce" , " isolated- nonce" )
413- put(" c_nonce_expires_in" , 300 )
422+ put(" c_nonce" , nonce.nonce )
423+ put(" c_nonce_expires_in" , nonce.expiresInSeconds )
414424 })
415425 }
416426 post(" /credential" ) {
@@ -430,22 +440,26 @@ class Wallet2ExtendedIntegrationTest {
430440 if (credentialRequest !is CredentialRequestResult .Success ) return @post call.respond(
431441 HttpStatusCode .BadRequest , buildJsonObject { put(" error" , " invalid_proof" ) }
432442 )
443+ val request = credentialRequest.request.withIssuer(issuerBase)
433444 val credentialResponse = provider.createCredentialResponse(
434- request = credentialRequest. request.withIssuer(issuerBase) ,
445+ request = request,
435446 configuration = configuration,
436447 issuerKey = issuerKey,
437448 issuerId = issuerBase,
438449 credentialData = buildJsonObject {
439450 put(" given_name" , " Alice" ); put(" family_name" , " Wonder" )
440451 put(" issuing_country" , " DE" )
441452 },
442- selectiveDisclosure = null
443- )
444- if (credentialResponse !is CredentialResponseResult .Success ) return @post call.respond(
445- HttpStatusCode .InternalServerError , buildJsonObject { put(" error" , " server_error" ) }
453+ selectiveDisclosure = null ,
454+ proofValidationContext = proofSupport.validationContext(request)
446455 )
456+ if (credentialResponse !is CredentialResponseResult .Success ) {
457+ val failure = credentialResponse as CredentialResponseResult .Failure
458+ val httpResp = provider.writeCredentialError(request, failure.error)
459+ return @post call.respond(HttpStatusCode .fromValue(httpResp.status), httpResp.payload)
460+ }
447461 val httpResp = provider.writeCredentialResponse(
448- credentialRequest. request.withIssuer(issuerBase) , credentialResponse.response
462+ request, credentialResponse.response
449463 )
450464 call.respond(HttpStatusCode .fromValue(httpResp.status), httpResp.payload)
451465 }
0 commit comments