package Ġs nc . smart ch arging network . node . config Ċ Ċ import Ġorg . springframework . boot . context . event . Application Ready Event Ċ import Ġorg . springframework . context . event . EventListener Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġs nc . smart ch arging network . node . tools . url Join Ċ import Ġjava . net . Connect Exception Ċ import Ġjava . net . Inet Address Ċ import Ġjava . net . URL Ċ import Ġjava . net . Unknown Host Exception Ċ import Ġjavax . net . ssl . SSL Exception Ċ Ċ @ Component Ċ class ĠVerification ( private Ġval Ġproperties : ĠNode Properties ) Ġ{ ĊĊĠĠĠ Ġ@ EventListener ( Application Ready Event :: class ) ĊĠĠĠ Ġfun Ġtest Registry () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( properties . privateKey Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( properties . dev ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . privateKey Ġ= Ġ" 0 x 1 c 3 e 5 4 5 3 c 0 f 9 aa 7 4 a 8 eb 0 2 1 6 3 1 0 b 2 b 0 1 3 f 0 1 7 8 1 3 a 6 4 8 fce 3 6 4 bf 4 1 dbc 0 b 3 7 6 4 7 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" No Ġprivate Ġkey Ġset . ĠUnable Ġto Ġverify Ġregistry Ġconfiguration .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ EventListener ( Application Ready Event :: class ) ĊĠĠĠ Ġfun Ġtest Public URL () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL ( this . properties . url ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinet Address Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInet Address . get ByName ( url . host ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnknown Host Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Provided Ġhost Ġ\" ${ url . host }\" Ġunknown .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! this . properties . dev ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( url . protocol Ġ!= Ġ" https ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Must Ġuse Ġhttps Ġin Ġprod Ġmode . ĠProvide d Ġurl Ġhas Ġprotocol Ġ\" ${ url . protocol }\" .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inet Address . is Any Local Address Ġ|| Ġinet Address . is Loop back Address ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Must Ġuse Ġpublicly Ġaccessible Ġurl Ġin Ġprod Ġmode . ĠProvide d Ġurl Ġhas Ġlocal / loop back Ġhost Ġaddress Ġ\" ${ inet Address . host Address }\" .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . test Health () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtest Health () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhealth URL Ġ= Ġurl Join ( this . properties . url , Ġ"/ health ") ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġk http . get ( health URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . statusCode Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠConnect Exception ("${ response . statusCode } Ġ${ response . text }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠConnect Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unable Ġto Ġconnect . ĠEnsure Ġ$ health URL Ġis Ġreachable .") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSSL Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Ex peri enced ĠSSL Ġexception . ĠEnsure Ġ$ health URL Ġhas Ġcorrect Ġcertificates .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ