module GoldenTicket

GoldenTicket Module

GoldenTicket Module

Constants

VERSION

Version

Public Class Methods

b64url_decode(s) click to toggle source

Decode Base64URL: Base64-decodes a String which has been encoded with b64url_encode. @param [String] s An encoded String @return [String] The decoded chunk

# File lib/golden_ticket.rb, line 26
def self.b64url_decode s
        Base64.urlsafe_decode64 s + ('=' * (((s.length % 4) > 0) ? (4 - (s.length % 4)) : 0))
end
b64url_encode(s) click to toggle source

Encode Base64URL: Base64-encodes a String in way that plays nice with URLs (no special characters). @param [String] s A chunk to encode @return [String] The encoded string

# File lib/golden_ticket.rb, line 18
def self.b64url_encode s
        Base64.urlsafe_encode64(s).gsub('=', '').gsub "\n", ''
end
decode(key, token) click to toggle source

Decode (Parse JWT): Splits up and decodes a given JSON Web Token, after having verified its authenticity. @param [String] key Used for SHA-256 hashing @param [String] token The token itself (duh…) @return [Object] The actual token information payload

# File lib/golden_ticket.rb, line 56
def self.decode key, token

        # Split Token
        header_data, payload_data, secret_data = token.split '.'

        # Verify Token
        secret = "#{header_data}.#{payload_data}"
        raise 'Invalid Token' unless secret_data == b64url_encode(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, secret))

        # Pull dat Payload
        JSON.parse(b64url_decode(payload_data)).sym_keys
end
encode(key, payload) click to toggle source

Encode (Generate JWT): Produces a JSON Web Token (JWT) by SHA-256-hashing a payload's JSON representation. @param [String] key Used for SHA-256 hashing @param [Object] payload The Actual token information payload

# File lib/golden_ticket.rb, line 34
def self.encode key, payload

        # Prep Header - Always HMAC SHA 256 / JWT
        header = { alg: 'HS256', typ: 'JWT' }
        header_data = b64url_encode header.to_json

        # Prepare Payload
        payload_data = b64url_encode payload.to_json

        # Compute Token Secret
        secret = "#{header_data}.#{payload_data}"
        secret_data = b64url_encode OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, secret)

        # Generate Token
        "#{header_data}.#{payload_data}.#{secret_data}"
end