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
-
.b64url_decode(s) ⇒ Object
Decode Base64URL.
-
.b64url_encode(s) ⇒ Object
Encode Base64URL.
-
.decode(key, token) ⇒ Object
Decode (Parse JWT).
-
.encode(key, payload) ⇒ Object
Encode (Generate JWT).
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 |