Mercurial > prosody-modules
view mod_log_json/mod_log_json.lua @ 5405:c7a5caad28ef
mod_http_oauth2: Enforce response type encoded in client_id
The client promises to only use this response type, so we should hold
them to that.
This makes it fail earlier if the response type is disabled or the
client is trying to use one that it promised not to use. Better than
failing after login and consent.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 02 May 2023 16:31:25 +0200 |
parents | 807007913f67 |
children | 0b347a7c5b5f |
line wrap: on
line source
local pack = table.pack or require "util.table".pack; local json = require "util.json"; local array = require "util.array"; local datetime = require "util.datetime".datetime; local socket = require "socket"; module:set_global(); local function sink_maker(config) local send = function () end if config.filename then local logfile = io.open(config.filename, "a+"); logfile:setvbuf("no"); function send(payload) logfile:write(payload, "\n"); end elseif config.udp_host and config.udp_port then local conn = socket.udp(); conn:setpeername(config.udp_host, config.udp_port); function send(payload) conn:send(payload); end end local format = require "util.format".format; local do_format = config.formatted_as or false; return function (source, level, message, ...) local args = pack(...); for i = 1, args.n do if args[i] == nil then args[i] = json.null; elseif type(args[i]) ~= "string" or type(args[i]) ~= "number" then args[i] = tostring(args[i]); end end args.n = nil; local payload = { datetime = datetime(), source = source, level = level, message = message, args = array(args); }; if do_format then payload[do_format] = format(message, ...) end send(json.encode(payload)); end end function module.unload() -- deregister require"core.loggingmanager".register_sink_type("json", nil); end require"core.loggingmanager".register_sink_type("json", sink_maker);