diff options
author | Stefan Malzner <stefan@adlk.io> | 2017-12-07 21:51:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-07 21:51:26 +0100 |
commit | e4cf5e6d2ab40e65ca22d7a8f51a70ff05d0956e (patch) | |
tree | 62c0c5ae1151408d4491b11dcee37469dd36e1f2 | |
parent | Merge pull request #400 from meetfranz/feature/delete-account (diff) | |
parent | remove excessive debug logs (diff) | |
download | ferdium-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.js | 15 | ||||
-rw-r--r-- | src/helpers/async-helpers.js | 5 |
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'; | |||
12 | import UserModel from '../../models/User'; | 12 | import UserModel from '../../models/User'; |
13 | import OrderModel from '../../models/Order'; | 13 | import OrderModel from '../../models/Order'; |
14 | 14 | ||
15 | import { sleep } from '../../helpers/async-helpers'; | ||
16 | |||
15 | import { API } from '../../environment'; | 17 | import { API } from '../../environment'; |
16 | 18 | ||
17 | import { | 19 | import { |
@@ -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 | |||
3 | export function sleep(ms = 0) { | ||
4 | return new Promise(r => setTimeout(r, ms)); | ||
5 | } | ||