router, api and stuff
This commit is contained in:
parent
54ea970a3e
commit
fb633ba64f
|
@ -1,58 +0,0 @@
|
||||||
import sql from "./sql";
|
|
||||||
|
|
||||||
let cfg = {
|
|
||||||
client: {},
|
|
||||||
main: {},
|
|
||||||
websrv: {},
|
|
||||||
trigger: {}
|
|
||||||
};
|
|
||||||
let admins = [];
|
|
||||||
|
|
||||||
const read = () => new Promise((resolve, reject) => {
|
|
||||||
sql.query("select * from cfg").then(rows => {
|
|
||||||
for (let row in rows) {
|
|
||||||
cfg[rows[row].class][rows[row].key] = {
|
|
||||||
val: ((type, value) => {
|
|
||||||
switch (type) {
|
|
||||||
case "string":
|
|
||||||
return value;
|
|
||||||
case "int":
|
|
||||||
return parseInt(value);
|
|
||||||
case "bool":
|
|
||||||
return value === "true";
|
|
||||||
case "json":
|
|
||||||
return JSON.parse(value);
|
|
||||||
}
|
|
||||||
})(rows[row].type, rows[row].value),
|
|
||||||
hidden: rows[row].hidden === 1,
|
|
||||||
type: rows[row].type
|
|
||||||
}
|
|
||||||
}
|
|
||||||
loadAdmins().then(() => resolve());
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
reject("no cfg");
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
export const loadAdmins = () => new Promise((resolve, reject) => {
|
|
||||||
admins = [];
|
|
||||||
sql.query(`select * from admins`)
|
|
||||||
.then(rows => {
|
|
||||||
rows.forEach(row => {
|
|
||||||
admins.push({
|
|
||||||
id: row.id,
|
|
||||||
prefix: row.prefix,
|
|
||||||
account: row.account,
|
|
||||||
network: row.network,
|
|
||||||
level: row.level
|
|
||||||
});
|
|
||||||
});
|
|
||||||
resolve();
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
reject("keine Admins vorhanden");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
export { cfg, read, admins };
|
|
22
src/inc/router.mjs
Normal file
22
src/inc/router.mjs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
class Router {
|
||||||
|
constructor() {
|
||||||
|
this.routes = new Map();
|
||||||
|
};
|
||||||
|
route(method, args) {
|
||||||
|
this.routes.set(args[0], { method: method, f: args[1] });
|
||||||
|
console.info("route set", method, args[0]);
|
||||||
|
};
|
||||||
|
get() {
|
||||||
|
this.route("GET", arguments);
|
||||||
|
};
|
||||||
|
post() {
|
||||||
|
this.route("POST", arguments);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
const router = new Router();
|
||||||
|
export default router;
|
||||||
|
export const routes = router.routes;
|
||||||
|
|
||||||
|
Map.prototype.getRegex = function(path, method, tmp) {
|
||||||
|
return (!(tmp = [...this.entries()].filter(r => r[0].exec(path) && r[1].method.includes(method))[0])) ? false : tmp[1].f;
|
||||||
|
};
|
79
src/inc/routes/api.mjs
Normal file
79
src/inc/routes/api.mjs
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
import router from "../router";
|
||||||
|
import sql from "../sql";
|
||||||
|
import cfg from "../../../config.json";
|
||||||
|
|
||||||
|
import { mimes, queries } from "./inc/api";
|
||||||
|
|
||||||
|
router.get(/^\/api$/, (req, res) => {
|
||||||
|
res.end("api lol");
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get(/^\/api\/random(\/user\/.+|\/image|\/video|\/audio|\/)?$/, async (req, res) => {
|
||||||
|
const db = await sql;
|
||||||
|
let q = queries.random.main;
|
||||||
|
let args = [];
|
||||||
|
|
||||||
|
res.writeHead(200, { 'Content-Type': 'text/html' });
|
||||||
|
|
||||||
|
if(req.url.split[2] === "user") {
|
||||||
|
q += queries.random.where("username like ?");
|
||||||
|
args.push(req.url.split[3] || "flummi");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
q += queries.random.where(mimes[req.url.split[2]] ? mimes[req.url.split[2]].map(mime => `mime = "${mime}"`).join(" or ") : null);
|
||||||
|
|
||||||
|
db.query(q, args)
|
||||||
|
.then(rows => {
|
||||||
|
res.end(JSON.stringify(rows.length > 0 ? rows[0] : []), 'utf-8');
|
||||||
|
}).catch(err => res.end(JSON.stringify( err ), 'utf-8'));
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get(/^\/api\/p(\/[0-9]+|\/)?(\/[0-9]+)?\/?$/, async (req, res) => {
|
||||||
|
const db = await sql;
|
||||||
|
const id = parseInt(req.url.split[2]) || 99999999;
|
||||||
|
const eps = Math.min(parseInt(req.url.split[3]) || 100, 200);
|
||||||
|
db.query("select * from f0ck.items where id < ? order by id desc limit ?", [id, eps])
|
||||||
|
.then(rows => {
|
||||||
|
let items = {
|
||||||
|
"items": [],
|
||||||
|
"last": id
|
||||||
|
};
|
||||||
|
rows.forEach((e,i,a) => {
|
||||||
|
items.items.push({
|
||||||
|
"id": e.id,
|
||||||
|
"mime": e.mime
|
||||||
|
});
|
||||||
|
items.last = e.id;
|
||||||
|
});
|
||||||
|
res.writeHead(200, { 'Content-Type': 'text/html' });
|
||||||
|
res.end(JSON.stringify(items), 'utf-8');
|
||||||
|
}).catch(err => res.end(JSON.stringify( err ), 'utf-8'));
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get(/^\/api\/item\/[0-9]+$/, async (req, res) => {
|
||||||
|
const db = await sql;
|
||||||
|
db.query(queries.item, Array(3).fill(req.url.split[2]))
|
||||||
|
.then(rows => {
|
||||||
|
const data = rows[0].length > 0 ? {
|
||||||
|
...rows[0][0], ...{
|
||||||
|
thumb: `${cfg.main.url}/t/${rows[0][0].id}.png`,
|
||||||
|
next: rows[1].length ? rows[1][0].id : null,
|
||||||
|
prev: rows[2].length ? rows[2][0].id : null,
|
||||||
|
}
|
||||||
|
} : {
|
||||||
|
error: true
|
||||||
|
};
|
||||||
|
res.writeHead(200, { 'Content-Type': 'text/html' });
|
||||||
|
res.end(JSON.stringify(data), 'utf-8');
|
||||||
|
}).catch(err => res.end(JSON.stringify( err ), 'utf-8'));
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get(/^\/api\/user\/.*(\/[0-9]+)?$/, async (req, res) => {
|
||||||
|
const db = await sql;
|
||||||
|
const user = req.url.split[2];
|
||||||
|
const eps = Math.min(req.url.split[3] || 50, 50);
|
||||||
|
db.query(queries.user, [ user, eps ])
|
||||||
|
.then(rows => {
|
||||||
|
res.end(JSON.stringify(rows.length > 0 ? rows : []), 'utf-8');
|
||||||
|
}).catch(err => res.end(JSON.stringify( err ), 'utf-8'));
|
||||||
|
});
|
16
src/inc/routes/inc/api.mjs
Normal file
16
src/inc/routes/inc/api.mjs
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
export const mimes = {
|
||||||
|
image: [ "image/png", "image/gif", "image/jpeg" ],
|
||||||
|
video: [ "video/webm", "video/mp4", "video/quicktime" ],
|
||||||
|
audio: [ "audio/mpeg", "audio/flac", "audio/x-flac", "audio/ogg" ]
|
||||||
|
};
|
||||||
|
|
||||||
|
export const queries = {
|
||||||
|
random: {
|
||||||
|
main: "select id, mime, size, username, userchannel, usernetwork, stamp, dest, src from f0ck.items ",
|
||||||
|
where: where => `${where?`where ${where}`:""} order by rand() limit 1`
|
||||||
|
},
|
||||||
|
item: "select id, mime, size, src, stamp, userchannel, username, usernetwork from f0ck.items where id = ? limit 1;"
|
||||||
|
+ "select id from f0ck.items where id = (select min(id) from f0ck.items where id > ?);"
|
||||||
|
+ "select id from f0ck.items where id = (select max(id) from f0ck.items where id < ?)",
|
||||||
|
user: "select id, mime, size, src, stamp, userchannel, username, usernetwork from f0ck.items where username = ? limit ?"
|
||||||
|
};
|
5
src/inc/routes/index.mjs
Normal file
5
src/inc/routes/index.mjs
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
import router from "../router";
|
||||||
|
|
||||||
|
router.get(/^\/$/, (req, res) => {
|
||||||
|
res.end("index lol");
|
||||||
|
});
|
|
@ -1,4 +1,4 @@
|
||||||
import { admins, getLevel } from "../admin";
|
import { admins } from "../admin";
|
||||||
import vm from "vm";
|
import vm from "vm";
|
||||||
|
|
||||||
const maxoutput = 1000;
|
const maxoutput = 1000;
|
||||||
|
@ -19,15 +19,14 @@ export default bot => bot._trigger.set("sandbox_debug", new bot.trigger({
|
||||||
context.admins = admins;
|
context.admins = admins;
|
||||||
context.e = e;
|
context.e = e;
|
||||||
context.bot = bot;
|
context.bot = bot;
|
||||||
context.level = getLevel;
|
|
||||||
let output = vm.runInContext(args, vm.createContext(context));
|
let output = vm.runInContext(args, vm.createContext(context));
|
||||||
if (typeof output !== undefined && output) {
|
if (typeof output !== undefined && output) {
|
||||||
output = JSON.stringify(output);
|
output = JSON.stringify(output);
|
||||||
if (output.length > maxoutput)
|
return r.reply(output.length > maxoutput ? `holy fuck, Ausgabe wäre viel zu lang! (${output.length} Zeichen :DDDDDD)` : output);
|
||||||
return e.reply(`holy fuck, Ausgabe wäre viel zu lang! (${output.length} Zeichen :DDDDDD)`);
|
|
||||||
else
|
|
||||||
return e.reply(output);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
e.reply("false lol");
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
e.reply(err.message);
|
e.reply(err.message);
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
import cfg from "../config.json";
|
import cfg from "../config.json";
|
||||||
import sql from "./inc/sql";
|
|
||||||
import { cuffeo } from "cuffeo";
|
import { cuffeo } from "cuffeo";
|
||||||
|
|
||||||
import triggers from "./inc/trigger";
|
import triggers from "./inc/trigger";
|
||||||
import events from "./inc/events";
|
import events from "./inc/events";
|
||||||
|
|
||||||
|
import "./websrv";
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
// Chatbots
|
// Chatbots
|
||||||
const self = {
|
/*const self = {
|
||||||
_trigger: new Map(),
|
_trigger: new Map(),
|
||||||
trigger: function trigger(args) {
|
trigger: function trigger(args) {
|
||||||
this.call = args.call;
|
this.call = args.call;
|
||||||
|
@ -21,7 +22,7 @@ import events from "./inc/events";
|
||||||
bot: new cuffeo(cfg.clients)
|
bot: new cuffeo(cfg.clients)
|
||||||
};
|
};
|
||||||
triggers.forEach(mod => mod(self));
|
triggers.forEach(mod => mod(self));
|
||||||
events.forEach(event => event(self));
|
events.forEach(event => event(self));*/
|
||||||
|
|
||||||
//
|
//
|
||||||
})();
|
})();
|
||||||
|
|
14
src/websrv.mjs
Normal file
14
src/websrv.mjs
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
import http from "http";
|
||||||
|
import url from "url";
|
||||||
|
|
||||||
|
import "./inc/routes/index";
|
||||||
|
import "./inc/routes/api";
|
||||||
|
|
||||||
|
import { routes } from "./inc/router";
|
||||||
|
|
||||||
|
http.createServer((req, res, r, uri = url.parse(req.url)) => {
|
||||||
|
req.url = uri;
|
||||||
|
req.url.split = uri.pathname.split("/");
|
||||||
|
req.url.split.shift();
|
||||||
|
(!(r = routes.getRegex(req.url.pathname, req.method)) ? res.end(`404 - ${req.url.pathname}`) : r(req, res))
|
||||||
|
}).listen(1499);
|
Loading…
Reference in New Issue
Block a user