class AzureBlob::UserDelegationKey

:nodoc:

def expired?

def expired?
  expiration.nil? || Time.now >= (expiration - EXPIRATION_BUFFER)
end

def initialize(account_name:, signer:)

1 hours
7 hours
:nodoc:
def initialize(account_name:, signer:)
  @uri = URI.parse(
    "#{signer.host}/?restype=service&comp=userdelegationkey"
  )
  @signer = signer
  refresh
end

def refresh

def refresh
  return unless expired?
  now = Time.now.utc
  start = now.iso8601
  @expiration = (now + EXPIRATION)
  expiry = @expiration.iso8601
  content = <<-XML.gsub!(/[[:space:]]+/, " ").strip!
    <?xml version="1.0" encoding="utf-8"?>
    <KeyInfo>
        <Start>#{start}</Start>
        <Expiry>#{expiry}</Expiry>
    </KeyInfo>
  XML
  response  = Http.new(uri, signer:).post(content)
  doc = REXML::Document.new(response)
  @signed_oid  = doc.get_elements("/UserDelegationKey/SignedOid").first.get_text.to_s
  @signed_tid = doc.get_elements("/UserDelegationKey/SignedTid").first.get_text.to_s
  @signed_start = doc.get_elements("/UserDelegationKey/SignedStart").first.get_text.to_s
  @signed_expiry = doc.get_elements("/UserDelegationKey/SignedExpiry").first.get_text.to_s
  @signed_service = doc.get_elements("/UserDelegationKey/SignedService").first.get_text.to_s
  @signed_version = doc.get_elements("/UserDelegationKey/SignedVersion").first.get_text.to_s
  @user_delegation_key = Base64.decode64(doc.get_elements("/UserDelegationKey/Value").first.get_text.to_s)
end

def to_s

def to_s
  refresh
  user_delegation_key
end