Sha256: b7956acfa816ab47bcd2fcc48d664240cd6917b72fb8778794f841cd00e1c7da
Contents?: true
Size: 1.45 KB
Versions: 3
Compression:
Stored size: 1.45 KB
Contents
# frozen_string_literal: true require_relative './algos' require_relative './claims_validator' # JWT::Encode module module JWT # Encoding logic for JWT class Encode ALG_NONE = 'none' ALG_KEY = 'alg' def initialize(options) @payload = options[:payload] @key = options[:key] _, @algorithm = Algos.find(options[:algorithm]) @headers = options[:headers].transform_keys(&:to_s) end def segments @segments ||= combine(encoded_header_and_payload, encoded_signature) end private def encoded_header @encoded_header ||= encode_header end def encoded_payload @encoded_payload ||= encode_payload end def encoded_signature @encoded_signature ||= encode_signature end def encoded_header_and_payload @encoded_header_and_payload ||= combine(encoded_header, encoded_payload) end def encode_header @headers[ALG_KEY] = @algorithm encode(@headers) end def encode_payload if @payload.is_a?(Hash) ClaimsValidator.new(@payload).validate! end encode(@payload) end def encode_signature return '' if @algorithm == ALG_NONE Base64.urlsafe_encode64(JWT::Signature.sign(@algorithm, encoded_header_and_payload, @key), padding: false) end def encode(data) Base64.urlsafe_encode64(JWT::JSON.generate(data), padding: false) end def combine(*parts) parts.join('.') end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
jwt-2.4.1 | lib/jwt/encode.rb |
jwt-2.4.0 | lib/jwt/encode.rb |
jwt-2.4.0.beta1 | lib/jwt/encode.rb |