mirror of
https://codeberg.org/ashley/poke.git
synced 2024-11-16 04:48:21 +01:00
164 lines
4.5 KiB
JavaScript
164 lines
4.5 KiB
JavaScript
const {
|
|
fetcher,
|
|
core,
|
|
wiki,
|
|
musicInfo,
|
|
modules,
|
|
version,
|
|
initlog,
|
|
init,
|
|
} = require("../libpoketube-initsys.js");
|
|
const {
|
|
IsJsonString,
|
|
convert,
|
|
getFirstLine,
|
|
capitalizeFirstLetter,
|
|
turntomins,
|
|
getRandomInt,
|
|
getRandomArbitrary,
|
|
} = require("../ptutils/libpt-coreutils.js");
|
|
|
|
var http = require("https");
|
|
var ping = require("ping");
|
|
|
|
const sha384 = modules.hash;
|
|
|
|
function getJson(str) {
|
|
try {
|
|
return JSON.parse(str);
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
module.exports = function (app, config, renderTemplate) {
|
|
app.get("/app", async function (req, res) {
|
|
let tab = "";
|
|
if (req.query.tab) {
|
|
tab = `/?type=${capitalizeFirstLetter(req.query.tab)}`;
|
|
}
|
|
|
|
const invtrend = await modules.fetch(
|
|
`https://invid-api.poketube.fun/api/v1/trending${tab}`
|
|
);
|
|
const t = getJson(await invtrend.text());
|
|
|
|
let j = null;
|
|
if (req.query.mobilesearch) {
|
|
const query = req.query.mobilesearch;
|
|
const continuation = req.query.continuation || "";
|
|
const search = await modules.fetch(
|
|
`https://inner-api.poketube.fun/api/search?query=${query}&continuation=${continuation}`
|
|
);
|
|
const text = await search.text();
|
|
j = getJson(modules.toJson(text));
|
|
}
|
|
|
|
renderTemplate(res, req, "main.ejs", {
|
|
tab: req.query.tab,
|
|
isMobile: req.useragent.isMobile,
|
|
mobilesearch: req.query.mobilesearch,
|
|
inv: t,
|
|
turntomins,
|
|
continuation: req.query.continuation,
|
|
j,
|
|
});
|
|
});
|
|
|
|
app.get("/:v*?", async function (req, res) {
|
|
const uaos = req.useragent.os;
|
|
const browser = req.useragent.browser;
|
|
const isOldWindows =
|
|
(uaos === "Windows 7" || uaos === "Windows 8") && browser === "Firefox";
|
|
|
|
if (process.env.STATUSPAGE_API) {
|
|
// The following 4 are the actual values that pertain to your account and this specific metric.
|
|
var apiKey = process.env.STATUSPAGE_API;
|
|
var pageId = process.env.STATUSPAGE_PAGEID;
|
|
var metricId = process.env.STATUSPAGE_METRICID;
|
|
var apiBase = "https://api.statuspage.io/v1";
|
|
|
|
var url =
|
|
apiBase + "/pages/" + pageId + "/metrics/" + metricId + "/data.json";
|
|
var authHeader = { Authorization: "OAuth " + apiKey };
|
|
var options = { method: "POST", headers: authHeader };
|
|
|
|
var totalPoints = (60 / 5) * 24;
|
|
var epochInSeconds = Math.floor(new Date() / 1000);
|
|
|
|
var count = 0 + 1;
|
|
|
|
if (count > totalPoints) return;
|
|
|
|
var currentTimestamp = epochInSeconds - (count - 1) * 5 * 60;
|
|
|
|
// Measure server ping here
|
|
var host = "poketube.fun"; // Replace with the server you want to ping
|
|
|
|
ping.promise
|
|
.probe(host)
|
|
.then((result) => {
|
|
var ping = result.time !== "unknown" ? parseInt(result.time) : -1;
|
|
|
|
ping = Math.min(Math.max(ping, 20), 250);
|
|
|
|
var data = {
|
|
timestamp: currentTimestamp,
|
|
value: ping,
|
|
};
|
|
|
|
var request = http.request(url, options, function (res) {
|
|
if (res.statusMessage === "Unauthorized") {
|
|
const genericError =
|
|
"Error encountered. Please ensure that your page code and authorization key are correct.";
|
|
return console.error(genericError);
|
|
}
|
|
res.on("data", function () {
|
|
console.log("Submitted point " + count + " of " + totalPoints);
|
|
});
|
|
res.on("end", function () {
|
|
|
|
});
|
|
res.on("error", (error) => {
|
|
console.error(`Error caught: ${error.message}`);
|
|
});
|
|
});
|
|
|
|
request.end(JSON.stringify({ data: data }));
|
|
})
|
|
.catch((error) => {
|
|
console.error("Ping failed:", error);
|
|
// Submit a default value if the ping fails
|
|
var data = {
|
|
timestamp: currentTimestamp,
|
|
value: -1, // Use -1 to indicate ping failure
|
|
};
|
|
|
|
var request = http.request(url, options, function (res) {
|
|
// Handle response
|
|
});
|
|
|
|
request.end(JSON.stringify({ data: data }));
|
|
});
|
|
}
|
|
|
|
const rendermainpage = () => {
|
|
if (req.useragent.isMobile) {
|
|
return res.redirect("/app?tab=search");
|
|
}
|
|
|
|
return renderTemplate(res, req, "landing.ejs", {
|
|
isOldWindows,
|
|
});
|
|
};
|
|
|
|
if (req.params.v && /[a-zA-Z0-9]+/.test(req.params.v)) {
|
|
const isvld = await core.isvalidvideo(req.params.v);
|
|
if (isvld) {
|
|
return res.redirect(`/watch?v=${req.params.v}`);
|
|
}
|
|
}
|
|
|
|
return rendermainpage();
|
|
});
|
|
};
|