Dwelling/shared/util.js

61 lines
2.1 KiB
JavaScript

const moment = require("moment-timezone");
const formats = Object.freeze({
post_date: "Do MMMM YYYY HH:mm:ss z",
file_date: "YYYY-MM-DD HH:mm:ss z",
id_date: "YYYYMMDD-HHmm" });
exports.formats = formats;
function datetime(date, format=formats.post_date, timezone="UTC") {
return moment.utc(date).tz(timezone).format(format);
}
exports.datetime = datetime;
exports.getClientTimezone = ctx => {
if (ctx.header['x-client-timezone'] !== undefined)
return ctx.header['x-client-timezone'];
else
return "UTC";
};
exports.getServiceByHost = (host, service="") => {
if (host.endsWith("onion"))
switch (service) {
case "radio": return "http://wsmkgnmhmzqm7kyzv7jnzzafvgm7xlmlfvzhgorpapd5or2arnhuktqd.onion";
case "files": return "http://qf5e43nlhvnrutmikuvbdfj3cmtthokpbaxtkm6mjlslttzvtgm4fxid.onion";
case "git": return "http://qqitm7qlsbbubwmjos4cqzmvkqidg34rfnbyhuydhalep33fbvh22xyd.onion";
default: return "http://moq7aejnf4xk5k2bkaltli3ftkhusy2mbrd3pj23nrca343ku2mgk4yd.onion";
}
else if (host.endsWith("i2p"))
switch (service) {
case "radio": return "http://radio.arav.i2p";
case "files": return "http://files.arav.i2p";
case "git": return "http://git.arav.i2p";
default: return "http://arav.i2p";
}
else
switch (service) {
case "radio": return "https://radio.arav.top";
case "files": return "https://files.arav.top";
case "git": return "https://git.arav.top";
default: return "https://arav.top";
}
}
exports.rssLink = (proto, host, date, category, timezone="UTC") =>
`${proto}://${host}/mindflow#${category}-${datetime(date, formats.id_date, timezone)}`;
// This code was taken from https://www.npmjs.com/package/mysql#custom-format
// Only fourth line was changed.
exports.mysqlQueryFormat = function (query, values) {
if (!values) return query;
return query.replace(/\:(\w+)/g, function (txt, key) {
if (values[key] !== undefined)
return this.escape(values[key]);
return txt;
}.bind(this));
};