138 lines
3.5 KiB
JavaScript
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("/");
|
|
}
|
|
}) |