Sha256: 31501edb10b09fd9ae1b12fe55d3f97cd90804198d0d84c62a5ec4ed45b6c496
Contents?: true
Size: 1.37 KB
Versions: 3
Compression:
Stored size: 1.37 KB
Contents
# frozen_string_literal: true require 'json' # JWT::Encode module module JWT # Encoding logic for JWT class Encode attr_reader :payload, :key, :algorithm, :header_fields, :segments def self.base64url_encode(str) Base64.encode64(str).tr('+/', '-_').gsub(/[\n=]/, '') end def initialize(payload, key, algorithm, header_fields) @payload = payload @key = key @algorithm = algorithm @header_fields = header_fields @segments = encode_segments end private def encoded_header(algorithm, header_fields) header = { 'alg' => algorithm }.merge(header_fields) Encode.base64url_encode(JSON.generate(header)) end def encoded_payload(payload) raise InvalidPayload, 'exp claim must be an integer' if payload['exp'] && payload['exp'].is_a?(Time) Encode.base64url_encode(JSON.generate(payload)) end def encoded_signature(signing_input, key, algorithm) if algorithm == 'none' '' else signature = JWT::Signature.sign(algorithm, signing_input, key) Encode.base64url_encode(signature) end end def encode_segments segments = [] segments << encoded_header(@algorithm, @header_fields) segments << encoded_payload(@payload) segments << encoded_signature(segments.join('.'), @key, @algorithm) segments.join('.') end end end
Version data entries
3 entries across 3 versions & 2 rubygems
Version | Path |
---|---|
jwt-blockstack-2.0.0.beta2 | lib/jwt/encode.rb |
jwt-blockstack-2.0.0.beta1 | lib/jwt/encode.rb |
jwt-2.0.0.beta1 | lib/jwt/encode.rb |