class Userlist::Token
Attributes
algorithm[R]
header[R]
key[R]
payload[R]
Public Class Methods
generate(user, configuration = {})
click to toggle source
# File lib/userlist/token.rb, line 3 def self.generate(user, configuration = {}) config = Userlist.config.merge(configuration) raise Userlist::ConfigurationError, :push_key unless config.push_key raise Userlist::ConfigurationError, :push_id unless config.push_id raise Userlist::ArgumentError, 'Missing required user or identifier' unless user user = Userlist::Push::User.from_payload(user, config) now = Time.now.utc.to_i header = { kid: config.push_id, alg: 'HS256' } payload = { sub: user.identifier, exp: now + config.token_lifetime, iat: now } new(payload: payload, header: header, key: config.push_key).to_s end
new(payload:, header:, key:, algorithm: 'HS256')
click to toggle source
# File lib/userlist/token.rb, line 28 def initialize(payload:, header:, key:, algorithm: 'HS256') @payload = payload @header = header @algorithm = algorithm @key = key end
Public Instance Methods
encoded_header()
click to toggle source
# File lib/userlist/token.rb, line 35 def encoded_header encode(header) end
encoded_header_and_payload()
click to toggle source
# File lib/userlist/token.rb, line 43 def encoded_header_and_payload "#{encoded_header}.#{encoded_payload}" end
encoded_payload()
click to toggle source
# File lib/userlist/token.rb, line 39 def encoded_payload encode(payload) end
signature()
click to toggle source
# File lib/userlist/token.rb, line 47 def signature digest = OpenSSL::Digest.new(algorithm.sub('HS', 'SHA')) signature = OpenSSL::HMAC.digest(digest, key, encoded_header_and_payload) encode(signature) end
to_s()
click to toggle source
# File lib/userlist/token.rb, line 54 def to_s "#{encoded_header_and_payload}.#{signature}" end
Private Instance Methods
encode(payload)
click to toggle source
# File lib/userlist/token.rb, line 62 def encode(payload) payload = JSON.generate(payload) unless payload.is_a?(String) Base64.urlsafe_encode64(payload).tr('=', '') end