Skip to content

Commit e58b765

Browse files
committed
added security to link api
1 parent 7baadfd commit e58b765

File tree

1 file changed

+36
-3
lines changed

1 file changed

+36
-3
lines changed

api/link.js

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,40 @@ const path = require("path");
55

66
const dbPath = path.join(__dirname, "..", "database.json");
77

8+
// Fonction sécurisée pour lire la base de données
9+
function readDb() {
10+
// Si le fichier n'existe pas, on le crée avec une structure vide
11+
if (!fs.existsSync(dbPath)) {
12+
fs.writeFileSync(dbPath, JSON.stringify({ users: [] }, null, 2));
13+
}
14+
15+
try {
16+
const data = fs.readFileSync(dbPath, "utf8");
17+
// Gère le cas où le fichier est vide
18+
if (data === "") {
19+
return { users: [] };
20+
}
21+
const db = JSON.parse(data);
22+
// S'assure que la propriété 'users' existe
23+
if (!db.users) {
24+
db.users = [];
25+
}
26+
return db;
27+
} catch (error) {
28+
console.error(
29+
"Erreur critique lors de la lecture ou du parsing de database.json:",
30+
error
31+
);
32+
// En cas d'erreur de parsing, on retourne une structure vide pour éviter un crash
33+
return { users: [] };
34+
}
35+
}
36+
37+
// Fonction pour écrire dans la base de données
38+
function writeDb(data) {
39+
fs.writeFileSync(dbPath, JSON.stringify(data, null, 2));
40+
}
41+
842
// Cette route répondra à POST /link/
943
router.post("/", (req, res) => {
1044
const { discord_id, coachfoot_id } = req.body;
@@ -16,8 +50,7 @@ router.post("/", (req, res) => {
1650
}
1751

1852
try {
19-
const dbRaw = fs.readFileSync(dbPath, "utf8");
20-
const db = JSON.parse(dbRaw);
53+
const db = readDb();
2154

2255
// Vérifier si le coachfoot_id est déjà utilisé par un autre compte
2356
const existingCoachFootUser = db.users.find(
@@ -46,7 +79,7 @@ router.post("/", (req, res) => {
4679
db.users[userIndex].status = "connected";
4780
db.users[userIndex].coachfoot_id = coachfoot_id;
4881

49-
fs.writeFileSync(dbPath, JSON.stringify(db, null, 2));
82+
writeDb(db);
5083

5184
res.status(201).json({ status: "validated" });
5285
} catch (error) {

0 commit comments

Comments
 (0)