6ed69d2c2f
The data format used by plugin v6.3.0 was not well suited. Here comes a new data format, with S2S informations. The plugin can automatically upgrade old format. It also continues to provide the old format, so than remote instance that did not update the plugin will still work.
54 lines
2.0 KiB
Lua
54 lines
2.0 KiB
Lua
module:set_global();
|
|
|
|
local path = require "util.paths";
|
|
local json = require "util.json";
|
|
|
|
local server_infos_dir = assert(module:get_option_string("peertubelivechat_server_infos_path", nil), "'peertubelivechat_server_infos_path' is a required option");
|
|
local current_instance_url = assert(module:get_option_string("peertubelivechat_instance_url", nil), "'peertubelivechat_instance_url' is a required option");
|
|
|
|
function discover_websocket_s2s(event)
|
|
local to_host = event.to_host;
|
|
module:log("debug", "Searching websocket s2s for remote host %s", to_host);
|
|
|
|
local f_s2s = io.open(path.join(server_infos_dir, to_host, 's2s'), "r");
|
|
if f_s2s ~= nil then
|
|
io.close(f_s2s);
|
|
module.log("debug", "Remote host is a known Peertube %s that has s2s activated, we will let legacy s2s module handle the connection", to_host);
|
|
return;
|
|
end
|
|
|
|
local f_ws_proxy = io.open(path.join(server_infos_dir, to_host, 'ws-s2s'), "r");
|
|
if f_ws_proxy == nil then
|
|
module:log("debug", "Remote host %s is not a known remote Peertube, we will let legacy s2s module handle the connection", to_host);
|
|
return;
|
|
end
|
|
local content = f_ws_proxy:read("*all");
|
|
io.close(f_ws_proxy);
|
|
|
|
local remote_ws_proxy_conf = json.decode(content);
|
|
if (not remote_ws_proxy_conf) then
|
|
module:log("error", "Remote host %s has empty ws-s2s configuration", to_host);
|
|
return;
|
|
end
|
|
if (not remote_ws_proxy_conf['url']) then
|
|
module:log("error", "Remote host %s has missing Websocket url in ws-s2s configuration", to_host);
|
|
return;
|
|
end
|
|
|
|
module:log("debug", "Found a Websocket endpoint to proxify s2s communications to remote host %s", to_host);
|
|
local properties = {};
|
|
properties["extra_headers"] = {
|
|
["peertube-livechat-ws-s2s-instance-url"] = current_instance_url;
|
|
};
|
|
properties["url"] = remote_ws_proxy_conf["url"];
|
|
return properties;
|
|
end
|
|
|
|
function module.add_host(module)
|
|
module:hook("discover-websocket-s2s", discover_websocket_s2s, -9);
|
|
end
|
|
|
|
if require"core.modulemanager".get_modules_for_host("*"):contains(module.name) then
|
|
module:add_host();
|
|
end
|