From 3bac48cebb79c5359e2b1d6605d771d62861b951 Mon Sep 17 00:00:00 2001 From: Mark Crane Date: Mon, 6 Apr 2015 06:25:42 +0000 Subject: [PATCH] Add the original base64 class I was using as an alternative if mime is not loaded. --- .../scripts/resources/functions/base64.lua | 18 +++++++--- .../resources/functions/base64_alex.lua | 36 +++++++++++++++++++ 2 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 resources/install/scripts/resources/functions/base64_alex.lua diff --git a/resources/install/scripts/resources/functions/base64.lua b/resources/install/scripts/resources/functions/base64.lua index 2bbce53729..b83a116bbd 100644 --- a/resources/install/scripts/resources/functions/base64.lua +++ b/resources/install/scripts/resources/functions/base64.lua @@ -2,12 +2,22 @@ base64 = {} -- encode a string and return a base64 string function base64.encode(s) - local mime = require("mime"); - return (mime.b64(s)); + if package.loaded["mime"] then + local mime = require("mime"); + return (mime.b64(s)); + else + dofile(scripts_dir.."/resources/functions/base64_alex.lua"); + return base64.enc(s); + end end --decode a base64 string and return a string function base64.decode(s) - local mime = require("mime"); - return (mime.unb64(s)); + if package.loaded["mime"] then + local mime = require("mime"); + return (mime.unb64(s)); + else + dofile(scripts_dir.."/resources/functions/base64_alex.lua"); + return base64.dec(s); + end end \ No newline at end of file diff --git a/resources/install/scripts/resources/functions/base64_alex.lua b/resources/install/scripts/resources/functions/base64_alex.lua new file mode 100644 index 0000000000..4eb02d20b1 --- /dev/null +++ b/resources/install/scripts/resources/functions/base64_alex.lua @@ -0,0 +1,36 @@ +-- Lua 5.1+ base64 v3.0 (c) 2009 by Alex Kloss +-- licensed under the terms of the LGPL2 +--base64={} + +-- character table string +local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + +-- encoding +function base64.enc(data) + return ((data:gsub('.', function(x) + local r,b='',x:byte() + for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end + return r; + end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) + if (#x < 6) then return '' end + local c=0 + for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end + return b:sub(c+1,c+1) + end)..({ '', '==', '=' })[#data%3+1]) +end + +-- decoding +function base64.dec(data) + data = string.gsub(data, '[^'..b..'=]', '') + return (data:gsub('.', function(x) + if (x == '=') then return '' end + local r,f='',(b:find(x)-1) + for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end + return r; + end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x) + if (#x ~= 8) then return '' end + local c=0 + for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end + return string.char(c) + end)) +end \ No newline at end of file