package Ġdev . tm soft . lib . vault Ċ Ċ import Ġio . ktor . client . HttpClient Ċ import Ġio . ktor . client . engine . c io . C IO Ċ import Ġio . ktor . client . features . Client RequestException Ċ import Ġio . ktor . client . features . default Request Ċ import Ġio . ktor . client . features . json . Json Feature Ċ import Ġio . ktor . client . features . json . serializer . Kotlin x Serializer Ċ import Ġio . ktor . client . request . delete Ċ import Ġio . ktor . client . request . get Ċ import Ġio . ktor . client . request . header Ċ import Ġio . ktor . client . request . post Ċ import Ġio . ktor . http . ContentType Ċ import Ġkotlinx . serialization . Serial Name Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ private Ġconst Ġval ĠLIST _ KEY Ġ= Ġ" keys " Ċ private Ġconst Ġval ĠAUTH _ HEADER Ġ= Ġ" X - Vault - Token " Ċ Ċ class ĠVault API ( domain : ĠString , Ġprivate Ġval Ġtoken : ĠString ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdomain : ĠString ĊĠĠĠ Ġprivate Ġval Ġlogger Ġby Ġlazy Ġ{ ĠLoggerFactory . getLogger ( java Class ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġvault Client Ġ= ĠHttpClient ( C IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault Request Ġ{ Ġ// Ġthis : ĠHttpRequest Builder Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader ( AUTH _ HEADER , Ġtoken ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinstall ( Json Feature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccept ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠKotlin x Serializer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlinx . serialization . json . Json Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Len ient Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġignore Unknown Keys Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . domain Ġ= Ġdomain . trim ('/') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġlist Keys ( namespace : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecret Ġ= Ġvault Client . get < Secret List Keys >(" $ domain / v 1 /$ namespace ? list = true ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecret . data . get OrDefault ( LIST _ KEY , ĠlistOf ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠClient RequestException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Vault Ġrequest Ġerror : Ġ${ ignore . message } Ġ${ ignore . stack Trace ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġsuspend Ġfun Ġread ( namespace : ĠString , Ġkey : ĠString ): ĠMap < String , ĠString ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecret Ġ= Ġvault Client . get < Secret >(" $ domain / v 1 /$ namespace /$ key ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecret . data ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠClient RequestException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Vault Ġrequest Ġerror : Ġ${ ignore . message } Ġ${ ignore . stack Trace ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġwrite ( namespace : ĠString , Ġkey : ĠString , Ġdata : ĠMap < String , ĠString ?> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvault Client . post < String >(" $ domain / v 1 /$ namespace /$ key ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠClient RequestException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Vault Ġrequest Ġerror : Ġ${ ignore . message } Ġ${ ignore . stack Trace ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġdelete ( namespace : ĠString , Ġkey : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvault Client . delete < String >(" $ domain / v 1 /$ namespace /$ key ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠClient RequestException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Vault Ġrequest Ġerror : Ġ${ ignore . message } Ġ${ ignore . stack Trace ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ @ Serializable Ċ private Ġdata Ġclass ĠSecret List Keys ( ĊĠĠĠ Ġ@ Serial Name (" request _ id ") ĊĠĠĠ Ġval ĠrequestId : ĠString , ĊĠĠĠ Ġ@ Serial Name (" lease _ id ") ĊĠĠĠ Ġval Ġlease Id : ĠString , ĊĠĠĠ Ġval Ġrenew able : ĠBoolean , ĊĠĠĠ Ġ@ Serial Name (" lease _ duration ") ĊĠĠĠ Ġval Ġlease Duration : ĠInt , ĊĠĠĠ Ġval Ġdata : ĠMap < String , ĠList < String >>, ĊĠĠĠ Ġval Ġauth : ĠSecret Auth ?, ĊĠĠĠ Ġval Ġwarnings : ĠList < String >? Ċ ) Ċ Ċ @ Serializable Ċ private Ġdata Ġclass ĠSecret ( ĊĠĠĠ Ġ@ Serial Name (" request _ id ") ĊĠĠĠ Ġval ĠrequestId : ĠString , ĊĠĠĠ Ġ@ Serial Name (" lease _ id ") ĊĠĠĠ Ġval Ġlease Id : ĠString , ĊĠĠĠ Ġval Ġrenew able : ĠBoolean , ĊĠĠĠ Ġ@ Serial Name (" lease _ duration ") ĊĠĠĠ Ġval Ġlease Duration : ĠInt , ĊĠĠĠ Ġval Ġdata : ĠMap < String , ĠString ? >, ĊĠĠĠ Ġval Ġauth : ĠSecret Auth ?, ĊĠĠĠ Ġval Ġwarnings : ĠList < String >? Ċ ) Ċ Ċ @ Serializable Ċ private Ġdata Ġclass ĠSecret Auth ( ĊĠĠĠ Ġ@ Serial Name (" client _ token ") ĊĠĠĠ Ġval Ġclient Token : ĠString , ĊĠĠĠ Ġval Ġaccessor : ĠString , ĊĠĠĠ Ġval Ġpolicies : ĠList < String >, ĊĠĠĠ Ġval Ġmetadata : ĠMap < String , ĠString >, ĊĠĠĠ Ġ@ Serial Name (" lease _ duration ") ĊĠĠĠ Ġval Ġlease Duration : ĠInt , ĊĠĠĠ Ġval Ġrenew able : ĠBoolean Ċ ) ĊĊ