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)); };