package Ġno . nav . hel se . crypto Ċ Ċ import Ġcom . nim bus ds . j ose . j wk . J WK Ċ import Ġcom . nim bus ds . j ose . j wk . J WK Set Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ Ċ private Ġval Ġdefault Secret BasePath : ĠPath Ġ= ĠPaths . get ("/ var / run / secrets ") Ċ private Ġval Ġdefault Vault BasePath : ĠPath Ġ= ĠPaths . get ("/ var / run / secrets / na is . io / vault ") Ċ Ċ private Ġval Ġlog Ġ= ĠLoggerFactory . getLogger (" no . nav . hel se . crypto . J WK Holder ") Ċ Ċ interface ĠJ WK Holder Ġ{ ĊĠĠĠ Ġfun Ġj wk () Ġ: ĠJ WK ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Dynamic File ( filepath : ĠPath ): ĠJ WK Holder Ġ= ĠDynamic J WK From Path ( filepath ) ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Secret ( filename : ĠString ): ĠJ WK Holder Ġ= Ġfrom Dynamic File ( default Secret BasePath . resolve ( filename )) ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Vault ( filename : ĠString ): ĠJ WK Holder Ġ= Ġfrom Dynamic File ( default Vault BasePath . resolve ( filename )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠJ WK Set Holder Ġ{ ĊĠĠĠ Ġfun Ġj wk Set () Ġ: ĠJ WK Set ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Dynamic File ( filepath : ĠPath ): ĠJ WK Set Holder Ġ= ĠDynamic J WK Set From Path ( filepath ) ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Secret ( filename : ĠString ): ĠJ WK Set Holder Ġ= Ġfrom Dynamic File ( default Secret BasePath . resolve ( filename )) ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Vault ( filename : ĠString ): ĠJ WK Set Holder Ġ= Ġfrom Dynamic File ( default Vault BasePath . resolve ( filename )) ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Multiple ( var arg Ġhold ers : ĠJ WK Set Holder ) Ġ: ĠJ WK Set Holder Ġ= ĠMulti J WK Set Holder ( holders ) ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠDynamic String From Path ( val Ġfilepath : ĠPath ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġlast Data : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġfun Ġread String () Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠFiles . readString ( filepath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġlast Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" New Ġkey - data Ġloaded Ġfrom Ġ$ filepath ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Data Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" Error Ġreading Ġkey - data Ġfrom Ġ$ filepath Ġ(${ e . message }), Ġusing Ġlast Ġread Ġvalue ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlast Data !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠDynamic J WK From Path ( filepath : ĠPath ) Ġ: ĠJ WK Holder Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfile Ġ= ĠDynamic String From Path ( filepath ) ĊĠĠĠ Ġoverride Ġfun Ġj wk (): ĠJ WK Ġ= ĠJ WK . parse ( file . readString ()) Ċ } Ċ internal Ġclass ĠDynamic J WK Set From Path ( val Ġfilepath : ĠPath ) Ġ: ĠJ WK Set Holder Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfile Ġ= ĠDynamic String From Path ( filepath ) ĊĠĠĠ Ġoverride Ġfun Ġj wk Set (): ĠJ WK Set Ġ= ĠJ WK Set . parse ( file . readString ()) Ċ } Ċ internal Ġclass ĠMulti J WK Set Holder ( private Ġval Ġhold ers : ĠArray < out ĠJ WK Set Holder >) Ġ: ĠJ WK Set Holder Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġj wk Set (): ĠJ WK Set Ġ= ĠJ WK Set ( holders . flatMap Ġ{ Ġit . j wk Set (). keys Ġ}) Ċ } Ċ Ċ fun ĠJ WK . to J WK Holder () Ġ: ĠJ WK Holder Ġ= ĊĠĠĠ Ġobject Ġ: ĠJ WK Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġj wk (): ĠJ WK Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ to J WK Holder ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ fun ĠJ WK Set . to J WK Set Holder () Ġ: ĠJ WK Set Holder Ġ= ĊĠĠĠ Ġobject Ġ: ĠJ WK Set Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġj wk Set (): ĠJ WK Set Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ to J WK Set Holder ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}