51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import express, { NextFunction, Request, Response } from "express";
|
|
import helmet from "helmet";
|
|
import morgan from "morgan";
|
|
|
|
import { ParseGet, ParsePost } from "./helpers/parse.js";
|
|
import Search from "./helpers/search.js";
|
|
|
|
const app = express();
|
|
|
|
app.use(helmet());
|
|
app.use(morgan("combined"));
|
|
app.set("trust proxy", "loopback");
|
|
// app.use(morgan(process.env.NODE_ENV === "production" ? "tiny" : "dev"));
|
|
|
|
app.use(express.json());
|
|
|
|
// Errors
|
|
app.use((err: Error, _req: Request, res: Response, _next: NextFunction) => {
|
|
console.error(err.stack);
|
|
res.status(500).json({ msg: "Wife machine broke", error: err });
|
|
});
|
|
|
|
app
|
|
.route("/")
|
|
.get(ParseGet, Search)
|
|
.post(ParsePost, Search)
|
|
// Also have a fallback for anyone who tries to be silly :)
|
|
.all((_req, res) => {
|
|
res.set("ALLOW", "GET, POST");
|
|
res.status(405).json({ msg: "Method not allowed." });
|
|
});
|
|
|
|
// Politely tell all crawlers to go away since there's nothing here.
|
|
app.get("/robots.txt", (_req, res) => {
|
|
res.setHeader("content-type", "text/plain");
|
|
res.status(200).send(`User-agent: *
|
|
Disallow: /`);
|
|
});
|
|
|
|
app.get("/source", (_req, res) => {
|
|
res.redirect(301, "https://git.froth.zone/sam/waifurudor.de");
|
|
});
|
|
|
|
// For 404s
|
|
app.use((_req, res) => {
|
|
res.setHeader("content-type", "text/plain");
|
|
res.status(404).send("Nothing beside remains.");
|
|
});
|
|
|
|
export default app;
|