99 lines
2.6 KiB
Lua
99 lines
2.6 KiB
Lua
-- SPDX-FileCopyrightText: 2008-2013 Matthew Wild
|
|
-- SPDX-FileCopyrightText: 2008-2013 Waqas Hussain
|
|
-- SPDX-FileCopyrightText: 2014 Kim Alvefur
|
|
-- SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/>
|
|
--
|
|
-- SPDX-License-Identifier: MIT
|
|
-- SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
local new_sasl = require "util.sasl".new;
|
|
local path = require "util.paths";
|
|
local json = require "util.json";
|
|
|
|
local host = module.host;
|
|
local provider = {};
|
|
|
|
local bot_conf_folder = module:get_option_string('livechat_bot_conf_folder', '');
|
|
|
|
function read_global_conf(filename)
|
|
full_path = path.join(bot_conf_folder, filename);
|
|
module:log("debug", "Reading bot global conf file", full_path);
|
|
local file = io.open(full_path, "r");
|
|
if file == nil then
|
|
module:log("debug", "Cant read bot global conf file", filename);
|
|
return nil;
|
|
end
|
|
local content = file:read("*all");
|
|
io.close(file);
|
|
|
|
local o = json.decode(content);
|
|
if (not o) then
|
|
module:log("error", "Cant json-decode bot global conf file", filename);
|
|
return nil;
|
|
end
|
|
if (not o["connection"]) then
|
|
module:log("debug", "No connection info in bot global conf file", filename);
|
|
return nil;
|
|
end
|
|
if (not o["connection"]["username"]) then
|
|
module:log("debug", "No connection.username info in bot global conf file", filename);
|
|
return nil;
|
|
end
|
|
if (not o["connection"]["password"]) then
|
|
module:log("debug", "No connection.password info in bot global conf file", filename);
|
|
return nil;
|
|
end
|
|
result = {
|
|
username= o["connection"]["username"];
|
|
password= o["connection"]["password"];
|
|
};
|
|
return result;
|
|
end
|
|
|
|
function provider.test_password(username, password)
|
|
-- FIXME: adapt the code for multiple bots
|
|
credentials = read_global_conf("moderation.json")
|
|
if (credentials and credentials["username"] == username and credentials["password"] == password) then
|
|
return true;
|
|
end
|
|
return false;
|
|
end
|
|
|
|
function provider.users()
|
|
return function()
|
|
return nil;
|
|
end
|
|
end
|
|
|
|
function provider.set_password(username, password)
|
|
return false;
|
|
end
|
|
|
|
function provider.user_exists(username)
|
|
-- FIXME: adapt the code for multiple bots
|
|
credentials = read_global_conf("moderation.json")
|
|
if (credentials and credentials["username"] == username) then
|
|
return true;
|
|
end
|
|
return false;
|
|
end
|
|
|
|
function provider.create_user(username, password)
|
|
return false;
|
|
end
|
|
|
|
function provider.delete_user(username)
|
|
return false;
|
|
end
|
|
|
|
function provider.get_sasl_handler()
|
|
return new_sasl(host, {
|
|
--luacheck: ignore 212/sasl 212/realm
|
|
plain_test = function(sasl, username, password, realm)
|
|
return provider.test_password(username, password), true;
|
|
end;
|
|
});
|
|
end
|
|
|
|
module:provides("auth", provider);
|