Class: AzureBlob::UserDelegationKey

Inherits:
Object
  • Object
show all
Defined in:
lib/azure_blob/user_delegation_key.rb

Overview

:nodoc:

Constant Summary collapse

EXPIRATION =

7 hours

25200
EXPIRATION_BUFFER =

1 hours

3600

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(account_name:, signer:) ⇒ UserDelegationKey

Returns a new instance of UserDelegationKey.



7
8
9
10
11
12
13
14
15
# File 'lib/azure_blob/user_delegation_key.rb', line 7

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

  @signer = signer

  refresh
end

Instance Attribute Details

#signed_expiryObject (readonly)

Returns the value of attribute signed_expiry.



52
53
54
# File 'lib/azure_blob/user_delegation_key.rb', line 52

def signed_expiry
  @signed_expiry
end

#signed_oidObject (readonly)

Returns the value of attribute signed_oid.



52
53
54
# File 'lib/azure_blob/user_delegation_key.rb', line 52

def signed_oid
  @signed_oid
end

#signed_serviceObject (readonly)

Returns the value of attribute signed_service.



52
53
54
# File 'lib/azure_blob/user_delegation_key.rb', line 52

def signed_service
  @signed_service
end

#signed_startObject (readonly)

Returns the value of attribute signed_start.



52
53
54
# File 'lib/azure_blob/user_delegation_key.rb', line 52

def signed_start
  @signed_start
end

#signed_tidObject (readonly)

Returns the value of attribute signed_tid.



52
53
54
# File 'lib/azure_blob/user_delegation_key.rb', line 52

def signed_tid
  @signed_tid
end

#signed_versionObject (readonly)

Returns the value of attribute signed_version.



52
53
54
# File 'lib/azure_blob/user_delegation_key.rb', line 52

def signed_version
  @signed_version
end

Instance Method Details

#refreshObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/azure_blob/user_delegation_key.rb', line 22

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

#to_sObject



17
18
19
20
# File 'lib/azure_blob/user_delegation_key.rb', line 17

def to_s
  refresh
  user_delegation_key
end