2023-09-06 16:26:15 +00:00
|
|
|
import express from "express";
|
2023-09-09 14:04:53 +00:00
|
|
|
import logger from "../logger.mjs";
|
2024-05-23 10:55:11 +00:00
|
|
|
import Story from "./Story.mjs";
|
|
|
|
import Publication from "./Publication.mjs";
|
2023-09-09 14:04:53 +00:00
|
|
|
import Submission from "./Submission.mjs";
|
2024-05-23 10:55:11 +00:00
|
|
|
import passport from "passport";
|
2023-09-06 16:26:15 +00:00
|
|
|
|
2023-09-09 14:04:53 +00:00
|
|
|
export const getEndpoints = (dbObject) => {
|
2024-05-23 10:55:11 +00:00
|
|
|
const router = express.Router();
|
|
|
|
|
|
|
|
router.get("/stories", (_, res) => {
|
|
|
|
res.statusCode = 200;
|
|
|
|
res.send(dbObject.stories);
|
|
|
|
return;
|
|
|
|
});
|
|
|
|
|
|
|
|
router.get("/publications", (_, res) => {
|
|
|
|
res.statusCode = 200;
|
|
|
|
res.send(dbObject.publications);
|
|
|
|
return;
|
|
|
|
});
|
|
|
|
|
|
|
|
router.get("/submissions", (_, res) => {
|
|
|
|
res.statusCode = 200;
|
|
|
|
res.send(dbObject.submissions);
|
|
|
|
return;
|
|
|
|
});
|
|
|
|
router.get("/responses", (_, res) => {
|
|
|
|
res.statusCode = 200;
|
|
|
|
res.send(dbObject.responses);
|
|
|
|
return;
|
|
|
|
});
|
|
|
|
router.get("/genres", (_, res) => {
|
|
|
|
res.statusCode = 200;
|
|
|
|
res.send(dbObject.genres);
|
|
|
|
return;
|
|
|
|
});
|
|
|
|
|
|
|
|
return router;
|
|
|
|
};
|
|
|
|
|
2024-05-27 14:12:11 +00:00
|
|
|
export const protectedEndpoints = (db, data) => {
|
2024-05-23 10:55:11 +00:00
|
|
|
const router = express.Router();
|
2024-05-27 14:12:11 +00:00
|
|
|
writeEndpoint(router, Story, "create", "insert", db, data);
|
|
|
|
writeEndpoint(router, Story, "edit", "update", db, data);
|
|
|
|
writeEndpoint(router, Story, "delete", "update", db, data);
|
|
|
|
writeEndpoint(router, Submission, "create", "insert", db, data);
|
|
|
|
writeEndpoint(router, Submission, "edit", "update", db, data);
|
|
|
|
writeEndpoint(router, Submission, "delete", "update", db, data);
|
|
|
|
writeEndpoint(router, Publication, "create", "insert", db, data);
|
|
|
|
writeEndpoint(router, Publication, "edit", "update", db, data);
|
|
|
|
writeEndpoint(router, Publication, "delete", "del", db, data);
|
|
|
|
//Auth endpoints
|
|
|
|
router.post(
|
|
|
|
"/signup",
|
|
|
|
passport.authenticate("signup", { session: false }),
|
|
|
|
async (req, res) => {
|
|
|
|
res.json({
|
|
|
|
message: "Signup successful",
|
|
|
|
user: req.user,
|
|
|
|
});
|
|
|
|
},
|
|
|
|
);
|
|
|
|
router.post("/login", async (req, res, next) => {
|
|
|
|
passport.authenticate("login", async (err, user, info) => {
|
|
|
|
try {
|
|
|
|
if (err || !user) {
|
|
|
|
const error = new Error("An error occurred.");
|
|
|
|
|
|
|
|
return next(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
req.login(user, { session: false }, async (error) => {
|
|
|
|
if (error) return next(error);
|
|
|
|
|
|
|
|
const body = { _id: user._id, email: user.email };
|
|
|
|
const token = require("jsonwebtoken").sign(
|
|
|
|
{ user: body },
|
|
|
|
"TOP_SECRET",
|
|
|
|
);
|
|
|
|
|
|
|
|
return res.json({ token });
|
|
|
|
});
|
|
|
|
} catch (error) {
|
|
|
|
return next(error);
|
|
|
|
}
|
|
|
|
})(req, res, next);
|
|
|
|
});
|
2024-05-23 10:55:11 +00:00
|
|
|
return router;
|
|
|
|
};
|
|
|
|
|
2024-05-27 14:12:11 +00:00
|
|
|
const writeEndpoint = (router, Entity, path, method, db, data) => {
|
2024-05-27 13:20:24 +00:00
|
|
|
router.post(
|
|
|
|
`/${Entity.name.toLowerCase()}/${path}`,
|
2024-05-27 14:12:11 +00:00
|
|
|
passport.authenticate("jwt", { session: false }),
|
2024-05-27 13:20:24 +00:00
|
|
|
async (req, res) => {
|
|
|
|
try {
|
|
|
|
logger.trace({ data: req.body }, "POST request received");
|
|
|
|
const entity = new Entity(req.body);
|
|
|
|
await entity[method](db, data);
|
|
|
|
res.sendStatus(200);
|
|
|
|
data.init();
|
|
|
|
return;
|
|
|
|
} catch (error) {
|
|
|
|
logger.error(error);
|
|
|
|
if (error instanceof TypeError) {
|
|
|
|
res.sendStatus(400);
|
2024-05-27 13:05:40 +00:00
|
|
|
return;
|
|
|
|
}
|
2024-05-27 13:20:24 +00:00
|
|
|
res.sendStatus(500);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
);
|
2024-05-23 10:55:11 +00:00
|
|
|
};
|