class Toktok::Token
Attributes
config[R]
jwt[R]
payload[R]
Public Class Methods
new(identity: nil, jwt: nil, payload: nil)
click to toggle source
# File lib/toktok/token.rb, line 10 def initialize(identity: nil, jwt: nil, payload: nil) @config = Toktok.config @payload = {} if jwt initialize_decode(jwt, identity) else initialize_encode(identity, payload) end end
Public Instance Methods
identity()
click to toggle source
# File lib/toktok/token.rb, line 20 def identity payload[:sub] end
Private Instance Methods
algorithm?()
click to toggle source
# File lib/toktok/token.rb, line 50 def algorithm? config.algorithm != 'none' end
decode_options(identity)
click to toggle source
# File lib/toktok/token.rb, line 44 def decode_options(identity) options = { algorithm: config.algorithm } options = options.merge(sub: identity, verify_sub: true) if identity options end
initialize_decode(jwt, identity)
click to toggle source
# File lib/toktok/token.rb, line 32 def initialize_decode(jwt, identity) @jwt = jwt options = decode_options(identity) decoded_token = JWT.decode(jwt, config.secret_key, algorithm?, options) @payload = symbolize_keys(decoded_token[0]) @header = decoded_token[1] rescue JWT::InvalidSubError raise InvalidIdentity, "Invalid identity. Expected #{identity}" rescue JWT::VerificationError raise InvalidSignature, 'Invalid or manipulated signature' end
initialize_encode(identity, extra)
click to toggle source
# File lib/toktok/token.rb, line 26 def initialize_encode(identity, extra) prepare_payload(identity, extra) normalize_payload @jwt = JWT.encode(payload, config.secret_key, config.algorithm) end
normalize_payload()
click to toggle source
Guarantee the order in which the keys are inserted
# File lib/toktok/token.rb, line 61 def normalize_payload @payload = Hash[payload.keys.sort.map { |k| [k, payload[k]] }] end
prepare_payload(identity, extra = nil)
click to toggle source
# File lib/toktok/token.rb, line 54 def prepare_payload(identity, extra = nil) @payload.merge!(symbolize_keys(extra)) if extra @payload[:sub] = identity @payload[:exp] = Time.now.to_i + config.lifetime if config.lifetime.to_i > 0 end
symbolize_keys(hash)
click to toggle source
# File lib/toktok/token.rb, line 65 def symbolize_keys(hash) Hash[hash.map { |k, v| [k.to_sym, v] }] end