Apply sanitation to chat names with extension

4b2c074399471cf674fa1e9691a41b09618ecb33

Cohee <18619528+Cohee1207@users.noreply.github.com>

1 files changed, +12 -21Showing whitespace changes
src/endpoints/chats.js+12 -21
@@ -144,8 +144,8 @@ router.post('/save', jsonParser, function (request, response) {
144144 const directoryName = String(request.body.avatar_url).replace('.png', '');
145145 const chatData = request.body.chat;
146146 const jsonlData = chatData.map(JSON.stringify).join('\n');
147147 const fileName = `${sanitize(String(request.body.file_name))}.jsonl`;
148148 const filePath = path.join(request.user.directories.chats, directoryName, sanitize(fileName));
149149 writeFileAtomicSync(filePath, jsonlData, 'utf8');
150150 backupChat(request.user.directories.backups, directoryName, jsonlData);
151151 return response.send({ result: 'ok' });
@@ -171,14 +171,15 @@ router.post('/get', jsonParser, function (request, response) {
171171 return response.send({});
172172 }
173173
174174 const fileName = path.join(directoryPath, `${sanitize(String(request.body.file_name))}.jsonl`);
175175 const chatFileExistsfilePath = fspath.existsSyncjoin(directoryPath, sanitize(fileName));
176+ const chatFileExists = fs.existsSync(filePath);
176177
177178 if (!chatFileExists) {
178179 return response.send({});
179180 }
180181
181182 const data = fs.readFileSync(fileNamefilePath, 'utf8');
182183 const lines = data.split('\n');
183184
184185 // Iterate through the array of strings and parse each line as JSON
@@ -217,28 +218,18 @@ router.post('/rename', jsonParser, async function (request, response) {
217218});
218219
219220router.post('/delete', jsonParser, function (request, response) {
220- if (!request.body) {
221- console.log('no request body seen');
222- return response.sendStatus(400);
223- }
224-
225- if (request.body.chatfile !== sanitize(request.body.chatfile)) {
226- console.error('Malicious chat name prevented');
227- return response.sendStatus(403);
228- }
229-
230221 const dirName = String(request.body.avatar_url).replace('.png', '');
231222 const fileName = path.join(request.user.directories.chats, dirName, sanitize(String(request.body.chatfile)));
232223 const chatFileExistsfilePath = fspath.existsSyncjoin(request.user.directories.chats, dirName, sanitize(fileName));
224+ const chatFileExists = fs.existsSync(filePath);
233225
234226 if (!chatFileExists) {
235227 console.log(`Chat file not found '${fileNamefilePath}'`);
236228 return response.sendStatus(400);
237- } else {
238- fs.rmSync(fileName);
239- console.log('Deleted chat file: ' + fileName);
240229 }
241230
231+ fs.rmSync(filePath);
232+ console.log('Deleted chat file: ' + filePath);
242233 return response.send('ok');
243234});
244235