package Ġorg . radar base . output . config Ċ Ċ import Ġcom . azure . core . credential . Basic Authentication Credential Ċ import Ġcom . azure . core . util . HttpClient Options Ċ import Ġcom . azure . storage . blob . Blob ServiceClient Ċ import Ġcom . azure . storage . blob . Blob ServiceClient Builder Ċ import Ġcom . azure . storage . common . Storage Shared Key Credential Ċ import Ġorg . radar base . output . config . Re structure Config . Companion . copy Env Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . time . Duration Ċ Ċ data Ġclass ĠAzure Config ( ĊĠĠĠ Ġ/** ĠURL Ġto Ġreach Ġobject Ġstore Ġat . Ġ*/ ĊĠĠĠ Ġval Ġendpoint : ĠString , ĊĠĠĠ Ġ/** ĠName Ġof Ġthe ĠAzure ĠBlob ĠStorage Ġcontainer . Ġ*/ ĊĠĠĠ Ġval Ġcontainer : ĠString , ĊĠĠĠ Ġ/** ĠIf Ġno Ġend Offset Ġis Ġin Ġthe Ġfilename , Ġread Ġit Ġfrom Ġobject Ġmetadata . Ġ*/ ĊĠĠĠ Ġval Ġend Offset From Metadata : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġ/** ĠAzure Ġusername . Ġ*/ ĊĠĠĠ Ġval Ġusername : ĠString ?, ĊĠĠĠ Ġ/** ĠAzure Ġpassword . Ġ*/ ĊĠĠĠ Ġval Ġpassword : ĠString ?, ĊĠĠĠ Ġ/** ĠShared ĠAzure ĠBlob ĠStorage Ġaccount Ġname . Ġ*/ ĊĠĠĠ Ġval Ġaccount Name : ĠString ?, ĊĠĠĠ Ġ/** ĠShared ĠAzure ĠBlob ĠStorage Ġaccount Ġkey . Ġ*/ ĊĠĠĠ Ġval Ġaccount Key : ĠString ?, ĊĠĠĠ Ġ/** ĠAzure ĠSAS Ġtoken Ġfor Ġa Ġconfigured Ġservice . Ġ*/ ĊĠĠĠ Ġval Ġs as Token : ĠString ?, ĊĠĠĠ Ġ/** ĠHTTP Ġconnect Ġtimeout . Ġ*/ ĊĠĠĠ Ġval Ġconnect Timeout : ĠLong ? Ġ= Ġnull , ĊĠĠĠ Ġ/** ĠHTTP Ġresponse Ġtimeout . Ġ*/ ĊĠĠĠ Ġval Ġresponse Timeout : ĠLong ? Ġ= Ġnull , ĊĠĠĠ Ġ/** ĠHTTP Ġwrite Ġtimeout . Ġ*/ ĊĠĠĠ Ġval Ġwrite Timeout : ĠLong ? Ġ= Ġnull , ĊĠĠĠ Ġ/** ĠHTTP Ġread Ġtimeout . Ġ*/ ĊĠĠĠ Ġval Ġread Timeout : ĠLong ? Ġ= Ġnull , Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġcreate Azure Client (): ĠBlob ServiceClient Ġ= ĠBlob ServiceClient Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġendpoint ( endpoint ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! username . isNull OrEmpty () Ġ&& Ġ! password . isNull OrEmpty () Ġ-> Ġcredential ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBasic Authentication Credential ( username , Ġpassword ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! account Name . isNull OrEmpty () Ġ&& Ġ! account Key . isNull OrEmpty () Ġ-> Ġcredential ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStorage Shared Key Credential ( account Name , Ġaccount Key ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! sas Token . isNull OrEmpty () Ġ-> Ġs as Token ( sas Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlogger . warn (" No ĠAzure Ġcredentials Ġsupplied . ĠAss uming Ġa Ġpublic Ġblob Ġstorage .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient Options ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpClient Options (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Timeout Ġ= Ġthis @ Azure Config . connect Timeout . to Duration OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Timeout Ġ= Ġthis @ Azure Config . response Timeout . to Duration OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Timeout Ġ= Ġthis @ Azure Config . write Timeout . to Duration OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Timeout Ġ= Ġthis @ Azure Config . read Timeout . to Duration OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}. build Client () ĊĊĠĠĠ Ġfun Ġwith Env ( prefix : ĠString ): ĠAzure Config Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ. copy Env ("${ prefix } AZURE _ USERNAME ") Ġ{ Ġcopy ( username Ġ= Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. copy Env ("${ prefix } AZURE _ PASSWORD ") Ġ{ Ġcopy ( password Ġ= Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. copy Env ("${ prefix } AZURE _ ACCOUNT _ NAME ") Ġ{ Ġcopy ( account Name Ġ= Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. copy Env ("${ prefix } AZURE _ ACCOUNT _ KEY ") Ġ{ Ġcopy ( account Key Ġ= Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. copy Env ("${ prefix } AZURE _ SAS _ TOKEN ") Ġ{ Ġcopy ( sas Token Ġ= Ġit ) Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Azure Config :: class . java ) ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠLong ?. to Duration OrNull (): ĠDuration ? Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . take If Ġ{ Ġit Ġ> Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠDuration . of Seconds ( it ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ