404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@18.117.151.127: ~ $
-- Copyright (C) Yichun Zhang (agentzh)


local ffi = require "ffi"
local base = require "resty.core.base"


local C = ffi.C
local ffi_string = ffi.string
local ngx = ngx
local type = type
local error = error
local floor = math.floor
local tostring = tostring
local get_string_buf = base.get_string_buf
local get_size_ptr = base.get_size_ptr
local subsystem = ngx.config.subsystem


local ngx_lua_ffi_encode_base64
local ngx_lua_ffi_decode_base64


if subsystem == "http" then
    ffi.cdef[[
    size_t ngx_http_lua_ffi_encode_base64(const unsigned char *src,
                                          size_t len, unsigned char *dst,
                                          int no_padding);

    int ngx_http_lua_ffi_decode_base64(const unsigned char *src,
                                       size_t len, unsigned char *dst,
                                       size_t *dlen);
    ]]

    ngx_lua_ffi_encode_base64 = C.ngx_http_lua_ffi_encode_base64
    ngx_lua_ffi_decode_base64 = C.ngx_http_lua_ffi_decode_base64

elseif subsystem == "stream" then
    ffi.cdef[[
    size_t ngx_stream_lua_ffi_encode_base64(const unsigned char *src,
                                            size_t len, unsigned char *dst,
                                            int no_padding);

    int ngx_stream_lua_ffi_decode_base64(const unsigned char *src,
                                         size_t len, unsigned char *dst,
                                         size_t *dlen);
    ]]

    ngx_lua_ffi_encode_base64 = C.ngx_stream_lua_ffi_encode_base64
    ngx_lua_ffi_decode_base64 = C.ngx_stream_lua_ffi_decode_base64
end


local function base64_encoded_length(len, no_padding)
    return no_padding and floor((len * 8 + 5) / 6) or
           floor((len + 2) / 3) * 4
end


ngx.encode_base64 = function (s, no_padding)
    if type(s) ~= 'string' then
        if not s then
            s = ''
        else
            s = tostring(s)
        end
    end

    local slen = #s
    local no_padding_bool = false;
    local no_padding_int = 0;

    if no_padding then
        if no_padding ~= true then
            local typ = type(no_padding)
            error("bad no_padding: boolean expected, got " .. typ, 2)
        end

        no_padding_bool = true
        no_padding_int  = 1;
    end

    local dlen = base64_encoded_length(slen, no_padding_bool)
    local dst = get_string_buf(dlen)
    local r_dlen = ngx_lua_ffi_encode_base64(s, slen, dst, no_padding_int)
    -- if dlen ~= r_dlen then error("discrepancy in len") end
    return ffi_string(dst, r_dlen)
end


local function base64_decoded_length(len)
    return floor((len + 3) / 4) * 3
end


ngx.decode_base64 = function (s)
    if type(s) ~= 'string' then
        error("string argument only", 2)
    end
    local slen = #s
    local dlen = base64_decoded_length(slen)
    -- print("dlen: ", tonumber(dlen))
    local dst = get_string_buf(dlen)
    local pdlen = get_size_ptr()
    local ok = ngx_lua_ffi_decode_base64(s, slen, dst, pdlen)
    if ok == 0 then
        return nil
    end
    return ffi_string(dst, pdlen[0])
end


return {
    version = base.version
}

Filemanager

Name Type Size Permission Actions
base.lua File 5.4 KB 0644
base64.lua File 3.06 KB 0644
coroutine.lua File 769 B 0644
ctx.lua File 3.71 KB 0644
exit.lua File 1.41 KB 0644
hash.lua File 3.92 KB 0644
misc.lua File 5.7 KB 0644
ndk.lua File 2.13 KB 0644
param.lua File 2.35 KB 0644
phase.lua File 1.48 KB 0644
regex.lua File 33.67 KB 0644
request.lua File 11.14 KB 0644
response.lua File 6.21 KB 0644
shdict.lua File 26.56 KB 0644
socket.lua File 7.22 KB 0644
time.lua File 4.64 KB 0644
uri.lua File 3.03 KB 0644
utils.lua File 972 B 0644
var.lua File 3.82 KB 0644
worker.lua File 3.27 KB 0644