startpage-engine/server.js
2022-02-03 21:38:54 -05:00

138 lines
3.5 KiB
JavaScript

const express = require("express");
const app = express();
const cors = require("cors");
const config = require("./config.json");
const axios = require("axios");
app.use(cors());
app.listen(config.port, function() {
console.log(`[StartPageEngine] Listening on port ${config.port}`);
});
// extractors
const ow = require("./ext/owapi.js");
const wh = require("./ext/wallhaven.js");
app.get(`/`, function(req, res) {
res.sendFile(`${__dirname}/info.txt`)
})
app.get(`/weather/`, function(req, res) {
if (config.public) {
res.send({
"success": false,
"err": {
"code": "publicTrue",
"message": "Please read the documentation. This is a public instance and the server won't redirect you to the city you set by default."
}
});
} else {
res.redirect(`/weather/${config.defaults["open-weather-city-id"]}`);
}
});
app.get(`/weather/:city`, function(req, res) {
var m = (req.query.measure || config["defaults"]["open-weather-measure"]);
ow.extract(req.params.city, m, function(err, resp) {
if (typeof resp == "object") {
res.send({
"success": true,
"data": resp
});
} else {
if (err == null) {
res.send({
"success": false,
"err": {
"code": "unk",
"message": "An error has occured, but the error object is empty."
}
});
} else {
res.send({
"success": false,
"err": {
"code": err.code,
"message": err.message
}
});
}
}
})
});
app.get(`/wall`, function(req, res) {
if (!req.query.q && config.public) {
res.send({
"success": false,
"err": {
"code": "publicTrue",
"message": "Please read the documentation. This is a public instance and the server won't redirect you to the city you set by default."
}
});
} else if (!req.query.q) {
res.redirect(`/wall/?q=${config["defaults"]["wallpaper-tags"][Math.floor(Math.random() * config["defaults"]["wallpaper-tags"]["length"])]}`);
} else {
wh.search(req.query.q, function(err, resp) {
if (typeof resp == "string") {
res.send({
"success": true,
"data": resp
});
} else {
if (err == null) {
res.send({
"success": false,
"err": {
"code": "unk",
"message": "An error has occured, but the error object is empty."
}
});
} else {
res.send({
"success": false,
"err": {
"code": err.code,
"message": err.message
}
});
}
}
});
}
});
app.get("/wp", function(req, res) {
if (req.query.url) {
var u = new URL(decodeURIComponent(req.query.url));
switch(u.host) {
case "w.wallhaven.cc":
axios({
url: u.href,
headers: {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0",
"Accept": "image/*",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate",
"Referer": `https://wallhaven.cc`,
"Upgrade-Insecure-Requests": "1",
"DNT": "1"
},
responseType: "stream"
}).then(function(resp) {
resp.data.pipe(res);
}).catch(function(err) {
console.log(err);
})
return;
default:
res.send("no");
return;
}
} else {
res.redirect("/");
}
})