/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠApp mat t us ĠLimited Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . app mat t us . certificate tr ansparency . internal Ċ Ċ import Ġcom . app mat t us . certificate tr ansparency . certificate Transparency Trust Manager Ċ import Ġcom . app mat t us . certificate tr ansparency . utils . Log List DataSource Test Factory Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġorg . junit . Test Ċ import Ġjava . security . KeyStore Ċ import Ġjava . security . Secure Random Ċ import Ġjavax . net . ssl . SSL Context Ċ import Ġjavax . net . ssl . SSL Peer Un verified Exception Ċ import Ġjavax . net . ssl . SS LS ocket Factory Ċ import Ġjavax . net . ssl . Trust Manager Ċ import Ġjavax . net . ssl . Trust ManagerFactory Ċ import Ġjavax . net . ssl . X 5 0 9 Trust Manager Ċ Ċ internal Ġclass ĠCertificate Transparency Trust Manager IntegrationTest Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġinvalid S ct Domain Ġ= Ġ" no - s ct . bad ssl . com " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġoriginal Trust Manager Ġ= Ġ( Trust ManagerFactory . getInstance ( Trust ManagerFactory . getDefault Algorithm ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( null Ġas ĠKey Store ?) ĊĠĠĠĠĠĠĠ Ġ}. trust Managers . first Ġ{ Ġit Ġis ĠX 5 0 9 Trust Manager Ġ} Ġas ĠX 5 0 9 Trust Manager ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtrust Manager Ġ= Ġcertificate Transparency Trust Manager ( original Trust Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog List DataSource Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog List DataSource Test Factory . log List DataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtrust Manager Allow Fails Ġ= Ġcertificate Transparency Trust Manager ( original Trust Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog List DataSource Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog List DataSource Test Factory . log List DataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail OnError Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠX 5 0 9 Trust Manager . create Socket Factory (): ĠSSL Socket Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSSL Context . getInstance (" SSL "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( null , ĠarrayOf < Trust Manager >( this @ create Socket Factory ), ĠSecure Random ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. socket Factory ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġapp mat t us Allowed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient . Builder (). ssl Socket Factory ( trust Manager . create Socket Factory (), Ġtrust Manager ). build () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// www . app mat t us . com ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġin secure Connection Allowed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient . Builder (). ssl Socket Factory ( trust Manager . create Socket Factory (), Ġtrust Manager ). build () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" http :// www . app mat t us . com ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠSSL Peer Un verified Exception :: class ) ĊĠĠĠ Ġfun Ġinvalid Dis allowed With Exception () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient . Builder (). ssl Socket Factory ( trust Manager . create Socket Factory (), Ġtrust Manager ). build () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// $ invalid S ct Domain /") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinvalid Allowed When Fails Allowed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient . Builder (). ssl Socket Factory ( trust Manager Allow Fails . create Socket Factory (), Ġtrust Manager Allow Fails ). build () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// $ invalid S ct Domain /") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinvalid Allowed When S ct Not Checked () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrust Manager Ġ= Ġcertificate Transparency Trust Manager ( original Trust Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- invalid S ct Domain ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog List DataSource Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog List DataSource Test Factory . log List DataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient . Builder (). ssl Socket Factory ( trust Manager . create Socket Factory (), Ġtrust Manager ). build () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// $ invalid S ct Domain /") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠSSL Peer Un verified Exception :: class ) ĊĠĠĠ Ġfun Ġinvalid Not Allowed When All Hosts Included () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrust Manager Ġ= Ġcertificate Transparency Trust Manager ( original Trust Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog List DataSource Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog List DataSource Test Factory . log List DataSource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient . Builder (). ssl Socket Factory ( trust Manager . create Socket Factory (), Ġtrust Manager ). build () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// $ invalid S ct Domain /") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). execute () ĊĠĠĠ Ġ} Ċ } Ċ