mirror of
https://github.com/kemko/liquid.git
synced 2026-01-01 15:55:40 +03:00
Base64 Decode & Encode Filters (#1450)
This commit is contained in:
@@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
## 5.0.2 (unreleased)
|
## 5.0.2 (unreleased)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
* Add `base64_encode`, `base64_decode`, `base64_url_safe_encode`, and `base64_url_safe_decode` filters (#1450) [Daniel Insley]
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
* Fix support for using a String subclass for the liquid source (#1421) [Dylan Thacker-Smith]
|
* Fix support for using a String subclass for the liquid source (#1421) [Dylan Thacker-Smith]
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'cgi'
|
require 'cgi'
|
||||||
|
require 'base64'
|
||||||
require 'bigdecimal'
|
require 'bigdecimal'
|
||||||
|
|
||||||
module Liquid
|
module Liquid
|
||||||
@@ -63,6 +64,26 @@ module Liquid
|
|||||||
result
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def base64_encode(input)
|
||||||
|
Base64.strict_encode64(input.to_s)
|
||||||
|
end
|
||||||
|
|
||||||
|
def base64_decode(input)
|
||||||
|
Base64.strict_decode64(input.to_s)
|
||||||
|
rescue ::ArgumentError
|
||||||
|
raise Liquid::ArgumentError, "invalid base64 provided to base64_decode"
|
||||||
|
end
|
||||||
|
|
||||||
|
def base64_url_safe_encode(input)
|
||||||
|
Base64.urlsafe_encode64(input.to_s)
|
||||||
|
end
|
||||||
|
|
||||||
|
def base64_url_safe_decode(input)
|
||||||
|
Base64.urlsafe_decode64(input.to_s)
|
||||||
|
rescue ::ArgumentError
|
||||||
|
raise Liquid::ArgumentError, "invalid base64 provided to base64_url_safe_decode"
|
||||||
|
end
|
||||||
|
|
||||||
def slice(input, offset, length = nil)
|
def slice(input, offset, length = nil)
|
||||||
offset = Utils.to_integer(offset)
|
offset = Utils.to_integer(offset)
|
||||||
length = length ? Utils.to_integer(length) : 1
|
length = length ? Utils.to_integer(length) : 1
|
||||||
|
|||||||
@@ -145,6 +145,40 @@ class StandardFiltersTest < Minitest::Test
|
|||||||
assert_equal('<strong>Hulk</strong>', @filters.escape_once('<strong>Hulk</strong>'))
|
assert_equal('<strong>Hulk</strong>', @filters.escape_once('<strong>Hulk</strong>'))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_base64_encode
|
||||||
|
assert_equal('b25lIHR3byB0aHJlZQ==', @filters.base64_encode('one two three'))
|
||||||
|
assert_equal('', @filters.base64_encode(nil))
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_base64_decode
|
||||||
|
assert_equal('one two three', @filters.base64_decode('b25lIHR3byB0aHJlZQ=='))
|
||||||
|
|
||||||
|
exception = assert_raises(Liquid::ArgumentError) do
|
||||||
|
@filters.base64_decode("invalidbase64")
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal('Liquid error: invalid base64 provided to base64_decode', exception.message)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_base64_url_safe_encode
|
||||||
|
assert_equal(
|
||||||
|
'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMTIzNDU2Nzg5MCAhQCMkJV4mKigpLT1fKy8_Ljo7W117fVx8',
|
||||||
|
@filters.base64_url_safe_encode('abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 !@#$%^&*()-=_+/?.:;[]{}\|')
|
||||||
|
)
|
||||||
|
assert_equal('', @filters.base64_url_safe_encode(nil))
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_base64_url_safe_decode
|
||||||
|
assert_equal(
|
||||||
|
'abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 !@#$%^&*()-=_+/?.:;[]{}\|',
|
||||||
|
@filters.base64_url_safe_decode('YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMTIzNDU2Nzg5MCAhQCMkJV4mKigpLT1fKy8_Ljo7W117fVx8')
|
||||||
|
)
|
||||||
|
exception = assert_raises(Liquid::ArgumentError) do
|
||||||
|
@filters.base64_url_safe_decode("invalidbase64")
|
||||||
|
end
|
||||||
|
assert_equal('Liquid error: invalid base64 provided to base64_url_safe_decode', exception.message)
|
||||||
|
end
|
||||||
|
|
||||||
def test_url_encode
|
def test_url_encode
|
||||||
assert_equal('foo%2B1%40example.com', @filters.url_encode('foo+1@example.com'))
|
assert_equal('foo%2B1%40example.com', @filters.url_encode('foo+1@example.com'))
|
||||||
assert_equal('1', @filters.url_encode(1))
|
assert_equal('1', @filters.url_encode(1))
|
||||||
|
|||||||
Reference in New Issue
Block a user