Mon, 22 Nov 2021 10:40:32 +0000
Pin to latest Prosody trunk revision (eventually aiming for 0.12)
local LUA_WEB_APP_FRAMEWORK = os.getenv("LUA_WEB_APP_FRAMEWORK"); if LUA_WEB_APP_FRAMEWORK then package.path = ("%s/?.lua;%s"):format(LUA_WEB_APP_FRAMEWORK, package.path); package.cpath = ("%s/?.so;%s"):format(LUA_WEB_APP_FRAMEWORK, package.cpath); end local ssl = require "ssl"; local server = require "net.server_epoll"; local envload = require"util.envload"; local logger = require "util.logger"; package.loaded["net.server"] = server; -- COMPAT this module from Prosody can't be loaded outside of prosody local log = logger.init("main"); local config = { loglevel = "debug"; }; local logfile = io.stderr; local function log2file(source, level, message, ...) logfile:write(os.date("!%Y-%m-%dT%H:%M:%SZ"), "\t", source, "\t", level, "\t", message:format(...), "\n"); end local function init(config_file) if type(config_file) ~= "table" then setmetatable(config, { __index = { ENV = os.getenv } }); local ok, err = envload.envloadfile(config_file or "./config.lua", config); if ok then ok, err = pcall(ok); end setmetatable(config, nil); if not ok then log2file("config", "error", "Parse failed: %s", err or "Unknown error"); end else config = config_file; end local events = require"util.events".new(); -- Set up logging to stdout logger.reset(); local logsink = log2file; if config.logfile then if config.logfile == "*stdout" then logfile = io.stdout; elseif config.logfile == "*stderr" then logfile = io.stderr; else logfile = assert(io.open(config.logfile, "a")); end end if logfile then logfile:setvbuf("line"); for _, level in ipairs{"error", "warn", "info", "debug"} do logger.add_level_sink(level, logsink); if config.loglevel == level then break; end end end log("debug", "Logging ready"); require "http".init(config, events); -- Load optional extensions specified in the config for _, ext in ipairs(config.extensions or {}) do require("extensions."..ext).init(config, events); end end local function run() server.loop(); end if arg then init(...); run(); else return { init = init, run = run, }; end