/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠNet flix , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . netflix . spin n aker . ke el . clo udd river . okhttp Ċ Ċ import Ġcom . netflix . spin n aker . ke el . clo udd river . Cloud Driver Service Ċ import Ġcom . netflix . spin n aker . ke el . clo udd river . model . Credential Ċ import Ġcom . squareup . okhttp . Interceptor Ċ import Ġcom . squareup . okhttp . Response Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . Beans Exception Ċ import Ġorg . springframework . context . ApplicationContext Ċ import Ġorg . springframework . scheduling . annotation . Scheduled Ċ import Ġretrofit . Ret rofit Error Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġlocal Ġcache Ġof Ġclo udd river Ġcredentials Ġthat Ġis Ġused Ġto Ġpopulate ĠX - SP IN NA KER - ACCOUNT S Ġheader , Ġallowing Ċ Ġ* ĠKe el Ġto Ġperform Ġorche str ations Ġagainst Ġany Ġaccount . ĠSecurity Ġof Ġapplying Ġan ĠAsset Ġshould Ġbe Ġperformed Ġat ĠAsset Ċ Ġ* Ġsubmission Ġtime Ġinto ĠKe el , Ġvalidating Ġthe Ġthat Ġuser Ġwho Ġis Ġsubmitting Ġthe ĠAsset Ġhas Ġaccess Ġto Ġaffect Ġthe Ġaccounts Ċ Ġ* Ġand Ġapplications Ġthe ĠAsset Ġto uches . Ċ Ġ* Ċ Ġ* ĠTODO Ġr z Ġ- Ġshould Ġhave Ġan Ġaccount Ġprovider Ġthat Ġis Ġinjected , Ġrather Ġthan Ġeach Ġinterceptor Ġrunning Ġits Ġown Ġcache Ċ Ġ*/ Ċ class ĠAccount Pro viding Network Interceptor ( ĊĠ Ġprivate Ġval Ġapplication Context : ĠApplication Context Ċ ) Ġ: ĠInter ceptor Ġ{ ĊĊĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( java Class ) ĊĊĠ Ġprivate Ġvar Ġcredentials : ĠSet < Credential > Ġ= Ġset Of () ĊĊĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse ĊĠĠĠ Ġ= Ġchain . proceed ( chain . request (). newBuilder () ĊĠĠĠĠĠĠĠ Ġ. header (" X - SP IN NA KER - ACCOUNT S ", Ġcredentials . join ToString (",") Ġ{ Ġit . name Ġ}) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ) ĊĊĠ Ġ@ Scheduled ( initial Delay Ġ= Ġ 0 L , Ġfixed Delay Ġ= Ġ 6 0 0 0 0 L ) ĊĠ Ġfun Ġrefresh Credentials () Ġ{ ĊĠĠĠ Ġlog . info (" Refresh ing ĠClo udd river Ġcredentials ") ĊĠĠĠ Ġval Ġcloud Driver : ĠCloud Driver Service ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġcloud Driver Ġ= Ġapplication Context . getBean ( Cloud Driver Service :: class . java ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠBe ans Exception ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠNot Ġreally Ġa Ġbad Ġthing , Ġbut Ġcould Ġpotentially Ġhappen Ġduring Ġstartup . ĊĠĠĠĠĠ Ġlog . warn (" At tempted Ġto Ġretrieve Ġcredentials Ġfrom ĠCloud Driver Service , Ġbut ĠBean Ġis Ġnot Ġyet Ġconfigured ", Ġe ) ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġcredentials Ġ= Ġcloud Driver . list Credentials () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠRet rofit Error ) Ġ{ ĊĠĠĠĠĠ Ġlog . error (" Failed Ġto Ġrefresh Ġcredentials Ġfrom ĠCloud Driver Service ", Ġe ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlog . info (" Authorized Ġcredentials : Ġ${ credentials . join ToString (",") Ġ{ Ġit . name Ġ}} ") ĊĠ Ġ} Ċ } Ċ