class JWT::Encode
Encoding logic for JWT
def combine(*parts)
def combine(*parts) parts.join('.') end
def encode_data(data)
def encode_data(data) ::JWT::Base64.url_encode(JWT::JSON.generate(data)) end
def encode_header
def encode_header encode_data(@headers) end
def encode_payload
def encode_payload encode_data(@payload) end
def encode_signature
def encode_signature ::JWT::Base64.url_encode(signature) end
def encoded_header
def encoded_header @encoded_header ||= encode_header end
def encoded_header_and_payload
def encoded_header_and_payload @encoded_header_and_payload ||= combine(encoded_header, encoded_payload) end
def encoded_payload
def encoded_payload @encoded_payload ||= encode_payload end
def encoded_signature
def encoded_signature @encoded_signature ||= encode_signature end
def initialize(options)
def initialize(options) @payload = options[:payload] @key = options[:key] @algorithm = resolve_algorithm(options[:algorithm]) @headers = options[:headers].transform_keys(&:to_s) @headers[ALG_KEY] = @algorithm.alg end
def resolve_algorithm(algorithm)
def resolve_algorithm(algorithm) return algorithm if Algos.implementation?(algorithm) Algos.create(algorithm) end
def segments
def segments validate_claims! combine(encoded_header_and_payload, encoded_signature) end
def signature
def signature @algorithm.sign(data: encoded_header_and_payload, signing_key: @key) end
def validate_claims!
def validate_claims! return unless @payload.is_a?(Hash) ClaimsValidator.new(@payload).validate! end