Class: SecureWebToken
- Inherits:
-
Object
- Object
- SecureWebToken
- Defined in:
- lib/secure_web_token.rb,
lib/secure_web_token/version.rb
Constant Summary collapse
- CHARACTERS =
[ *('a'..'z'), *('A'..'Z'), *(0..9).map(&:to_s), *'!@#$%^&*()'.split('') ].freeze
- DEFAULT_OPTIONS =
{ enc: 'A256GCM', alg: 'dir', zip: 'DEF' }.freeze
- VERSION =
'0.2.1'
Class Method Summary collapse
- .decode(payload, sig_key = nil, enc_key = nil) ⇒ Object (also: read, decrypt, deflate)
- .default_encryption_key ⇒ Object
- .default_encryption_key=(value_or_callable) ⇒ Object
- .default_signing_key ⇒ Object
- .default_signing_key=(value_or_callable) ⇒ Object
- .encode(payload, sig_key = nil, enc_key = nil, options = nil) ⇒ Object (also: create, encrypt, inflate)
- .encrypt_options ⇒ Object
- .encrypt_options=(options) ⇒ Object
- .encryption_key ⇒ Object
- .encryption_key=(key) ⇒ Object
- .gen_encryption_key ⇒ Object
- .gen_signing_key(length = 50) ⇒ Object
- .signing_key ⇒ Object
- .signing_key=(key) ⇒ Object
Class Method Details
.decode(payload, sig_key = nil, enc_key = nil) ⇒ Object Also known as: read, decrypt, deflate
18 19 20 21 22 23 24 |
# File 'lib/secure_web_token.rb', line 18 def decode(payload, sig_key = nil, enc_key = nil) sig_key ||= signing_key enc_key ||= encryption_key decrypted = ::JWE.decrypt(payload, enc_key) ::JWT.decode(decrypted, sig_key, true, algorithm: 'HS512')[0] end |
.default_encryption_key ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/secure_web_token.rb', line 29 def default_encryption_key if defined?(@default_enc_key) && is_present?(@default_enc_key) if @default_enc_key.respond_to? :call then get_presence(@default_enc_key.call) || gen_encryption_key else @default_enc_key end else gen_encryption_key end end |
.default_encryption_key=(value_or_callable) ⇒ Object
41 42 43 |
# File 'lib/secure_web_token.rb', line 41 def default_encryption_key=(value_or_callable) @default_enc_key = value_or_callable end |
.default_signing_key ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/secure_web_token.rb', line 45 def default_signing_key if defined?(@default_sig_key) && is_present?(@default_sig_key) if @default_sig_key.respond_to? :call then get_presence(@default_sig_key.call) || gen_signing_key else @default_sig_key end else gen_signing_key end end |
.default_signing_key=(value_or_callable) ⇒ Object
57 58 59 |
# File 'lib/secure_web_token.rb', line 57 def default_signing_key=(value_or_callable) @default_sig_key = value_or_callable end |
.encode(payload, sig_key = nil, enc_key = nil, options = nil) ⇒ Object Also known as: create, encrypt, inflate
61 62 63 64 65 66 67 68 |
# File 'lib/secure_web_token.rb', line 61 def encode(payload, sig_key = nil, enc_key = nil, = nil) sig_key ||= signing_key enc_key ||= encryption_key ||= encoded = ::JWT.encode(payload, sig_key, 'HS512') ::JWE.encrypt(encoded, enc_key, **) end |
.encrypt_options ⇒ Object
73 74 75 |
# File 'lib/secure_web_token.rb', line 73 def ||= DEFAULT_OPTIONS end |
.encrypt_options=(options) ⇒ Object
77 78 79 |
# File 'lib/secure_web_token.rb', line 77 def () = ( || DEFAULT_OPTIONS) end |
.encryption_key ⇒ Object
81 82 83 |
# File 'lib/secure_web_token.rb', line 81 def encryption_key @encryption_key ||= default_encryption_key end |
.encryption_key=(key) ⇒ Object
85 86 87 |
# File 'lib/secure_web_token.rb', line 85 def encryption_key=(key) @encryption_key = (key || gen_encryption_key) end |
.gen_encryption_key ⇒ Object
89 90 91 |
# File 'lib/secure_web_token.rb', line 89 def gen_encryption_key SecureRandom.random_bytes(32) end |
.gen_signing_key(length = 50) ⇒ Object
93 94 95 |
# File 'lib/secure_web_token.rb', line 93 def gen_signing_key(length = 50) (0...length).map { CHARACTERS[rand(CHARACTERS.length)] }.join end |
.signing_key ⇒ Object
97 98 99 |
# File 'lib/secure_web_token.rb', line 97 def signing_key @signing_key ||= default_signing_key end |
.signing_key=(key) ⇒ Object
101 102 103 |
# File 'lib/secure_web_token.rb', line 101 def signing_key=(key) @signing_key = (key || gen_signing_key) end |