website/server.js

180 lines
4.3 KiB
JavaScript

//! Deps
// wrwlf.co
const express = require("express");
const helmet = require("helmet");
const compression = require("compression");
const cors = require("cors");
const morgan = require("morgan");
const chalk = require("chalk");
const hbs = require("express-handlebars");
const UA = require("ua-parser-js");
const exec = require("shell-exec");
const simpleIcons = require("simple-icons");
const con = require("./constants");
let { port } = {
port: 7777
};
const app = express();
app.engine(
"hbs",
hbs({
extname: "hbs",
defaultView: "default",
helpers: {
ifeq: function(a, b, options) {
if (a === b) {
return options.fn(this);
}
}
}
})
);
app.set("view engine", "hbs");
app.set("json spaces", 4);
app.use("/assets", express.static("./assets"));
app.set("view options", {
layout: false
});
app.use(express.json());
app.use(
express.urlencoded({
extended: true
})
);
app.use(helmet());
app.use(compression());
app.use(cors());
// Logging
app.use(
morgan((tokens, req, res) => {
return [
chalk.hex("#34ace0").bold(`[ ${tokens.method(req, res)} ]`),
chalk.hex("#ffb142").bold(tokens.status(req, res)),
chalk.hex("#ff5252").bold(req.hostname + tokens.url(req, res)),
chalk.hex("#2ed573").bold(tokens["response-time"](req, res) + "ms"),
chalk.hex("#f78fb3").bold("@ " + tokens.date(req, res))
].join(" ");
})
);
app.use("/portfolio", require("./routes/portfolio"));
app.use("/p", require("./routes/p"));
app.use("/lore", require("./routes/lore"));
app.use("/art", require("./routes/art"));
module.exports = client => {
app.get("/", async (req, res) => {
res.render("index", {
layout: "main",
name: con.name,
host: req.hostname,
item: [{ name: "portfolio", source: "https://p.wrwlf.co" }],
social: [
{
name: "Twitter",
color: "1DA1F2",
link: "twitter.com/codepupper",
icon: simpleIcons.Twitter
},
{
name: "Mastodon",
color: "3088d4",
link: "pounced-on.me/@code",
icon: simpleIcons.Mastodon,
verify: true
},
{
name: "Twitter",
color: "1DA1F2",
link: "twitter.com/floofydev",
icon: simpleIcons.Twitter
},
{
name: "Discord",
color: "7289da",
link: "thaldr.in/discord",
icon: simpleIcons.Discord
},
{
name: "Twitch",
color: "6441a4",
link: "twitch.tv/codepupper",
icon: simpleIcons.Twitch
},
{
name: "Keybase",
color: "33a0ff",
link: "keybase.io/codepupper",
icon: simpleIcons.Keybase
},
{
name: "Gitdab",
color: "faacb7",
link: "gitdab.com/y",
icon: simpleIcons.Git
},
{
name: "Github",
color: "333",
link: "github.com/codepupper",
icon: simpleIcons.GitHub
},
{
name: "Gitlab",
color: "E24329",
link: "gitlab.com/codepupper",
icon: simpleIcons.GitLab
},
{
name: "Ko-Fi",
color: "f16061",
link: "ko-fi.com/codepupper",
icon: simpleIcons["Ko-fi"]
},
{
name: "Patreon",
color: "6441a4",
link: "patreon.com/ryden",
icon: simpleIcons.Patreon
}
]
});
});
app.get("/update", async (req, res) => {
//console.log(req.headers['user-agent']);
if (req.headers.authorization === con.updateToken) {
await exec("git pull")
.then(r => {
console.log("Pulled latest changes");
res.status(200).jsonp({
success: true,
message: "Successfully pulled latest changes"
});
process.exit();
//trying.edit('```fix\n' + r.stdout + '```');
})
.catch(error => {
res.status(400).jsonp({
success: false,
message: error.message
});
console.error(error);
});
} else {
res.status(400).jsonp({
success: false,
message: "You are not authorized to access this Endpoint"
});
}
});
app.listen(port /* , hostname */, () => {
console.log(`[ Server ] Listening on ${port}`);
});
};