Module: GoldenTicket

Defined in:
lib/golden_ticket.rb,
lib/golden_ticket/version.rb

Overview

GoldenTicket Module

Constant Summary collapse

VERSION =

Version

'0.9.12'

Class Method Summary collapse

Class Method Details

.b64url_decode(s) ⇒ Object

Decode Base64URL



19
20
21
# File 'lib/golden_ticket.rb', line 19

def self.b64url_decode s
  Base64.urlsafe_decode64 s + ('=' * (((s.length % 4) > 0) ? (4 - (s.length % 4)) : 0))
end

.b64url_encode(s) ⇒ Object

Encode Base64URL



14
15
16
# File 'lib/golden_ticket.rb', line 14

def self.b64url_encode s
  Base64.urlsafe_encode64(s).gsub('=', '').gsub "\n", ''
end

.decode(key, token) ⇒ Object

Decode (Parse JWT)



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/golden_ticket.rb', line 42

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
end

.encode(key, payload) ⇒ Object

Encode (Generate JWT)



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/golden_ticket.rb', line 24

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