lib/submodules/ably-ruby/lib/ably/models/token_request.rb in ably-rest-1.2.2 vs lib/submodules/ably-ruby/lib/ably/models/token_request.rb in ably-rest-1.2.3

- old
+ new

@@ -2,21 +2,23 @@ # Convert token request argument to a {TokenRequest} object # # @param attributes (see #initialize) # # @return [TokenRequest] + # def self.TokenRequest(attributes) case attributes when TokenRequest return attributes else TokenRequest.new(attributes) end end - # TokenRequest is a class that stores the attributes of a token request + # Contains the properties of a request for a token to Ably. + # Tokens are generated using {Ably::Auth#requestToken}. # # Ruby {http://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. # class TokenRequest @@ -37,26 +39,47 @@ self.attributes[:timestamp] = (self.attributes[:timestamp].to_f * 1000).round end self.attributes.freeze end + # 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 +:+ + # def key_name attributes.fetch(:key_name) { raise Ably::Exceptions::InvalidTokenRequest, 'Key name is missing' } end + # 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. def ttl attributes.fetch(:ttl) / 1000 end + # 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. def capability capability_val = attributes.fetch(:capability) { raise Ably::Exceptions::InvalidTokenRequest, 'Capability is missing' } @@ -69,51 +92,89 @@ else JSON.parse(attributes.fetch(:capability)) end end + # 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. def client_id attributes[:client_id] end + # 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. def timestamp timestamp_val = attributes.fetch(:timestamp) { raise Ably::Exceptions::InvalidTokenRequest, 'Timestamp is missing' } as_time_from_epoch(timestamp_val, granularity: :ms) end + # 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. def nonce attributes.fetch(:nonce) { raise Ably::Exceptions::InvalidTokenRequest, 'Nonce is missing' } end + # The Message Authentication Code for this request. + # # @!attribute [r] mac + # + # @spec TE2 + # # @return [String] the Message Authentication Code for this request. See the - # {https://www.ably.com/docs Ably Authentication documentation} for more details. + # def mac attributes.fetch(:mac) { raise Ably::Exceptions::InvalidTokenRequest, 'MAC is missing' } end # Requests that the token is always persisted + # # @api private # def persisted attributes[:persisted] end # @!attribute [r] attributes + # # @return [Hash] the token request Hash object ruby'fied to use symbolized keys + # def attributes @hash_object end + + # A static factory method to create a TokenRequest object from a deserialized TokenRequest-like object or a JSON + # stringified TokenRequest object. This method is provided to minimize bugs as a result of differing types by platform + # for fields such as timestamp or ttl. For example, in Ruby ttl in the TokenRequest object is exposed in seconds as + # that is idiomatic for the language, yet when serialized to JSON using to_json it is automatically converted to + # the Ably standard which is milliseconds. By using the fromJson() method when constructing a TokenRequest object, + # Ably ensures that all fields are consistently serialized and deserialized across platforms. + # + # @overload from_json(json_like_object) + # @spec TE6 + # @param json_like_object [Hash, String] A deserialized TokenRequest-like object or a JSON stringified TokenRequest object to create a TokenRequest. + # + # @return [Ably::Models::TokenRequest] An Ably token request object. + # end end