package Ġcom . d xc . ssi . agent . did comm . actions . verify . impl Ċ Ċ import Ġcom . ben ash er 4 4 . uuid . uuid 4 Ċ import Ġcom . d xc . ssi . agent . did comm . actions . Action Params Ċ import Ġcom . d xc . ssi . agent . did comm . actions . ActionResult Ċ import Ġcom . d xc . ssi . agent . did comm . actions . verify . Credential Verification Action Ċ import Ġcom . d xc . ssi . agent . did comm . com moon . Message Sender Ċ import Ġcom . d xc . ssi . agent . did comm . constants . Did Comm Problem Codes Ċ import Ġcom . d xc . ssi . agent . did comm . constants . to Problem Report Description Ċ import Ġcom . d xc . ssi . agent . did comm . model . common . Attach Ċ import Ġcom . d xc . ssi . agent . did comm . model . common . Thread Ċ import Ġcom . d xc . ssi . agent . did comm . model . problem . Problem Report Ċ import Ġcom . d xc . ssi . agent . did comm . model . verify . container . Presentation Container Ċ import Ġcom . d xc . ssi . agent . did comm . model . verify . container . Presentation Request Container Ċ import Ġcom . d xc . ssi . agent . did comm . states . verify . Credential Verification State Ċ import Ġcom . d xc . ssi . agent . exceptions . common . No Credential ToS atisf y Presentation RequestException Ċ import Ġcom . d xc . ssi . agent . ker mit . Ker mit Ċ import Ġcom . d xc . ssi . agent . ker mit . Log cat Logger Ċ import Ġcom . d xc . ssi . agent . ker mit . Severity Ċ import Ġcom . d xc . ssi . agent . model . Presentation Exchange Record Ċ import Ġcom . d xc . ssi . agent . model . Presentation Request Response Action Ċ import Ġcom . d xc . ssi . agent . model . messages . Message Ċ import Ġkotlinx . serialization . encode ToString Ċ import Ġkotlinx . serialization . json . Json Ċ Ċ class ĠProcess Presentation Request Action ( ĊĠĠĠ Ġprivate Ġval Ġaction Params : ĠAction Params , ĊĠĠĠ Ġprivate Ġval Ġpresentation Request Container : ĠPresentation Request Container , ĊĠĠĠ Ġprivate Ġval Ġpresentation Request Response Action : ĠPresentation Request Response Action ? Ġ= Ġnull Ċ ) Ġ: ĠCredential Verification Action Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠKer mit Ġ= ĠKer mit ( Log cat Logger ()) ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġperform (): ĠActionResult Ġ{ ĊĊĠĠĠĠĠĠĠ Ġlogger . d Ġ{ Ġ" Entered ĠProcess Presentation Request Action " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmessage Context Ġ= Ġaction Params . context ĊĠĠĠĠĠĠĠ Ġval Ġcred Presenter Controller Ġ= Ġaction Params . callbacks . cred Presenter Controller !! ĊĠĠĠĠĠĠĠ Ġval Ġwallet Connector Ġ= Ġaction Params . wallet Connector ĊĠĠĠĠĠĠĠ Ġval Ġledger Connector Ġ= Ġaction Params . ledger Connector ĊĠĠĠĠĠĠĠ Ġval Ġtransport Ġ= Ġaction Params . transport ĊĠĠĠĠĠĠĠ Ġval Ġservices Ġ= Ġaction Params . services ĊĊĠĠĠĠĠĠĠ Ġval Ġexisting Presentation Exchange Record Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Connector . pro ver !!. get Presentation Exchange Record By Thread ( Thread ( th id Ġ= Ġpresentation Request Container . id )) ĊĠĠĠĠĠĠĠ Ġif Ġ( existing Presentation Exchange Record ?. state Ġ!= ĠCredential Verification State . REQUEST _ RECE IVED ) Ġthrow ĠIllegalStateException () ĊĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Connector . wallet Holder . getConnection Record ById ( existing Presentation Exchange Record . connection Id ) !! ĊĊĠĠĠĠĠĠĠ Ġval Ġpresentation Request Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Connector . pro ver . build Presentation Request Object From RawData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġdeal Ġwith Ġseveral Ġattachments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Request Container . presentation Request Attach [ 0 ]. data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Presentation Request Response Action Ġ= Ġpresentation Request Response Action ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġcred Presenter Controller . on Request Received ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Ġ= Ġconnection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Request Container Ġ= Ġpresentation Request Container , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( actual Presentation Request Response Action ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPresentation Request Response Action . ACCEPT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpresentation Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Connector . pro ver . create Presentation ( presentation Request , Ġledger Connector ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpresentation Ġ= ĠPresentation Container ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġuuid 4 (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Ġ= ĠThread ( th id Ġ= Ġpresentation Request Container . id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Attach Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttach ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" lib ind y - presentation - 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmimeType Ġ= Ġ" application / json ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġwallet Connector . pro ver . extract Presentation Data From Presentation ( presentation Data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġthink Ġif Ġwe Ġneed Ġto Ġset Ġsome Ġmeaningful Ġcomment Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġ" comment " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage Sender . pack And SendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage ( Json . encode ToString ( presentation )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Connector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransport , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservices , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Message Sent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Connector . pro ver . store Presentation Exchange Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPresentation Exchange Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠCredential Verification State . PRESENT ATION _ SENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Id Ġ= Ġconnection . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Request Container Ġ= Ġpresentation Request Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Ġ= ĠThread ( th id Ġ= Ġpresentation Request Container . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcred Presenter Controller . on Done ( connection ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Message Sending Failure Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproblem Report Ġ= ĠProblem Report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġuuid 4 (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= ĠDid Comm Problem Codes . CO ULD _ NOT _ SEND _ PRESENT ATION . to Problem Report Description () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġmake Ġthis Ġcallback Ġasync ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcred Presenter Controller . on Problem Report Generated ( connection , Ġproblem Report ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNo Credential ToS atisf y Presentation RequestException ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproblem Report Ġ= ĠProblem Report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġuuid 4 (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= ĠDid Comm Problem Codes . NO _ CRED ENTIAL S _ TO _ SAT IS FY _ PRESENT ATION _ REQUEST . to Problem Report Description (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Ġ= ĠThread ( presentation Request Container . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage Sender . pack And SendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage ( Json . encode ToString ( problem Report )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Connector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransport , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : ĠHere Ġand Ġeverywhere Ġcatch Ġall Ġexceptions Ġcoming Ġfrom Ġuser Ġcallbacks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcred Presenter Controller . on Problem Report Generated ( connection , Ġproblem Report ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproblem Report Ġ= ĠProblem Report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġuuid 4 (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= ĠDid Comm Problem Codes . INTERNAL _ AGENT _ ERROR . to Problem Report Description (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Ġ= ĠThread ( presentation Request Container . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage Sender . pack And SendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage ( Json . encode ToString ( problem Report )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Connector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransport , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcred Presenter Controller . on Problem Report Generated ( connection , Ġproblem Report ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPresentation Request Response Action . RE JECT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : ĠConsider Ġan Ġoption Ġto Ġsend ĠSend ĠPresentation Proposal Ġhere Ġinstead Ġof ĠProblem Report , Ġdepending Ġon Ġuser Ġinput ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Connector . pro ver . store Presentation Exchange Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPresentation Exchange Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠCredential Verification State . REQUEST _ RE JECT ED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Id Ġ= Ġconnection . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Request Container Ġ= Ġpresentation Request Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Ġ= ĠThread ( th id Ġ= Ġpresentation Request Container . id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Par ked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproblem Report Ġ= ĠProblem Report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġuuid 4 (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= ĠDid Comm Problem Codes . USER _ RE JECT ED _ PRESENT ATION _ REQUEST . to Problem Report Description (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Ġ= ĠThread ( presentation Request Container . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage Sender . pack And SendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage ( Json . encode ToString ( problem Report )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Connector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransport , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPresentation Request Response Action . PAR K Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Connector . pro ver . store Presentation Exchange Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPresentation Exchange Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠCredential Verification State . REQUEST _ RECE IVED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Id Ġ= Ġconnection . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Request Container Ġ= Ġpresentation Request Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Ġ= ĠThread ( th id Ġ= Ġpresentation Request Container . id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Par ked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠActionResult () ĊĊĠĠĠ Ġ} ĊĊ Ċ } Ċ