class Ably::Models::TokenRequest

Contains the properties of a request for a token to Ably. Tokens are generated using {Ably::Auth#requestToken}.

Ruby {ruby-doc.org/core/Time.html Time} objects are supported in place of Ably ms since epoch time fields. However, if a numeric is provided it must always be expressed in milliseconds as the Ably API always uses milliseconds for time fields.

Public Class Methods

new(attributes = {}) click to toggle source

@param attributes @option attributes [Integer] :ttl requested time to live for the token in milliseconds @option attributes [Time,Integer] :timestamp the timestamp of this request in milliseconds or as a {ruby-doc.org/core/Time.html Time} @option attributes [String] :key_name API key name of the key against which this request is made @option attributes [String] :capability JSON stringified capability of the token @option attributes [String] :client_id client ID to associate with this token @option attributes [String] :nonce an opaque nonce string of at least 16 characters @option attributes [String] :mac the Message Authentication Code for this request

# File lib/submodules/ably-ruby/lib/ably/models/token_request.rb, line 36
def initialize(attributes = {})
  @hash_object = IdiomaticRubyWrapper(attributes.clone)
  if self.attributes[:timestamp].kind_of?(Time)
    self.attributes[:timestamp] = (self.attributes[:timestamp].to_f * 1000).round
  end
  self.attributes.freeze
end

Public Instance Methods

attributes() click to toggle source

@!attribute [r] attributes

@return [Hash] the token request Hash object ruby’fied to use symbolized keys

# File lib/submodules/ably-ruby/lib/ably/models/token_request.rb, line 162
def attributes
  @hash_object
end
capability() click to toggle source

Capability of the requested Ably Token. If the Ably TokenRequest is successful, the capability of the returned Ably Token will be the intersection of this capability with the capability of the issuing key. The capabilities value is a JSON-encoded representation of the resource paths and associated operations. Read more about capabilities in the capabilities docs.

@!attribute [r] capability

@spec TE3

@return [Hash] capability of the token. If the token request is successful,

the capability of the returned token will be the intersection of
this capability with the capability of the issuing key.
# File lib/submodules/ably-ruby/lib/ably/models/token_request.rb, line 84
def capability
  capability_val = attributes.fetch(:capability) { raise Ably::Exceptions::InvalidTokenRequest, 'Capability is missing' }

  case capability_val
  when Hash
    capability_val
  when Ably::Models::IdiomaticRubyWrapper
    capability_val.as_json
  else
    JSON.parse(attributes.fetch(:capability))
  end
end
client_id() click to toggle source

The client ID to associate with the requested Ably Token. When provided, the Ably Token may only be used to perform operations on behalf of that client ID.

@!attribute [r] client_id

@spec TE2

@return [String] the client ID to associate with this token. The generated token

may be used to authenticate as this clientId.
# File lib/submodules/ably-ruby/lib/ably/models/token_request.rb, line 106
def client_id
  attributes[:client_id]
end
key_name() click to toggle source

The name of the key against which this request is made. The key name is public, whereas the key secret is private.

@!attribute [r] key_name

@spec TE2

@return [String] API key name of the key against which this request is made. An API key is made up of an API key name and secret delimited by a :

# File lib/submodules/ably-ruby/lib/ably/models/token_request.rb, line 52
def key_name
  attributes.fetch(:key_name) { raise Ably::Exceptions::InvalidTokenRequest, 'Key name is missing' }
end
mac() click to toggle source

The Message Authentication Code for this request.

@!attribute [r] mac

@spec TE2

@return [String] the Message Authentication Code for this request. See the

# File lib/submodules/ably-ruby/lib/ably/models/token_request.rb, line 146
def mac
  attributes.fetch(:mac) { raise Ably::Exceptions::InvalidTokenRequest, 'MAC is missing' }
end
nonce() click to toggle source

A cryptographically secure random string of at least 16 characters, used to ensure the TokenRequest cannot be reused.

@!attribute [r] nonce

@spec TE2

@return [String] an opaque nonce string of at least 16 characters to ensure

uniqueness of this request. Any subsequent request using the
same nonce will be rejected.
# File lib/submodules/ably-ruby/lib/ably/models/token_request.rb, line 134
def nonce
  attributes.fetch(:nonce) { raise Ably::Exceptions::InvalidTokenRequest, 'Nonce is missing' }
end
persisted() click to toggle source

Requests that the token is always persisted

@api private

# File lib/submodules/ably-ruby/lib/ably/models/token_request.rb, line 154
def persisted
  attributes[:persisted]
end
timestamp() click to toggle source

The timestamp of this request as milliseconds since the Unix epoch.

@!attribute [r] timestamp

@spec TE5

@return [Time] the timestamp of this request.

Timestamps, in conjunction with the nonce, are used to prevent
token requests from being replayed.
Timestamp when sent to Ably is in milliseconds.
# File lib/submodules/ably-ruby/lib/ably/models/token_request.rb, line 120
def timestamp
  timestamp_val = attributes.fetch(:timestamp) { raise Ably::Exceptions::InvalidTokenRequest, 'Timestamp is missing' }
  as_time_from_epoch(timestamp_val, granularity: :ms)
end
ttl() click to toggle source

Requested time to live for the Ably Token in milliseconds. If the Ably TokenRequest is successful, the TTL of the returned Ably Token is less than or equal to this value, depending on application settings and the attributes of the issuing key. The default is 60 minutes.

@!attribute [r] ttl

@spec TE4

@return [Integer] requested time to live for the token in seconds. If the token request is successful,

the TTL of the returned token will be less than or equal to this value depending on application
settings and the attributes of the issuing key.
TTL when sent to Ably is in milliseconds.
# File lib/submodules/ably-ruby/lib/ably/models/token_request.rb, line 68
def ttl
  attributes.fetch(:ttl) / 1000
end