split webmail part in modules
This commit is contained in:
parent
a0dd94d5c5
commit
48cb40b857
20
init.lua
20
init.lua
@ -36,13 +36,6 @@ dofile(MP .. "/gui.lua")
|
|||||||
dofile(MP .. "/onjoin.lua")
|
dofile(MP .. "/onjoin.lua")
|
||||||
|
|
||||||
-- optional webmail stuff below
|
-- 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()
|
local http = minetest.request_http_api()
|
||||||
|
|
||||||
if http then
|
if http then
|
||||||
@ -53,8 +46,17 @@ if http then
|
|||||||
if not webmail_key then error("webmail.key is not defined") end
|
if not webmail_key then error("webmail.key is not defined") end
|
||||||
|
|
||||||
print("[mail] loading webmail-component with endpoint: " .. webmail_url)
|
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)
|
mail.webmail_init(http, webmail_url, webmail_key)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
130
webmail.lua
130
webmail.lua
@ -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
45
webmail/handler_auth.lua
Normal 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
|
8
webmail/handler_delete.lua
Normal file
8
webmail/handler_delete.lua
Normal 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
|
9
webmail/handler_mark_read.lua
Normal file
9
webmail/handler_mark_read.lua
Normal 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
|
9
webmail/handler_mark_unread.lua
Normal file
9
webmail/handler_mark_unread.lua
Normal 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
|
9
webmail/handler_messages.lua
Normal file
9
webmail/handler_messages.lua
Normal 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
7
webmail/handler_send.lua
Normal 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
8
webmail/hook.lua
Normal 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
31
webmail/webmail.lua
Normal 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
|
Loading…
x
Reference in New Issue
Block a user