/* ĊĠĠ ĠCopyright Ġ 2 0 1 7 - 2 0 2 1 ĠChar les ĠK orn . ĊĊĠĠ Ġ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 Ġb ate ct . docker . pull Ċ Ċ import Ġb ate ct . docker . Json Ċ import Ġb ate ct . logging . Logger Ċ import Ġb ate ct . os . Process Runner Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ Ċ class ĠRegistry Credentials Configuration File ( ĊĠĠĠ Ġprivate Ġval Ġprocess Runner : ĠProcess Runner , ĊĠĠĠ Ġconfig Directory : ĠPath , ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger , Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġconfig FilePath Ġ= Ġconfig Directory . resolve (" config . json "). to AbsolutePath () ĊĠĠĠ Ġprivate Ġval Ġconfig Ġby Ġlazy Ġ{ Ġload ConfigFile () Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload ConfigFile (): ĠDocker ConfigFile Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage (" Loading ĠDocker Ġconfiguration Ġfile .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata (" path ", Ġconfig FilePath ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Files . not Exists ( config FilePath )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage (" Docker Ġconfiguration Ġfile Ġdoes Ġnot Ġexist , Ġnot Ġattempting Ġto Ġload Ġit . ĠWill Ġuse Ġempty Ġconfiguration Ġinstead .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDocker ConfigFile () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġconfig FileContent Ġ= ĠFiles . read All Bytes ( config FilePath ). toString ( Charset . default Charset ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠJson . ign oring Unknown Keys . decode FromString ( Docker ConfigFile . serializer (), Ġconfig FileContent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Credentials For Registry ( registry : ĠString ): ĠRegistry Credentials Source ? Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage (" Getting Ġcredentials Ġfor Ġregistry .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata (" registry ", Ġregistry ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcred Helper For Registry Ġ= Ġconfig . cred Helpers [ registry ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cred Helper For Registry Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage (" Configuration Ġfile Ġhas Ġa Ġregistry - specific Ġcred Helper Ġentry .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata (" registry ", Ġregistry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata (" cred Helper ", Ġcred Helper For Registry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHelper Based Credentials Source (" docker - credential -$ cred Helper For Registry ", Ġregistry , Ġprocess Runner ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( config . creds Store Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreds Store Ġ= Ġconfig . creds Store !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage (" Configuration Ġfile Ġhas Ġglobal Ġcreds Store Ġconfigured Ġand Ġthere Ġis Ġno Ġregistry - specific Ġcred Helper Ġentry .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata (" creds Store ", Ġcreds Store ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHelper Based Credentials Source (" docker - credential -$ creds Store ", Ġregistry , Ġprocess Runner ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġauth For Registry Ġ= Ġconfig . auth s [ registry ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( auth For Registry Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠImport ant : Ġdon 't Ġlog Ġthe Ġ' auth ' Ġvalue , Ġas Ġthat Ġcontains Ġeither Ġa Ġpassword Ġor Ġa Ġtoken . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage (" Configuration Ġfile Ġhas Ġa Ġregistry - specific Ġauth s Ġentry Ġand Ġthere Ġis Ġno Ġglobal Ġcreds Store Ġnor Ġa Ġregistry - specific Ġcred Helper Ġentry .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata (" registry ", Ġregistry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( auth For Registry . auth Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage (" Configuration Ġfile Ġhas Ġno Ġ' auth ' Ġvalue Ġwithin Ġ' auth s ' Ġentry Ġfor Ġregistry , Ġwill Ġnot Ġreturn Ġany Ġcredentials .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata (" registry ", Ġregistry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBasic Credentials Source ( auth For Registry . auth , Ġregistry ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage (" Configuration Ġfile Ġhas Ġno Ġglobal Ġcreds Store , Ġand Ġregistry Ġdoes Ġnot Ġhave Ġa Ġcred Helper Ġentry Ġor Ġan Ġauth s Ġentry .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata (" registry ", Ġregistry ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġprivate Ġdata Ġclass ĠDocker ConfigFile ( ĊĠĠĠĠĠĠĠ Ġval Ġauth s : ĠMap < String , ĠDocker Auth > Ġ= Ġempty Map (), ĊĠĠĠĠĠĠĠ Ġval Ġcred Helpers : ĠMap < String , ĠString > Ġ= Ġempty Map (), ĊĠĠĠĠĠĠĠ Ġval Ġcreds Store : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġprivate Ġdata Ġclass ĠDocker Auth ( ĊĠĠĠĠĠĠĠ Ġval Ġauth : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) Ċ } Ċ