diff --git a/back-end/package.json b/back-end/package.json index 591ffb8..e5fd662 100644 --- a/back-end/package.json +++ b/back-end/package.json @@ -21,6 +21,8 @@ "typescript": "^5.6.3" }, "dependencies": { + "bcrypt": "^5.1.1", + "body-parser": "^1.20.3", "dotenv": "^16.4.5", "ejs": "^3.1.10", "express": "^4.21.1", diff --git a/back-end/src/app.ts b/back-end/src/app.ts index 060cfd4..85c224b 100644 --- a/back-end/src/app.ts +++ b/back-end/src/app.ts @@ -5,6 +5,7 @@ dotenv.config() import express from 'express'; import morgan from 'morgan'; import path from 'path'; +import bodyParser from 'body-parser'; import routes from './routes'; const app = express(); @@ -19,6 +20,8 @@ console.log("=== END LOG CONFIG ==="); // Need the path.join for node to resolve correctly the templates directory app.set('views', path.join(__dirname, 'templates')); app.set('view engine', 'ejs'); +app.use(bodyParser.urlencoded({ extended: true })); +app.use(bodyParser.json({ limit: '50mb' })); // Add logs app.use(morgan(log_format)); diff --git a/back-end/src/controllers/members.controller.ts b/back-end/src/controllers/members.controller.ts new file mode 100644 index 0000000..0c1f0d0 --- /dev/null +++ b/back-end/src/controllers/members.controller.ts @@ -0,0 +1,38 @@ +import { Request, Response, Router } from 'express'; +import bcrypt from 'bcrypt'; +import { Member, User } from '../types/member'; + +const defaultMember = { id_member: -1, name: "unknown" }; + +function getMember(idOrName: number | string): Member { + return defaultMember; +} + +function createMember(name: string, passwd: string): Member { + return defaultMember; +} + +const register = (req: Request, res: Response) => { + if (!req || !req.body || !req.body.name || !req.body.password) { + console.log(req.body); + res.send(req.body); + return; + } + const name: string = req.body.name; + bcrypt.genSalt(10, (err, salt) => { + if (err) { + // Handle error + return; + } + bcrypt.hash(req.body.password, salt, (err, hash) => { + if (err) { + // Handle error + return; + } + + res.send(createMember(name, hash)); + }); + }); +} + +export { register }; diff --git a/back-end/src/routes/index.ts b/back-end/src/routes/index.ts index 7a7c473..405db2b 100644 --- a/back-end/src/routes/index.ts +++ b/back-end/src/routes/index.ts @@ -1,7 +1,8 @@ -import { Router } from "express"; +import express from 'express'; +import membersRoute from './members.route' import db from '../db'; -const routes = Router(); +const routes = express.Router(); routes.get('/', async (_req, res) => { const message = await db.example_request(); @@ -13,4 +14,6 @@ routes.get("/message", async (_req, res) => { res.render('index.ejs', { message }); }); +routes.use("/members", membersRoute); + export default routes; diff --git a/back-end/src/routes/members.route.ts b/back-end/src/routes/members.route.ts new file mode 100644 index 0000000..1c6eefd --- /dev/null +++ b/back-end/src/routes/members.route.ts @@ -0,0 +1,8 @@ +import express from 'express'; +import { register } from '../controllers/members.controller'; + +const router = express.Router(); + +router.post('/register', register); + +export default router; diff --git a/back-end/src/types/member.ts b/back-end/src/types/member.ts new file mode 100644 index 0000000..b01b0f5 --- /dev/null +++ b/back-end/src/types/member.ts @@ -0,0 +1,8 @@ +type Member = { + id_member: number, + name: string +} + +type User = Member | { password: string }; + +export { Member, User };