class JWT::Encode

Encoding logic for JWT

Constants

ALG_KEY

Public Class Methods

new(options) click to toggle source
# File lib/jwt/encode.rb, line 12
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

Public Instance Methods

segments() click to toggle source
# File lib/jwt/encode.rb, line 20
def segments
  validate_claims!
  combine(encoded_header_and_payload, encoded_signature)
end

Private Instance Methods

combine(*parts) click to toggle source
# File lib/jwt/encode.rb, line 75
def combine(*parts)
  parts.join('.')
end
encode_data(data) click to toggle source
# File lib/jwt/encode.rb, line 71
def encode_data(data)
  ::JWT::Base64.url_encode(JWT::JSON.generate(data))
end
encode_header() click to toggle source
# File lib/jwt/encode.rb, line 49
def encode_header
  encode_data(@headers)
end
encode_payload() click to toggle source
# File lib/jwt/encode.rb, line 53
def encode_payload
  encode_data(@payload)
end
encode_signature() click to toggle source
# File lib/jwt/encode.rb, line 67
def encode_signature
  ::JWT::Base64.url_encode(signature)
end
encoded_header() click to toggle source
# File lib/jwt/encode.rb, line 33
def encoded_header
  @encoded_header ||= encode_header
end
encoded_header_and_payload() click to toggle source
# File lib/jwt/encode.rb, line 45
def encoded_header_and_payload
  @encoded_header_and_payload ||= combine(encoded_header, encoded_payload)
end
encoded_payload() click to toggle source
# File lib/jwt/encode.rb, line 37
def encoded_payload
  @encoded_payload ||= encode_payload
end
encoded_signature() click to toggle source
# File lib/jwt/encode.rb, line 41
def encoded_signature
  @encoded_signature ||= encode_signature
end
resolve_algorithm(algorithm) click to toggle source
# File lib/jwt/encode.rb, line 27
def resolve_algorithm(algorithm)
  return algorithm if Algos.implementation?(algorithm)

  Algos.create(algorithm)
end
signature() click to toggle source
# File lib/jwt/encode.rb, line 57
def signature
  @algorithm.sign(data: encoded_header_and_payload, signing_key: @key)
end
validate_claims!() click to toggle source
# File lib/jwt/encode.rb, line 61
def validate_claims!
  return unless @payload.is_a?(Hash)

  ClaimsValidator.new(@payload).validate!
end