class HmacSignature::Request
Constants
- ISO8601
- VALID_METHODS
Attributes
credentials[R]
method[R]
params[R]
path[R]
Public Class Methods
new(method, path, params, credentials=nil)
click to toggle source
# File lib/hmac_signature/request.rb, line 10 def initialize method, path, params, credentials=nil raise ArgumentError, "Expected string" unless method.is_a?(String) && !method.empty? raise ArgumentError, "Expected string" unless path.is_a?(String) && !path.empty? raise ArgumentError, "Expected hash" unless params.is_a?(Hash) raise ArgumentError, "Expected credentials" unless credentials.nil? || credentials.is_a?(HmacSignature::Credentials) @method = method @path = path @params = params @credentials = credentials end
Public Instance Methods
authenticate() { |key| ... }
click to toggle source
# File lib/hmac_signature/request.rb, line 32 def authenticate raise ArgumentError, "Block required" unless block_given? raise AuthenticationError, "Missing parameter: auth_key" unless credentials.key token = yield credentials.key unless token raise AuthenticationError, "Unknown key" end authenticate_by_token! token return token end
authenticate_by_token(token)
click to toggle source
# File lib/hmac_signature/request.rb, line 43 def authenticate_by_token token authenticate_by_token! token rescue false end
authenticate_by_token!(token)
click to toggle source
# File lib/hmac_signature/request.rb, line 49 def authenticate_by_token! token raise HmacSignature::AuthenticationError, "Credentials required" unless credentials if token.secret.nil? || token.secret.empty? raise ArgumentError, "Provided token is missing secret" end # authenticates version raise HmacSignature::AuthenticationError, "Version required" unless credentials.version raise HmacSignature::AuthenticationError, "Version not supported" unless credentials.version == '1.0' # authenticates expiry raise HmacSignature::AuthenticationError, "Expiration timestamp required" unless credentials.expiry if Time.now.utc.to_i > credentials.expiry.to_i raise HmacSignature::AuthenticationError, "Timestamp expired: Given timestamp "\ "(#{Time.at(credentials.expiry.to_i).utc.strftime(ISO8601)}) "\ "has expired. The current server time is "\ "(#{Time.now.utc.strftime(ISO8601)})" end # authenticates signature valid_signature = generate_signature(token, credentials.expiry, credentials.version) unless credentials.signature == valid_signature.to_s raise HmacSignature::AuthenticationError, "Invalid signature: you should have "\ "sent HmacSHA256Hex(#{valid_signature.string_to_sign.inspect}, your_secret_key)"\ ", but you sent #{credentials.signature.inspect}" end true end
sign(token, expires_in=600)
click to toggle source
# File lib/hmac_signature/request.rb, line 22 def sign token, expires_in=600 expires_at = (Time.now.utc.to_i + expires_in).to_s version = Signature::VERSION key = token.key secret = token.secret signature = generate_signature(token, expires_at, version).to_s HmacSignature::Credentials.new(key, expires_at, version, signature) end
Private Instance Methods
generate_signature(token, timestamp, version)
click to toggle source
# File lib/hmac_signature/request.rb, line 82 def generate_signature token, timestamp, version HmacSignature::Signature.new(method, path, params, timestamp, version, token.key, token.secret) end