class Proof::Token

Attributes

algorithm[R]
data[R]
expiration_date[R]
secret_key[R]
token[R]

Public Class Methods

from_data(data, secret_key=Rails.application.secrets.secret_key_base, algorithm='HS256', expiration_date=24.hours.from_now.to_i) click to toggle source
# File lib/proof/token.rb, line 20
def self.from_data(data, secret_key=Rails.application.secrets.secret_key_base, algorithm='HS256', expiration_date=24.hours.from_now.to_i)
  # Must Clone Data Hash to Avoid Side Effects
  data_immutable = data.clone.merge({ exp: expiration_date })
  token = JWT.encode(data_immutable, secret_key, algorithm)
  new(data_immutable, secret_key, algorithm, token)
end
from_token(token, secret_key=Rails.application.secrets.secret_key_base, algorithm='HS256') click to toggle source
# File lib/proof/token.rb, line 27
def self.from_token(token, secret_key=Rails.application.secrets.secret_key_base, algorithm='HS256')
  decoded = JWT.decode(token, secret_key)
  data = decoded[0]
  if algorithm != algorithm_from_header(decoded[1])
    raise JWT::IncorrectAlgorithm.new("Payload algorithm is #{algorithm_from_header(decoded[1])} but #{algorithm} was used to Encrypt.")
  end
  new(data, secret_key, algorithm, token)
end
new(data, secret_key, algorithm, token) click to toggle source
# File lib/proof/token.rb, line 7
def initialize(data, secret_key, algorithm, token)
  # Convert Raw Hash Keys into Ruby Symbols
  @data = Hash.new
  data.each do |key, value|
    @data[key.to_sym] = value
  end
  @expiration_date = @data[:exp]
  @secret_key = secret_key
  @algorithm = algorithm
  @token = token
end

Private Class Methods

algorithm_from_header(header) click to toggle source
# File lib/proof/token.rb, line 36
def self.algorithm_from_header(header)
  return header['alg']
end

Public Instance Methods

expired?() click to toggle source
# File lib/proof/token.rb, line 41
def expired?
  return @expiration_date < Time.now.to_i
end
to_s() click to toggle source
# File lib/proof/token.rb, line 45
def to_s
  return token
end