package Ġcom . cogn if ide . cog board . config . service Ċ Ċ import Ġcom . cogn if ide . cog board . config . Credentials Config . Companion . CRED ENTIAL S _ ARRAY Ċ import Ġcom . cogn if ide . cog board . config . Credentials Config . Companion . CRED ENTIAL _ ID _ PREFIX Ċ import Ġcom . cogn if ide . cog board . config . Credentials Config . Companion . CRED ENTIAL _ ID _ PROP Ċ import Ġcom . cogn if ide . cog board . config . Credentials Config . Companion . CRED ENTIAL _ LABEL _ PROP Ċ import Ġcom . cogn if ide . cog board . config . utils . Json Utils . findById Ċ import Ġcom . cogn if ide . cog board . config . utils . Json Utils . getObject Position ById Ċ import Ġcom . cogn if ide . cog board . config . utils . Json Utils . put If NotExist Ċ import Ġcom . cogn if ide . cog board . config . validation . credentials . Credentials Validator Ċ import Ġcom . cogn if ide . cog board . storage . Storage Ċ import Ġcom . cogn if ide . cog board . storage . Volume Storage Factory . credentials Ċ import Ġio . vertx . core . json . JsonArray Ċ import Ġio . vertx . core . json . JsonObject Ċ Ċ class ĠCredentials Service ( ĊĠĠĠ Ġprivate Ġval Ġstorage : ĠStorage , ĊĠĠĠ Ġprivate Ġval Ġconfig : ĠJsonObject Ġ= Ġcredentials (). load Config () Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġload Config (): ĠJsonObject Ġ= Ġcredentials (). load Config () ĊĊĠĠĠ Ġfun Ġget Credentials (): ĠJson Array Ġ= Ġcredentials (). load Config (). get JsonArray ( CRED ENTIAL S _ ARRAY ) ĊĊĠĠĠ Ġfun Ġget Credential ( credential Id : ĠString ): ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Credentials (). findById ( credential Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave ( credential : ĠJsonObject ): ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( exists ( credential )) Ġupdate ( credential ) Ġelse Ġadd ( credential ) ĊĠĠĠĠĠĠĠ Ġstorage . save Config ( config ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcredential ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexists ( credential : ĠJsonObject ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcredential Id Ġ= Ġcredential . getString ( CRED ENTIAL _ ID _ PROP ) Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġcredentials Ġ= Ġget Credentials From Config () ĊĠĠĠĠĠĠĠ Ġreturn Ġcredentials . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠJsonObject Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. any Match Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential Id Ġ== Ġit . getString ( CRED ENTIAL _ ID _ PROP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate ( credential : ĠJsonObject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Credentials Validator . validate Credential ( credential )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredential Id Ġ= Ġcredential . getString ( CRED ENTIAL _ ID _ PROP ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredentials Ġ= Ġget Credentials From Config () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredential ToUpdate Ġ= Ġcredentials . findById ( credential Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredential ToUpdate . merge In ( credential , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Credentials From Config (): ĠJson Array Ġ= Ġconfig . get JsonArray ( CRED ENTIAL S _ ARRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠJson Array () ĊĊĠĠĠ Ġprivate Ġfun Ġadd ( credential : ĠJsonObject ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetId And Label ( credential ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Credentials Validator . validate Credential ( credential )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put If NotExist ( CRED ENTIAL S _ ARRAY , ĠJson Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get JsonArray ( CRED ENTIAL S _ ARRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( credential ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Id (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcredentials Ġ= Ġget Credentials From Config () ĊĠĠĠĠĠĠĠ Ġval Ġlast Id : ĠLong Ġ= Ġcredentials . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠJsonObject Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map To Long Ġ{ Ġit . getString ( CRED ENTIAL _ ID _ PROP ). replace ( CRED ENTIAL _ ID _ PREFIX , Ġ""). to Long () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse ( 0 L ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠC RED ENTIAL _ ID _ PREFIX Ġ+ Ġ( last Id Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetId And Label ( credential : ĠJsonObject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcredential . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . put ( CRED ENTIAL _ ID _ PROP , Ġgenerate Id ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . put ( CRED ENTIAL _ LABEL _ PROP , Ġit . getString ( CRED ENTIAL _ LABEL _ PROP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġit . getString ( CRED ENTIAL _ ID _ PROP )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete ( credential Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcredentials Ġ= Ġconfig . get JsonArray ( CRED ENTIAL S _ ARRAY ) Ġ?: ĠJson Array () ĊĠĠĠĠĠĠĠ Ġcredentials . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠJsonObject Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . getString ( CRED ENTIAL _ ID _ PROP ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġcredential Id Ġ== Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findFirst () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. if Present Ġ{ Ġcredentials . remove Credential ById ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġstorage . save Config ( config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠJson Array . remove Credential ById ( id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcredential Position Ġ= Ġthis . getObject Position ById ( id ) ĊĠĠĠĠĠĠĠ Ġthis . remove ( credential Position ) ĊĠĠĠ Ġ} Ċ } Ċ