Class: BetterRecord::JWT

Inherits:
Object show all
Defined in:
lib/better_record/jwt.rb

Defined Under Namespace

Modules: ControllerMethods

Constant Summary collapse

CHARACTERS =
[*('a'..'z'), *('A'..'Z'), *(0..9).map(&:to_s), *'!@#$%^&*()'.split('')]
DEFAULT_OPTIONS =
{ enc:  'A256GCM', alg: 'dir', zip: 'DEF' }

Class Method Summary collapse

Class Method Details

.decode(payload, sig_key = nil, enc_key = nil) ⇒ Object Also known as: read, decrypt, deflate



55
56
57
# File 'lib/better_record/jwt.rb', line 55

def decode(payload, sig_key = nil, enc_key = nil)
  ::JWT.decode(::JWE.decrypt(payload, (enc_key || encryption_key)), (sig_key || signing_key), true, algorithm: 'HS512')[0]
end

.encode(payload, sig_key = nil, enc_key = nil, options = nil) ⇒ Object Also known as: create, encrypt, inflate



47
48
49
# File 'lib/better_record/jwt.rb', line 47

def encode(payload, sig_key = nil, enc_key = nil, options = nil)
  ::JWE.encrypt ::JWT.encode(payload, (sig_key || signing_key), 'HS512'), (enc_key || encryption_key), (options || encrypt_options)
end

.encrypt_optionsObject



39
40
41
# File 'lib/better_record/jwt.rb', line 39

def encrypt_options
  @encrypt_options ||= DEFAULT_OPTIONS
end

.encrypt_options=(options) ⇒ Object



43
44
45
# File 'lib/better_record/jwt.rb', line 43

def encrypt_options=(options)
  @encrypt_options = options || DEFAULT_OPTIONS
end

.encryption_keyObject



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

def encryption_key
  @encryption_key ||= gen_encryption_key
end

.encryption_key=(key) ⇒ Object



23
24
25
# File 'lib/better_record/jwt.rb', line 23

def encryption_key=(key)
  @encryption_key = key || gen_encryption_key
end

.gen_encryption_keyObject



15
16
17
# File 'lib/better_record/jwt.rb', line 15

def gen_encryption_key
  SecureRandom.random_bytes(32)
end

.gen_signing_key(length = 50) ⇒ Object



27
28
29
# File 'lib/better_record/jwt.rb', line 27

def gen_signing_key(length = 50)
  (0...length).map { CHARACTERS[rand(CHARACTERS.length)] }.join
end

.signing_keyObject



31
32
33
# File 'lib/better_record/jwt.rb', line 31

def signing_key
  @signing_key ||= gen_signing_key
end

.signing_key=(key) ⇒ Object



35
36
37
# File 'lib/better_record/jwt.rb', line 35

def signing_key=(key)
  @signing_key = key || gen_signing_key
end