/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 - 2 0 2 1 ĠB os ch . IO ĠGmbH Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . Ċ Ġ* Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ* ĠLicense - Filename : ĠLICENSE Ċ Ġ*/ Ċ Ċ package Ġorg . oss review toolkit . utils . ort Ċ Ċ import Ġjava . net . Authenticator Ċ import Ġjava . net . Inet SocketAddress Ċ import Ġjava . net . Password Authentication Ċ import Ġjava . net . Proxy Ċ import Ġjava . net . Proxy Selector Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ import Ġorg . apache . logging . log 4 j . Level Ċ Ċ /** Ċ Ġ* ĠA Ġcaching Ġauth enticator Ġthat Ġchains Ġother Ġauthentic ators . ĠFor Ġproxy Ġauthentication , Ġthe Ġ[ Or t Proxy Selector ] Ġis Ċ Ġ* Ġrequired Ġto Ġalso Ġbe Ġinstalled . Ċ Ġ*/ Ċ class ĠO rt Authenticator ( private Ġval Ġoriginal : ĠAuth enticator ? Ġ= Ġnull ) Ġ: ĠAuth enticator () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠInstall Ġthis Ġauth enticator Ġas Ġthe Ġglobal Ġdefault . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Synchron ized ĊĠĠĠĠĠĠĠ Ġfun Ġinstall (): ĠO rt Authenticator Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠgetDefault () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( current Ġis ĠO rt Authenticator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Once ( Level . INFO ) Ġ{ Ġ" Authenticator Ġis Ġalready Ġinstalled ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO rt Authenticator ( current ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetDefault ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġ" Authenticator Ġwas Ġsuccessfully Ġinstalled ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUn install Ġthis Ġauth enticator , Ġrest oring Ġthe Ġprevious Ġauth enticator Ġas Ġthe Ġglobal Ġdefault . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Synchron ized ĊĠĠĠĠĠĠĠ Ġfun Ġuninstall (): ĠAuth enticator ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠgetDefault () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( current Ġis ĠO rt Authenticator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent . original . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetDefault ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġ" Authenticator Ġwas Ġsuccessfully Ġun installed ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġ" Authenticator Ġis Ġnot Ġinstalled ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFirst Ġlook Ġfor Ġ( pot entially Ġmachine - specific ) Ġcredentials Ġin Ġa Ġne trc - style Ġfile , Ġthen Ġlook Ġfor Ġgeneric ĊĠĠĠ Ġ// Ġcredentials Ġpassed Ġas Ġenvironment Ġvariables . ĊĠĠĠ Ġprivate Ġval Ġdelegate Auth entic ators Ġ= ĠlistOf ( Net Rc Authenticator (), ĠEnv Var Authenticator ()) ĊĊĠĠĠ Ġprivate Ġval Ġserver Authentication : ĠConcurrent HashMap < String , ĠPassword Authentication > Ġ= ĠConcurrent HashMap () ĊĊĠĠĠ Ġoverride Ġfun Ġget Password Authentication (): ĠPassword Authentication ? Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request or Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest or Type . PROXY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproxy Selector Ġ= ĠProxy Selector . getDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( proxy Selector Ġis ĠO rt Proxy Selector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġrequesting Protocol . to Proxy Type () Ġ?: Ġreturn Ġsuper . getPassword Authentication () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproxy Ġ= ĠProxy ( type , ĠInet SocketAddress ( request ing Host , Ġrequesting Port )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproxy Selector . get Proxy Authentication ( proxy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest or Type . SERVER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver Authentication [ request ing Host ]?. let Ġ{ Ġreturn Ġit Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate Auth entic ators . forEach Ġ{ Ġauth enticator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth enticator . request Password Authentication Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequesting Host , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequesting Site , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequesting Port , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequesting Protocol , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequesting Prompt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequesting Scheme , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequesting URL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest or Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver Authentication [ request ing Host ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġlog . warn Ġ{ Ġ" No Ġrequest or Ġtype Ġset Ġfor Ġpassword Ġauthentication ." Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . getPassword Authentication () ĊĠĠĠ Ġ} Ċ } Ċ