Class: JWT::Base64

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

Overview

Base64 encoding and decoding

Class Method Summary collapse

Class Method Details

.loose_urlsafe_decode64(str) ⇒ Object



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

def loose_urlsafe_decode64(str)
  str += '=' * (4 - str.length.modulo(4))
  ::Base64.decode64(str.tr('-_', '+/'))
end

.url_decode(str) ⇒ Object

Decode a string with URL-safe Base64 complying with RFC 4648. Deprecated support for RFC 2045 remains for now. (“All line breaks or other characters not found in Table 1 must be ignored by decoding software”)



16
17
18
19
20
21
22
23
24
25
# File 'lib/jwt/base64.rb', line 16

def url_decode(str)
  ::Base64.urlsafe_decode64(str)
rescue ArgumentError => e
  raise unless e.message == 'invalid base64'
  raise Base64DecodeError, 'Invalid base64 encoding' if JWT.configuration.strict_base64_decoding

  loose_urlsafe_decode64(str).tap do
    Deprecations.warning('Invalid base64 input detected, could be because of invalid padding, trailing whitespaces or newline chars. Graceful handling of invalid input will be dropped in the next major version of ruby-jwt', only_if_valid: true)
  end
end

.url_encode(str) ⇒ Object

Encode a string with URL-safe Base64 complying with RFC 4648 (not padded).



10
11
12
# File 'lib/jwt/base64.rb', line 10

def url_encode(str)
  ::Base64.urlsafe_encode64(str, padding: false)
end