93 lines
2.4 KiB
JavaScript
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, 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") || 'https://himbo.cat',
|
|
website: await r.get("creator_website") || "lio",
|
|
},
|
|
});
|
|
});
|
|
|
|
// ! SOCIAL LINKS
|
|
socials.forEach((social) => {
|
|
app.get(`/${social.name}`, (req, res) => res.redirect(social.link));
|
|
});
|
|
|
|
// ! MUSIC LINKS
|
|
music.forEach((item) => {
|
|
app.get(`/${item.id}`, (req, res) => res.redirect(item.link));
|
|
});
|
|
|
|
app.listen(port, () => {
|
|
console.log(`[ Server ] Listening on ${port}`);
|
|
});
|