split webmail part in modules

This commit is contained in:
BuckarooBanzay 2020-04-23 10:00:28 +02:00
parent a0dd94d5c5
commit 48cb40b857
11 changed files with 137 additions and 139 deletions

View File

@ -36,13 +36,6 @@ dofile(MP .. "/gui.lua")
dofile(MP .. "/onjoin.lua")
-- optional webmail stuff below
--[[ minetest.conf
secure.http_mods = mail
webmail.url = http://127.0.0.1:8080
webmail.key = myserverkey
--]]
local http = minetest.request_http_api()
if http then
@ -53,8 +46,17 @@ if http then
if not webmail_key then error("webmail.key is not defined") end
print("[mail] loading webmail-component with endpoint: " .. webmail_url)
dofile(MP .. "/tan.lua")
dofile(MP .. "/webmail.lua")
mail.handlers = {}
dofile(MP .. "/webmail/tan.lua")
dofile(MP .. "/webmail/webmail.lua")
dofile(MP .. "/webmail/hook.lua")
dofile(MP .. "/webmail/handler_auth.lua")
dofile(MP .. "/webmail/handler_send.lua")
dofile(MP .. "/webmail/handler_messages.lua")
dofile(MP .. "/webmail/handler_delete.lua")
dofile(MP .. "/webmail/handler_mark_read.lua")
dofile(MP .. "/webmail/handler_mark_unread.lua")
mail.webmail_init(http, webmail_url, webmail_key)
end

View File

@ -1,130 +0,0 @@
-- false per default
local has_xban2_mod = minetest.get_modpath("xban2")
local MP = minetest.get_modpath(minetest.get_current_modname())
local Channel = dofile(MP .. "/util/channel.lua")
local channel
-- auth request from webmail
local function auth_handler(auth)
local handler = minetest.get_auth_handler()
minetest.log("action", "[webmail] auth: " .. auth.name)
local success = false
local banned = false
local message = ""
if mail.webmail.disallow_banned_players and has_xban2_mod then
-- check xban db
local xbanentry = xban.find_entry(auth.name)
if xbanentry and xbanentry.banned then
banned = true
message = "Banned!"
end
end
if not banned then
-- check tan
local tan = mail.tan[auth.name]
if tan ~= nil then
success = tan == auth.password
end
-- check auth
if not success then
local entry = handler.get_auth(auth.name)
if entry and minetest.check_password_entry(auth.name, entry.password, auth.password) then
success = true
end
end
end
channel.send({
type = "auth",
data = {
name = auth.name,
success = success,
message = message
}
})
end
-- send request from webmail
local function send_handler(sendmail)
-- send mail from webclient
minetest.log("action", "[webmail] sending mail from webclient: " .. sendmail.src .. " -> " .. sendmail.dst)
mail.send(sendmail)
end
-- get player messages request from webmail
local function get_player_messages_handler(playername)
local messages = mail.getMessages(playername)
channel.send({
type = "player-messages",
playername = playername,
data = messages
})
end
-- remove mail
local function delete_mail_handler(playername, index)
local messages = mail.getMessages(playername)
if messages[index] then
table.remove(messages, index)
end
mail.setMessages(playername, messages)
end
-- mark mail as read
local function mark_mail_read_handler(playername, index)
local messages = mail.getMessages(playername)
if messages[index] then
messages[index].unread = false
end
mail.setMessages(playername, messages)
end
-- mark mail as unread
local function mark_mail_unread_handler(playername, index)
local messages = mail.getMessages(playername)
if messages[index] then
messages[index].unread = true
end
mail.setMessages(playername, messages)
end
function mail.webmail_send_hook(m)
channel.send({
type = "new-message",
data = m
})
end
mail.register_on_receive(mail.webmail_send_hook)
function mail.webmail_init(http, url, key)
channel = Channel(http, url .. "/api/minetest/channel", {
extra_headers = { "webmailkey: " .. key }
})
channel.receive(function(data)
if data.type == "auth" then
auth_handler(data.data)
elseif data.type == "send" then
send_handler(data.data) -- { src, dst, subject, body }
elseif data.type == "delete-mail" then
delete_mail_handler(data.playername, data.index) -- index 1-based
elseif data.type == "mark-mail-read" then
mark_mail_read_handler(data.playername, data.index) -- index 1-based
elseif data.type == "mark-mail-unread" then
mark_mail_unread_handler(data.playername, data.index) -- index 1-based
elseif data.type == "player-messages" then
get_player_messages_handler(data.data)
end
end)
end

45
webmail/handler_auth.lua Normal file
View File

@ -0,0 +1,45 @@
local has_xban2_mod = minetest.get_modpath("xban2")
-- auth request from webmail
function mail.handlers.auth(auth)
local handler = minetest.get_auth_handler()
minetest.log("action", "[webmail] auth: " .. auth.name)
local success = false
local banned = false
local message = ""
if mail.webmail.disallow_banned_players and has_xban2_mod then
-- check xban db
local xbanentry = xban.find_entry(auth.name)
if xbanentry and xbanentry.banned then
banned = true
message = "Banned!"
end
end
if not banned then
-- check tan
local tan = mail.tan[auth.name]
if tan ~= nil then
success = tan == auth.password
end
-- check auth
if not success then
local entry = handler.get_auth(auth.name)
if entry and minetest.check_password_entry(auth.name, entry.password, auth.password) then
success = true
end
end
end
mail.channel.send({
type = "auth",
data = {
name = auth.name,
success = success,
message = message
}
})
end

View File

@ -0,0 +1,8 @@
-- remove mail
function mail.handlers.delete(playername, index)
local messages = mail.getMessages(playername)
if messages[index] then
table.remove(messages, index)
end
mail.setMessages(playername, messages)
end

View File

@ -0,0 +1,9 @@
-- mark mail as read
function mail.handlers.mark_read(playername, index)
local messages = mail.getMessages(playername)
if messages[index] then
messages[index].unread = false
end
mail.setMessages(playername, messages)
end

View File

@ -0,0 +1,9 @@
-- mark mail as unread
function mail.handlers.mark_unread(playername, index)
local messages = mail.getMessages(playername)
if messages[index] then
messages[index].unread = true
end
mail.setMessages(playername, messages)
end

View File

@ -0,0 +1,9 @@
-- get player messages request from webmail
function mail.handlers.messages(playername)
local messages = mail.getMessages(playername)
mail.channel.send({
type = "player-messages",
playername = playername,
data = messages
})
end

7
webmail/handler_send.lua Normal file
View File

@ -0,0 +1,7 @@
-- send request from webmail
function mail.handlers.send(sendmail)
-- send mail from webclient
minetest.log("action", "[webmail] sending mail from webclient: " .. sendmail.src .. " -> " .. sendmail.dst)
mail.send(sendmail)
end

8
webmail/hook.lua Normal file
View File

@ -0,0 +1,8 @@
function mail.webmail_send_hook(m)
mail.channel.send({
type = "new-message",
data = m
})
end
mail.register_on_receive(mail.webmail_send_hook)

31
webmail/webmail.lua Normal file
View File

@ -0,0 +1,31 @@
local MP = minetest.get_modpath(minetest.get_current_modname())
local Channel = dofile(MP .. "/util/channel.lua")
function mail.webmail_init(http, url, key)
mail.channel = Channel(http, url .. "/api/minetest/channel", {
extra_headers = { "webmailkey: " .. key }
})
mail.channel.receive(function(data)
if data.type == "auth" then
mail.handlers.auth(data.data)
elseif data.type == "send" then
mail.handler.auth(data.data) -- { src, dst, subject, body }
elseif data.type == "delete-mail" then
mail.handlers.delete(data.playername, data.index) -- index 1-based
elseif data.type == "mark-mail-read" then
mail.handlers.mark_read(data.playername, data.index) -- index 1-based
elseif data.type == "mark-mail-unread" then
mail.handlers.mark_unread(data.playername, data.index) -- index 1-based
elseif data.type == "player-messages" then
mail.handlers.messages(data.data)
end
end)
end