module Atlassian::Jwt
Constants
- CANONICAL_QUERY_SEPARATOR
- ESCAPED_CANONICAL_QUERY_SEPARATOR
- VERSION
Public Class Methods
build_claims(issuer, url, http_method, base_url = '', issued_at = nil, expires = nil, attributes = {})
click to toggle source
# File lib/atlassian/jwt.rb, line 38 def build_claims(issuer, url, http_method, base_url = '', issued_at = nil, expires = nil, attributes = {}) issued_at ||= Time.now.to_i expires ||= issued_at + 60 qsh = Digest::SHA256.hexdigest( Atlassian::Jwt.create_canonical_request(url, http_method, base_url) ) { iss: issuer, iat: issued_at, exp: expires, qsh: qsh }.merge(attributes) end
canonicalize_query_string(query)
click to toggle source
# File lib/atlassian/jwt.rb, line 61 def canonicalize_query_string(query) return '' if query.nil? || query.empty? query = CGI::parse(query) query.delete('jwt') query.each do |k, v| query[k] = v.map { |a| CGI.escape a }.join(',') if v.is_a? Array query[k].gsub!('+', '%20') # Use %20, not CGI.escape default of "+" query[k].gsub!('%7E', '~') # Unescape "~" per JS tests end query = Hash[query.sort] query.map { |k,v| "#{CGI.escape k}=#{v}" }.join(CANONICAL_QUERY_SEPARATOR) end
canonicalize_uri(uri, base_uri)
click to toggle source
# File lib/atlassian/jwt.rb, line 53 def canonicalize_uri(uri, base_uri) path = uri.path.sub(/^#{base_uri.path}/, '') path = '/' if path.nil? || path.empty? path = '/' + path unless path.start_with? '/' path.chomp!('/') if path.length > 1 path.gsub(CANONICAL_QUERY_SEPARATOR, ESCAPED_CANONICAL_QUERY_SEPARATOR) end
create_canonical_request(uri, http_method, base_uri)
click to toggle source
# File lib/atlassian/jwt.rb, line 27 def create_canonical_request(uri, http_method, base_uri) uri = URI.parse(uri) unless uri.kind_of? URI base_uri = URI.parse(base_uri) unless base_uri.kind_of? URI [ http_method.upcase, canonicalize_uri(uri, base_uri), canonicalize_query_string(uri.query) ].join(CANONICAL_QUERY_SEPARATOR) end
create_query_string_hash(uri, http_method, base_uri)
click to toggle source
# File lib/atlassian/jwt.rb, line 21 def create_query_string_hash(uri, http_method, base_uri) Digest::SHA256.hexdigest( create_canonical_request(uri, http_method, base_uri) ) end
decode(token, secret, validate = true, options = {})
click to toggle source
# File lib/atlassian/jwt.rb, line 12 def decode(token, secret, validate = true, options = {}) options = {:algorithm => 'HS256'}.merge(options) ::JWT.decode(token, secret, validate, options) end
encode(payload, secret, algorithm = 'HS256', header_fields = {})
click to toggle source
# File lib/atlassian/jwt.rb, line 17 def encode(payload, secret, algorithm = 'HS256', header_fields = {}) ::JWT.encode(payload, secret, algorithm, header_fields) end