Skip to content

Commit

Permalink
Fix encode issue with array payload
Browse files Browse the repository at this point in the history
If a array payload is given the 'exp' claim check will be skipped.
Refacor methods to make use of instance variables and avoid multiple
method calls.

Fixes #188.
  • Loading branch information
excpt committed Sep 2, 2017
1 parent fc94a20 commit 4bed3b4
Showing 1 changed file with 12 additions and 13 deletions.
25 changes: 12 additions & 13 deletions lib/jwt/encode.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,31 +22,30 @@ def initialize(payload, key, algorithm, header_fields)

private

def encoded_header(algorithm, header_fields)
header = { 'alg' => algorithm }.merge(header_fields)
def encoded_header
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 && payload['exp'] && !payload['exp'].is_a?(Integer)
Encode.base64url_encode(JSON.generate(payload))
def encoded_payload
raise InvalidPayload, 'exp claim must be an integer' if @payload && !@payload.is_a?(Array) && @payload.key?('exp') && !@payload['exp'].is_a?(Integer)
Encode.base64url_encode(JSON.generate(@payload))
end

def encoded_signature(signing_input, key, algorithm)
if algorithm == 'none'
def encoded_signature(signing_input)
if @algorithm == 'none'
''
else
signature = JWT::Signature.sign(algorithm, signing_input, key)
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('.')
header = encoded_header
payload = encoded_payload
signature = encoded_signature([header, payload].join('.'))
[header, payload, signature].join('.')
end
end
end

0 comments on commit 4bed3b4

Please sign in to comment.