feat: begin authentication process
This commit is contained in:
parent
8b74c22a10
commit
dd7cc24c08
@ -27,6 +27,7 @@
|
|||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"ejs": "^3.1.10",
|
"ejs": "^3.1.10",
|
||||||
"express": "^4.21.1",
|
"express": "^4.21.1",
|
||||||
|
"jose": "^5.9.6",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"pg": "^8.13.1"
|
"pg": "^8.13.1"
|
||||||
}
|
}
|
||||||
|
9
back-end/src/config/auth.config.ts
Normal file
9
back-end/src/config/auth.config.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import { createSecretKey } from 'crypto';
|
||||||
|
|
||||||
|
const JWT_ISSUER = process.env.NODE_JWT_ISSUER as string;
|
||||||
|
const JWT_AUDIENCE = '*';
|
||||||
|
const JWT_SECRET = process.env.NODE_JWT_SECRET as string;
|
||||||
|
const JWT_EXPIRATION = '1 week';
|
||||||
|
const JWT_SECRET_KEY = createSecretKey(JWT_SECRET as string, 'utf-8');
|
||||||
|
|
||||||
|
export {JWT_ISSUER, JWT_AUDIENCE, JWT_SECRET, JWT_EXPIRATION, JWT_SECRET_KEY };
|
@ -7,17 +7,15 @@ import { Either, eitherLeft, eitherRight } from '../utils/utils';
|
|||||||
const defaultUser = { id_member: -1, name: "unknown" };
|
const defaultUser = { id_member: -1, name: "unknown" };
|
||||||
const defaultMember = { id_member: -1, name: "unknown", password: "none" };
|
const defaultMember = { id_member: -1, name: "unknown", password: "none" };
|
||||||
|
|
||||||
async function getMember(idOrName: number | string): Promise<Either<Member, string>> {
|
const getMember = async (idOrName: number | string): Promise<Either<Member, string>> => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
await client.connect();
|
||||||
console.log("BEFG");
|
|
||||||
let res;
|
let res;
|
||||||
if (typeof idOrName !== 'number') {
|
if (typeof idOrName !== 'number') {
|
||||||
res = await client.query("SELECT * FROM membres WHERE nom_membre=$1;", [`${idOrName}`]);
|
res = await client.query("SELECT * FROM membres WHERE nom_membre=$1;", [`${idOrName}`]);
|
||||||
} else {
|
} else {
|
||||||
res = await client.query("SELECT * FROM membres WHERE id_membre=$1;", [idOrName]);
|
res = await client.query("SELECT * FROM membres WHERE id_membre=$1;", [idOrName]);
|
||||||
}
|
}
|
||||||
console.log("AFTG");
|
|
||||||
if (res.rows.length === 0) {
|
if (res.rows.length === 0) {
|
||||||
await client.end();
|
await client.end();
|
||||||
return eitherRight<Member, string>("Does not exist.");
|
return eitherRight<Member, string>("Does not exist.");
|
||||||
@ -28,42 +26,42 @@ async function getMember(idOrName: number | string): Promise<Either<Member, stri
|
|||||||
return eitherLeft<Member, string>(member);
|
return eitherLeft<Member, string>(member);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function createMember(name: string, passwd: string): Promise<Either<Member, string>> {
|
const createMember = async (name: string, passwd: string): Promise<Either<Member, string>> => {
|
||||||
const gettingMember = await getMember(name);
|
const gettingMember = await getMember(name);
|
||||||
if (!gettingMember.hasRight) {
|
if (!gettingMember.hasRight) {
|
||||||
return eitherRight("Already in database.");
|
return eitherRight<Member, string>("Already in database.");
|
||||||
}
|
}
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
await client.connect();
|
||||||
const res = await client.query("INSERT INTO membres (nom_membre, mdp_membre) VALUES ($1, $2) RETURNING *;", [`${name}`, `${passwd}`]);
|
const res = await client.query("INSERT INTO membres (nom_membre, mdp_membre) VALUES ($1, $2) RETURNING *;", [`${name}`, `${passwd}`]);
|
||||||
if (res.rows.length === 0) {
|
if (res.rows.length === 0) {
|
||||||
await client.end();
|
await client.end();
|
||||||
return eitherRight("Something went wrong");
|
return eitherRight<Member, string>("Something went wrong");
|
||||||
}
|
}
|
||||||
const member: Member = { id_member: res.rows[0].id_member, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre };
|
const member: Member = { id_member: res.rows[0].id_member, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre };
|
||||||
await client.end();
|
await client.end();
|
||||||
return eitherLeft(member);
|
return eitherLeft<Member, string>(member);
|
||||||
}
|
}
|
||||||
|
|
||||||
function userAdapter(member: Member): User {
|
function userAdapter(member: Member): User {
|
||||||
return { id_member: member.id_member, name: member.name };
|
return { id_member: member.id_member, name: member.name };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const register = (req: Request, res: Response) => {
|
const register = (req: Request, res: Response) => {
|
||||||
if (!req || !req.body || !req.body.name || !req.body.password) {
|
if (!req || !req.body || !req.body.name || !req.body.password) {
|
||||||
console.log(req.body);
|
res.status(400).send();
|
||||||
res.send(req.body);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const name: string = req.body.name;
|
const name: string = req.body.name;
|
||||||
bcrypt.genSalt(10, (err, salt) => {
|
bcrypt.genSalt(10, (err, salt) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
res.status(500);
|
res.status(500).send();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bcrypt.hash(req.body.password, salt, async (err, hash) => {
|
bcrypt.hash(req.body.password, salt, async (err, hash) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
res.status(500);
|
res.status(500).send();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,6 +72,30 @@ const register = (req: Request, res: Response) => {
|
|||||||
res.send(userAdapter(member.left));
|
res.send(userAdapter(member.left));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
export { register };
|
const login = async (req: Request, res: Response) => {
|
||||||
|
if (!req || !req.body || !req.body.name || !req.body.password) {
|
||||||
|
res.status(400).send();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const name: string = req.body.name;
|
||||||
|
const member: Either<Member, string> = await getMember(name);
|
||||||
|
if (member.hasRight) {
|
||||||
|
res.send(member.right).send();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
bcrypt.compare(req.body.password, member.left.password, (err, r) => {
|
||||||
|
if (err) {
|
||||||
|
res.status(500).send();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!r) {
|
||||||
|
res.status(403).send();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
res.status(200).send();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export { register, login };
|
@ -1,8 +1,9 @@
|
|||||||
import express from 'express';
|
import express from 'express';
|
||||||
import { register } from '../controllers/members.controller';
|
import { register, login } from '../controllers/auth.controller';
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
router.post('/register', register);
|
router.post('/register', register);
|
||||||
|
router.post('/login', login);
|
||||||
|
|
||||||
export default router;
|
export default router;
|
@ -1,5 +1,5 @@
|
|||||||
import express from 'express';
|
import express from 'express';
|
||||||
import membersRoute from './members.route'
|
import authRoute from './auth.route'
|
||||||
import db from '../db';
|
import db from '../db';
|
||||||
|
|
||||||
const routes = express.Router();
|
const routes = express.Router();
|
||||||
@ -14,6 +14,6 @@ routes.get("/message", async (_req, res) => {
|
|||||||
res.render('index.ejs', { message });
|
res.render('index.ejs', { message });
|
||||||
});
|
});
|
||||||
|
|
||||||
routes.use("/members", membersRoute);
|
routes.use("/auth", authRoute);
|
||||||
|
|
||||||
export default routes;
|
export default routes;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user