aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2017-12-07 21:51:26 +0100
committerLibravatar GitHub <noreply@github.com>2017-12-07 21:51:26 +0100
commite4cf5e6d2ab40e65ca22d7a8f51a70ff05d0956e (patch)
tree62c0c5ae1151408d4491b11dcee37469dd36e1f2
parentMerge pull request #400 from meetfranz/feature/delete-account (diff)
parentremove excessive debug logs (diff)
downloadferdium-app-e4cf5e6d2ab40e65ca22d7a8f51a70ff05d0956e.tar.gz
ferdium-app-e4cf5e6d2ab40e65ca22d7a8f51a70ff05d0956e.tar.zst
ferdium-app-e4cf5e6d2ab40e65ca22d7a8f51a70ff05d0956e.zip
fix(Service): Fix issues when installing recipe
[PR] Harden recipe extraction
-rw-r--r--src/api/server/ServerApi.js15
-rw-r--r--src/helpers/async-helpers.js5
2 files changed, 17 insertions, 3 deletions
diff --git a/src/api/server/ServerApi.js b/src/api/server/ServerApi.js
index 644bf20cd..8b3136d27 100644
--- a/src/api/server/ServerApi.js
+++ b/src/api/server/ServerApi.js
@@ -12,6 +12,8 @@ import NewsModel from '../../models/News';
12import UserModel from '../../models/User'; 12import UserModel from '../../models/User';
13import OrderModel from '../../models/Order'; 13import OrderModel from '../../models/Order';
14 14
15import { sleep } from '../../helpers/async-helpers';
16
15import { API } from '../../environment'; 17import { API } from '../../environment';
16 18
17import { 19import {
@@ -303,18 +305,25 @@ export default class ServerApi {
303 305
304 fs.ensureDirSync(recipeTempDirectory); 306 fs.ensureDirSync(recipeTempDirectory);
305 const res = await fetch(packageUrl); 307 const res = await fetch(packageUrl);
308 console.debug('Recipe downloaded', recipeId);
306 const buffer = await res.buffer(); 309 const buffer = await res.buffer();
307 fs.writeFileSync(archivePath, buffer); 310 fs.writeFileSync(archivePath, buffer);
308 311
309 tar.x({ 312 await sleep(10);
313
314 await tar.x({
310 file: archivePath, 315 file: archivePath,
311 cwd: recipeTempDirectory, 316 cwd: recipeTempDirectory,
312 sync: true, 317 preservePaths: true,
318 unlink: true,
319 preserveOwner: false,
320 onwarn: x => console.log('warn', recipeId, x),
313 }); 321 });
314 322
323 await sleep(10);
324
315 const { id } = fs.readJsonSync(path.join(recipeTempDirectory, 'package.json')); 325 const { id } = fs.readJsonSync(path.join(recipeTempDirectory, 'package.json'));
316 const recipeDirectory = path.join(recipesDirectory, id); 326 const recipeDirectory = path.join(recipesDirectory, id);
317
318 fs.copySync(recipeTempDirectory, recipeDirectory); 327 fs.copySync(recipeTempDirectory, recipeDirectory);
319 fs.remove(recipeTempDirectory); 328 fs.remove(recipeTempDirectory);
320 fs.remove(path.join(recipesDirectory, recipeId, 'recipe.tar.gz')); 329 fs.remove(path.join(recipesDirectory, recipeId, 'recipe.tar.gz'));
diff --git a/src/helpers/async-helpers.js b/src/helpers/async-helpers.js
new file mode 100644
index 000000000..2ef01ee09
--- /dev/null
+++ b/src/helpers/async-helpers.js
@@ -0,0 +1,5 @@
1/* eslint-disable import/prefer-default-export */
2
3export function sleep(ms = 0) {
4 return new Promise(r => setTimeout(r, ms));
5}