package Ġcom . sk o um al . te an ity . network . interceptor Ċ Ċ import Ġandroidx . annotation . Keep Ċ import Ġcom . sk o um al . te an ity . network . interceptor . Token Interceptor . Companion . NO _ AUTH Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġretrofit 2 . http . Headers Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠAdds Ġa Ġauthentication Ġto Ġexisting Ġheaders . Ċ Ġ* Ċ Ġ* Ġ### ĠC ave ats Ċ Ġ* Ċ Ġ* Ġ#### ĠStatic Ġdeclaration Ċ Ġ* Ċ Ġ* ĠAs Ġthis Ġinstance Ġwill Ġbe Ġstatic , Ġit Ġwill Ġprovide Ġthe Ġsame Ġauth Ġdetails Ġforever . ĠIf Ġyou 're Ġusing Ċ Ġ* Ġsome Ġform Ġof ĠDI , Ġmake Ġsure Ġyou 're Ġusing Ġfactory Ġdeclarations Ġ( creates Ġthe Ġinstance Ġevery Ġtime Ġon Ċ Ġ* Ġinvocation ), Ġotherwise Ġthe Ġvalue Ġis Ġkept Ġthe Ġsame Ġforever . Ċ Ġ* Ċ Ġ* ĠOtherwise Ġyou Ġcan Ġoverride Ġthe Ġ[ Token Interceptor ], Ġand Ġcon sequent ly Ġhave Ġ[ header Value ] Ġopen Ġfor Ċ Ġ* Ġyour Ġcustom Ġgetter Ġfrom Ġshared Ġpreferences Ġ( or Ġelsewhere ). Ċ Ġ* Ċ Ġ* Ġ#### ĠDon 't Ġneed Ġit Ġeverywhere Ċ Ġ* Ċ Ġ* ĠYou Ġcan Ġannotate Ġthe Ġgiven Ġservice Ġmethod Ġwith Ġ@ [ Headers ] Ġand Ġadd Ġ[ NO _ AUTH ] Ġto Ġbypass Ċ Ġ* Ġauthentication Ġfor Ġthis Ġendpoint . Ċ Ġ* Ġ*/ Ċ @ Keep Ċ open Ġclass ĠToken Interceptor ( ĊĠĠĠ Ġprivate Ġval Ġheader Name : ĠString , ĊĠĠĠ Ġprotected Ġopen Ġval Ġheader Value : ĠString Ċ ) Ġ: ĠInter ceptor Ġ{ ĊĊĠĠĠ Ġconstructor ( scheme : ĠScheme , Ġvalue : ĠString ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġscheme . field , ĊĠĠĠĠĠĠĠ Ġscheme . scheme . format ( value ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNO _ AUTH _ HEADER _ FIELD Ġ= Ġ" No - authentication " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNO _ AUTH Ġ= Ġ"$ NO _ AUTH _ HEADER _ FIELD : Ġtrue " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request (). edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . header ( NO _ AUTH _ HEADER _ FIELD ) Ġ== Ġnull Ġ-> Ġadd Header ( header Name , Ġheader Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġremove Header ( NO _ AUTH _ HEADER _ FIELD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġchain . proceed ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun ĠRequest . edit ( builder : ĠRequest . Builder .( Request ) Ġ-> ĠUnit ): ĠRequest Ġ= ĠnewBuilder () ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġbuilder ( this @ edit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġenum Ġclass ĠScheme ( val Ġfield : ĠString , Ġval Ġscheme : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBasic (" Authorization ", Ġ" Basic Ġ% s "), ĊĠĠĠĠĠĠĠ ĠBearer (" Authorization ", Ġ" Bearer Ġ% s "), ĊĠĠĠĠĠĠĠ ĠDigest (" Authorization ", Ġ" Digest Ġ% s "), ĊĠĠĠ Ġ} Ċ Ċ }