added node project with auth_collector stub

This commit is contained in:
Thomas Rudin 2018-12-05 12:04:39 +01:00
parent 0e41e93be6
commit c06d689c2b
12 changed files with 186 additions and 0 deletions

View File

@ -7,5 +7,29 @@ dofile(MP .. "/persistence.lua")
dofile(MP .. "/inbox.lua") dofile(MP .. "/inbox.lua")
dofile(MP .. "/ui.lua") dofile(MP .. "/ui.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
local webmail_url = minetest.settings:get("webmail.url")
local webmail_key = minetest.settings:get("webmail.key")
if not webmail_url then error("webmail.url 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)
dofile(MP .. "/webmail.lua")
mail.webmail_init(http, webmail_url, webmail_key)
end
mail.load() mail.load()

63
webmail.lua Normal file
View File

@ -0,0 +1,63 @@
local url, key, http
local webmail = {}
-- polls the webmail server and processes the logins made there
webmail.auth_collector = function()
http.fetch({
url=url .. "/api/auth_collector",
extra_headers = { "webmailkey: " .. key },
timeout=10
}, function(res)
if res.code == 403 then
-- unauthorized, abort
minetest.log("error", "[webmail] invalid key specified!")
return
end
if res.succeeded and res.code == 200 then
local data = minetest.parse_json(res.data)
if data then
local auth_response = {}
local handler = minetest.get_auth_handler()
for _,auth in pairs(data) do
local success = false
local entry = handler.get_auth(auth.name)
if entry and minetest.check_password_entry(auth.name, entry.password, auth.password) then
success = true
end
table.insert(auth_response, {
name = auth.name,
success = success
})
end
-- send back auth response data
http.fetch({
url=url .. "/api/auth_collector",
extra_headers = { "Content-Type: application/json", "webmailkey: " .. key },
post_data = minetest.write_json(auth_response)
}, function(res)
-- stub
end)
end
end
-- execute again
minetest.after(1, webmail.auth_collector)
end)
end
mail.webmail_init = function(_http, webmail_url, webmail_key)
url = webmail_url
key = webmail_key
http = _http
-- start auth collector loop
webmail.auth_collector()
end

1
webmail/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
node_modules

19
webmail/Dockerfile Executable file
View File

@ -0,0 +1,19 @@
FROM ubuntu:artful
RUN apt-get update
# node stuff
RUN apt-get install -y nodejs npm
COPY package.json /data/
COPY src /data/src
COPY public /data/public
RUN cd /data && npm i
WORKDIR /data
EXPOSE 8080
CMD ["node", "src/index.js"]

8
webmail/Makefile Normal file
View File

@ -0,0 +1,8 @@
TAG=registry.rudin.io/x86/minetest-webmail
build:
docker build . -t $(TAG)
push:
docker push $(TAG)

15
webmail/package.json Normal file
View File

@ -0,0 +1,15 @@
{
"name": "webmail",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.18.3",
"express": "^4.16.3"
}
}

0
webmail/public/.keep Normal file
View File

View File

@ -0,0 +1,35 @@
const app = require("../app");
const bodyParser = require('body-parser')
const jsonParser = bodyParser.json()
function checkKey(req, res){
if (!req.headers["webmailkey"] || req.headers["webmailkey"] != process.env.WEBMAILKEY){
console.error("Invalid key: " + req.headers["webmailkey"]);
res.status(403).end();
return false;
}
return true;
}
app.get('/api/auth_collector', function(req, res){
if (!checkKey(req, res))
return;
setTimeout(function(){
res.json([{ name: "testuser", password: "enter" }]);
}, 3000);
});
app.post('/api/auth_collector', jsonParser, function(req, res){
if (!checkKey(req, res))
return;
//TODO
console.log(req.body);
});

1
webmail/src/api/index.js Normal file
View File

@ -0,0 +1 @@
require("./auth_collector");

7
webmail/src/app.js Normal file
View File

@ -0,0 +1,7 @@
const express = require('express')
const app = express()
app.use(express.static('public'));
app.disable('etag');
module.exports = app;

7
webmail/src/index.js Normal file
View File

@ -0,0 +1,7 @@
const app = require("./app");
require("./api");
app.listen(8080, () => console.log('Listening on http://127.0.0.1:8080'))

6
webmail/start.sh Executable file
View File

@ -0,0 +1,6 @@
#!/bin/sh
export WEBMAILKEY=myserverkey
node src/index.js