extensions/share/share.lua
Rama master · réplica de lectura del repositorio original.
local extension = ...
local logger = extension:getLogger()
local FileHttpHandler = require('jls.net.http.handler.FileHttpHandler')
local HtmlFileHttpHandler = require('jls.net.http.handler.HtmlFileHttpHandler')
local ProxyHttpHandler = require('jls.net.http.handler.ProxyHttpHandler')
local WebDavHttpHandler = require('jls.net.http.handler.WebDavHttpHandler')
local utils = require('lha.utils')
local webBaseAddons = extension:require('web-base.addons', true)
webBaseAddons.register(extension)
local function isValidPath(name)
if not name or name == '' or name == 'engine' or name == 'things' then
logger:warn('Invalid share name "%s"', name)
return false
end
return true
end
extension:subscribeEvent('startup', function()
local configuration = extension:getConfiguration()
if configuration.shares then
for _, share in ipairs(configuration.shares) do
local dir = utils.getAbsoluteFile(share.dir or 'share', extension:getEngine():getWorkDirectory())
if not dir:exists() then
logger:warn('Share directory "%s" not found', dir)
elseif not dir:isDirectory() then
logger:warn('Invalid share directory "%s"', dir)
end
if isValidPath(share.name) then
logger:info('Share directory "%s" on "/%s"', dir, share.name)
local path = '/'..share.name..'/(.*)'
if share.mode == 'HTML' then
extension:addContext(path, HtmlFileHttpHandler:new(dir, share.permissions))
elseif share.mode == 'WebDAV' then
extension:addContext(path, WebDavHttpHandler:new(dir, share.permissions))
else
extension:addContext(path, FileHttpHandler:new(dir, share.permissions))
end
end
end
end
if configuration.proxies then
for _, proxy in ipairs(configuration.proxies) do
if isValidPath(proxy.name) and proxy.url then
logger:info('Reverse proxy to "%s" on "%s"', proxy.url, proxy.name)
local path = '/'..proxy.name..'/(.*)'
local proxyHttpHandler = ProxyHttpHandler:new():configureReverse(proxy.url)
if proxy.noReferer then
function proxyHttpHandler:prepareRequest(exchange, request, url)
request:setHeader('origin')
request:setHeader('referer')
request:setHeader('sec-fetch-dest')
request:setHeader('sec-fetch-mode')
request:setHeader('sec-fetch-site')
end
end
extension:addContext(path, proxyHttpHandler)
end
end
end
end)