alex/index.js
2020-10-05 21:24:30 +02:00

93 lines
2.4 KiB
JavaScript

// ! Imports
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 { dev, allMusic, music, port, socials, name } = require("./c");
const redis = require("ioredis");
const { promisify } = require("util");
const {
compileSassAndSaveMultiple,
setupCleanupOnExit,
} = require("compile-sass");
const path = require("path");
// Init
const app = express();
const r = new redis(6379, "192.168.1.11", {
connectionName: `ALEXHELDT${dev ? "-dev" : ""}`,
});
const get = promisify(r.get).bind(r);
compileSassAndSaveMultiple({
sassPath: path.join(__dirname, "assets/sass/"),
cssPath: path.join(__dirname, "assets/css/"),
files: ["index.sass"],
});
process.on("SIGINT", () => {
try {
setupCleanupOnExit("assets/css");
console.log("worked");
process.exit(0);
} catch (error) {
console.error(error);
process.exit(1);
}
});
app.engine("hbs", hbs({ extname: "hbs", defaultView: "default" }));
app.set("view engine", "hbs");
app.set("json spaces", 4);
app.use("/assets", express.static("./assets"));
app.use(express.json());
app.use(
express.urlencoded({
extended: true,
})
);
app.use(helmet());
app.use(compression());
app.use(cors());
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.get("/", async (req, res) => {
res.render("index", {
layout: "index",
name,
protocol: dev ? `http` : `https`,
host: dev ? `${req.hostname}:${port}` : `${req.hostname}`,
socials,
music,
creator: {
name: (await r.get("creator_name")) || "lio",
website: (await r.get("creator_website")) || "https://himbo.cat",
},
});
});
// ! SOCIAL LINKS
socials.forEach((social) => {
app.get(`/${social.name}`, (req, res) => res.redirect(social.link));
});
// ! MUSIC LINKS
allMusic.forEach((item) => {
app.get(`/${item.id}`, (req, res) => res.redirect(item.link));
});
app.listen(port, () => {
console.log(`[ Server ] Listening on ${port}`);
});