translate form tutorial

This commit is contained in:
andrzej 2024-05-27 15:05:40 +02:00
parent a468f037c6
commit 68f77317a3
5 changed files with 1289 additions and 89 deletions

View File

@ -41,35 +41,48 @@ export const getEndpoints = (dbObject) => {
export const postEndpoints = (db, data) => { export const postEndpoints = (db, data) => {
const router = express.Router(); const router = express.Router();
endpoint(router, Story, "create", "insert", db, data); protectedEndpoint(router, Story, "create", "insert", db, data);
endpoint(router, Story, "edit", "update", db, data); protectedEndpoint(router, Story, "edit", "update", db, data);
endpoint(router, Story, "delete", "update", db, data); protectedEndpoint(router, Story, "delete", "update", db, data);
endpoint(router, Submission, "create", "insert", db, data); protectedEndpoint(router, Submission, "create", "insert", db, data);
endpoint(router, Submission, "edit", "update", db, data); protectedEndpoint(router, Submission, "edit", "update", db, data);
endpoint(router, Submission, "delete", "update", db, data); protectedEndpoint(router, Submission, "delete", "update", db, data);
endpoint(router, Publication, "create", "insert", db, data); protectedEndpoint(router, Publication, "create", "insert", db, data);
endpoint(router, Publication, "edit", "update", db, data); protectedEndpoint(router, Publication, "edit", "update", db, data);
endpoint(router, Publication, "delete", "del", db, data); protectedEndpoint(router, Publication, "delete", "del", db, data);
return router; return router;
}; };
const endpoint = (router, Entity, path, method, db, data) => { const protectedEndpoint = (router, Entity, path, method, db, data) => {
router.post(`/${Entity.name.toLowerCase()}/${path}`, async (req, res) => { router.post(`/${Entity.name.toLowerCase()}/${path}`, async (req, res) => {
try { passport.authenticate(
logger.trace({ data: req.body }, "POST request received"); "jwt",
const entity = new Entity(req.body); { session: false },
await entity[method](db, data); async (err, user, info) => {
res.sendStatus(200); if (err) {
data.init(); logger.error(err);
return; }
} catch (error) { if (info !== undefined) {
logger.error(error); logger.info(info.message);
if (error instanceof TypeError) { res.status(401).send(info.message);
res.sendStatus(400); }
return; try {
} logger.trace({ data: req.body }, "POST request received");
res.sendStatus(500); const entity = new Entity(req.body);
return; await entity[method](db, data);
} res.sendStatus(200);
data.init();
return;
} catch (error) {
logger.error(error);
if (error instanceof TypeError) {
res.sendStatus(400);
return;
}
res.sendStatus(500);
return;
}
},
);
}); });
}; };

1258
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -16,6 +16,7 @@
"cors": "^2.8.5", "cors": "^2.8.5",
"eslint": "^8.57.0", "eslint": "^8.57.0",
"express": "^4.18.2", "express": "^4.18.2",
"helmet": "^7.1.0",
"jsonwebtoken": "^9.0.2", "jsonwebtoken": "^9.0.2",
"knex": "^2.5.1", "knex": "^2.5.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",

41
sampleEndpoint.mjs Normal file
View File

@ -0,0 +1,41 @@
import passport from "passport";
import User from "../sequelize";
module.exports = (app) => {
app.get("/findUser", (req, res, next) => {
passport.authenticate("jwt", { session: false }, (err, user, info) => {
if (err) {
console.log(err);
}
if (info !== undefined) {
console.log(info.message);
res.status(401).send(info.message);
} else if (user.username === req.query.username) {
User.findOne({
where: {
username: req.query.username,
},
}).then((userInfo) => {
if (userInfo != null) {
console.log("user found in db from findUsers");
res.status(200).send({
auth: true,
first_name: userInfo.first_name,
last_name: userInfo.last_name,
email: userInfo.email,
username: userInfo.username,
password: userInfo.password,
message: "user found in db",
});
} else {
console.error("no user exists in db with that username");
res.status(401).send("no user exists in db with that username");
}
});
} else {
console.error("jwt id and username do not match");
res.status(403).send("username and jwt token do not match");
}
})(req, res, next);
});
};

View File

@ -6,19 +6,19 @@ import { Data } from "./objects/Data.mjs";
import { db } from "./db.mjs"; import { db } from "./db.mjs";
import { getEndpoints, postEndpoints } from "./objects/Endpoints.mjs"; import { getEndpoints, postEndpoints } from "./objects/Endpoints.mjs";
import cors from "cors"; import cors from "cors";
import helmet from "helmet";
import passport from "passport";
const app = express(); const app = express();
const port = 4000; const port = 4000;
const corsOptions = {
origin: ["http://localhost:5173"],
};
app.use(cors()); app.use(cors());
app.use(pinoHTTP({ logger })); app.use(pinoHTTP({ logger }));
app.use(bodyParser.json()); app.use(bodyParser.json());
// app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.urlencoded({ extended: false }));
// app.use(helmet()); app.use(helmet());
// app.use(passport.initialize()); app.use(passport.initialize());
const data = new Data(db); const data = new Data(db);
await data.init(); await data.init();
@ -32,4 +32,3 @@ app.listen(port, (err) => {
}); });
export default app; export default app;