Update stdlib
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / lib / puppet / parser / functions / base64.rb
index 617ba31..d610146 100644 (file)
@@ -1,3 +1,6 @@
+
+#  Please note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible. To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.
+
 module Puppet::Parser::Functions
 
   newfunction(:base64, :type => :rvalue, :doc => <<-'ENDHEREDOC') do |args|
@@ -6,14 +9,19 @@ module Puppet::Parser::Functions
 
     Usage:
 
-      $encodestring = base64('encode','thestring')
-      $decodestring = base64('decode','dGhlc3RyaW5n')
+      $encodestring = base64('encode', 'thestring')
+      $decodestring = base64('decode', 'dGhlc3RyaW5n')
+
+      # explicitly define encode/decode method: default, strict, urlsafe
+      $method = 'default'
+      $encodestring = base64('encode', 'thestring', $method)
+      $decodestring = base64('decode', 'dGhlc3RyaW5n', $method)
 
     ENDHEREDOC
 
     require 'base64'
 
-    raise Puppet::ParseError, ("base64(): Wrong number of arguments (#{args.length}; must be = 2)") unless args.length == 2
+    raise Puppet::ParseError, ("base64(): Wrong number of arguments (#{args.length}; must be >= 2)") unless args.length >= 2
 
     actions = ['encode','decode']
 
@@ -25,11 +33,37 @@ module Puppet::Parser::Functions
       raise Puppet::ParseError, ("base64(): the second argument must be a string to base64")
     end
 
+    method = ['default','strict','urlsafe']
+
+    if args.length <= 2
+      chosenMethod = 'default'
+    else
+      chosenMethod = args[2]
+    end
+
+    unless method.include?(chosenMethod)
+      raise Puppet::ParseError, ("base64(): the third argument must be one of 'default', 'strict', or 'urlsafe'")
+    end
+
     case args[0]
       when 'encode'
-        result = Base64.encode64(args[1])
+        case chosenMethod
+          when 'default'
+            result = Base64.encode64(args[1])
+          when 'strict'
+            result = Base64.strict_encode64(args[1])
+          when 'urlsafe'
+            result = Base64.urlsafe_encode64(args[1])
+        end
       when 'decode'
-        result = Base64.decode64(args[1])
+        case chosenMethod
+          when 'default'
+            result = Base64.decode64(args[1])
+          when 'strict'
+            result = Base64.strict_decode64(args[1])
+          when 'urlsafe'
+            result = Base64.urlsafe_decode64(args[1])
+        end
     end
 
     return result