diff options
Diffstat (limited to 'src/api/server/ServerApi.js')
-rw-r--r-- | src/api/server/ServerApi.js | 79 |
1 files changed, 45 insertions, 34 deletions
diff --git a/src/api/server/ServerApi.js b/src/api/server/ServerApi.js index b5042525a..e321f9372 100644 --- a/src/api/server/ServerApi.js +++ b/src/api/server/ServerApi.js | |||
@@ -1,7 +1,17 @@ | |||
1 | /* eslint-disable global-require */ | ||
1 | import { join } from 'path'; | 2 | import { join } from 'path'; |
2 | import tar from 'tar'; | 3 | import tar from 'tar'; |
3 | import { readdirSync, statSync, writeFileSync, copySync, ensureDirSync, pathExistsSync, readJsonSync, removeSync } from 'fs-extra'; | 4 | import { |
4 | import { require as remoteRequire } from '@electron/remote'; | 5 | readdirSync, |
6 | statSync, | ||
7 | writeFileSync, | ||
8 | copySync, | ||
9 | ensureDirSync, | ||
10 | pathExistsSync, | ||
11 | readJsonSync, | ||
12 | removeSync, | ||
13 | } from 'fs-extra'; | ||
14 | import fetch from 'electron-fetch'; | ||
5 | 15 | ||
6 | import ServiceModel from '../../models/Service'; | 16 | import ServiceModel from '../../models/Service'; |
7 | import RecipePreviewModel from '../../models/RecipePreview'; | 17 | import RecipePreviewModel from '../../models/RecipePreview'; |
@@ -12,7 +22,9 @@ import UserModel from '../../models/User'; | |||
12 | import { sleep } from '../../helpers/async-helpers'; | 22 | import { sleep } from '../../helpers/async-helpers'; |
13 | 23 | ||
14 | import { SERVER_NOT_LOADED } from '../../config'; | 24 | import { SERVER_NOT_LOADED } from '../../config'; |
15 | import { osArch, osPlatform, asarRecipesPath, userDataRecipesPath, userDataPath, ferdiVersion } from '../../environment'; | 25 | import { osArch, osPlatform } from '../../environment'; |
26 | import { userDataRecipesPath, userDataPath, ferdiVersion } from '../../environment-remote'; | ||
27 | import { asarRecipesPath } from '../../helpers/asar-helpers'; | ||
16 | import apiBase from '../apiBase'; | 28 | import apiBase from '../apiBase'; |
17 | import { prepareAuthRequest, sendAuthRequest } from '../utils/auth'; | 29 | import { prepareAuthRequest, sendAuthRequest } from '../utils/auth'; |
18 | 30 | ||
@@ -28,8 +40,6 @@ const debug = require('debug')('Ferdi:ServerApi'); | |||
28 | 40 | ||
29 | module.paths.unshift(getDevRecipeDirectory(), getRecipeDirectory()); | 41 | module.paths.unshift(getDevRecipeDirectory(), getRecipeDirectory()); |
30 | 42 | ||
31 | const { default: fetch } = remoteRequire('electron-fetch'); | ||
32 | |||
33 | export default class ServerApi { | 43 | export default class ServerApi { |
34 | recipePreviews = []; | 44 | recipePreviews = []; |
35 | 45 | ||
@@ -310,22 +320,22 @@ export default class ServerApi { | |||
310 | // Recipes | 320 | // Recipes |
311 | async getInstalledRecipes() { | 321 | async getInstalledRecipes() { |
312 | const recipesDirectory = getRecipeDirectory(); | 322 | const recipesDirectory = getRecipeDirectory(); |
313 | const paths = readdirSync(recipesDirectory) | 323 | const paths = readdirSync(recipesDirectory).filter( |
314 | .filter( | 324 | file => |
315 | file => | 325 | statSync(join(recipesDirectory, file)).isDirectory() && |
316 | statSync(join(recipesDirectory, file)).isDirectory() && | 326 | file !== 'temp' && |
317 | file !== 'temp' && | 327 | file !== 'dev', |
318 | file !== 'dev', | 328 | ); |
319 | ); | ||
320 | 329 | ||
321 | this.recipes = paths | 330 | this.recipes = paths |
322 | .map(id => { | 331 | .map(id => { |
323 | // eslint-disable-next-line | 332 | // eslint-disable-next-line import/no-dynamic-require |
324 | const Recipe = require(id)(RecipeModel); | 333 | const Recipe = require(id)(RecipeModel); |
325 | return new Recipe(loadRecipeConfig(id)); | 334 | return new Recipe(loadRecipeConfig(id)); |
326 | }) | 335 | }) |
327 | .filter(recipe => recipe.id); | 336 | .filter(recipe => recipe.id); |
328 | 337 | ||
338 | // eslint-disable-next-line unicorn/prefer-spread | ||
329 | this.recipes = this.recipes.concat(this._getDevRecipes()); | 339 | this.recipes = this.recipes.concat(this._getDevRecipes()); |
330 | 340 | ||
331 | debug('StubServerApi::getInstalledRecipes resolves', this.recipes); | 341 | debug('StubServerApi::getInstalledRecipes resolves', this.recipes); |
@@ -425,8 +435,8 @@ export default class ServerApi { | |||
425 | removeSync(join(recipesDirectory, recipeId, 'recipe.tar.gz')); | 435 | removeSync(join(recipesDirectory, recipeId, 'recipe.tar.gz')); |
426 | 436 | ||
427 | return id; | 437 | return id; |
428 | } catch (err) { | 438 | } catch (error) { |
429 | console.error(err); | 439 | console.error(error); |
430 | 440 | ||
431 | return false; | 441 | return false; |
432 | } | 442 | } |
@@ -434,7 +444,9 @@ export default class ServerApi { | |||
434 | 444 | ||
435 | // News | 445 | // News |
436 | async getLatestNews() { | 446 | async getLatestNews() { |
437 | const url = `${apiBase(true)}/news?platform=${osPlatform}&arch=${osArch}&version=${ferdiVersion}`; | 447 | const url = `${apiBase( |
448 | true, | ||
449 | )}/news?platform=${osPlatform}&arch=${osArch}&version=${ferdiVersion}`; | ||
438 | const request = await sendAuthRequest(url); | 450 | const request = await sendAuthRequest(url); |
439 | if (!request.ok) throw request; | 451 | if (!request.ok) throw request; |
440 | const data = await request.json(); | 452 | const data = await request.json(); |
@@ -494,7 +506,7 @@ export default class ServerApi { | |||
494 | debug('ServerApi::getLegacyServices resolves', services); | 506 | debug('ServerApi::getLegacyServices resolves', services); |
495 | return services; | 507 | return services; |
496 | } | 508 | } |
497 | } catch (err) { | 509 | } catch { |
498 | console.error('ServerApi::getLegacyServices no config found'); | 510 | console.error('ServerApi::getLegacyServices no config found'); |
499 | } | 511 | } |
500 | 512 | ||
@@ -523,8 +535,8 @@ export default class ServerApi { | |||
523 | } | 535 | } |
524 | 536 | ||
525 | return new ServiceModel(service, recipe); | 537 | return new ServiceModel(service, recipe); |
526 | } catch (e) { | 538 | } catch (error) { |
527 | debug(e); | 539 | debug(error); |
528 | return null; | 540 | return null; |
529 | } | 541 | } |
530 | } | 542 | } |
@@ -559,7 +571,7 @@ export default class ServerApi { | |||
559 | 571 | ||
560 | return recipe; | 572 | return recipe; |
561 | }), | 573 | }), |
562 | ).catch(err => console.error("Can't load recipe", err)); | 574 | ).catch(error => console.error("Can't load recipe", error)); |
563 | } | 575 | } |
564 | 576 | ||
565 | _mapRecipePreviewModel(recipes) { | 577 | _mapRecipePreviewModel(recipes) { |
@@ -567,8 +579,8 @@ export default class ServerApi { | |||
567 | .map(recipe => { | 579 | .map(recipe => { |
568 | try { | 580 | try { |
569 | return new RecipePreviewModel(recipe); | 581 | return new RecipePreviewModel(recipe); |
570 | } catch (e) { | 582 | } catch (error) { |
571 | console.error(e); | 583 | console.error(error); |
572 | return null; | 584 | return null; |
573 | } | 585 | } |
574 | }) | 586 | }) |
@@ -580,8 +592,8 @@ export default class ServerApi { | |||
580 | .map(newsItem => { | 592 | .map(newsItem => { |
581 | try { | 593 | try { |
582 | return new NewsModel(newsItem); | 594 | return new NewsModel(newsItem); |
583 | } catch (e) { | 595 | } catch (error) { |
584 | console.error(e); | 596 | console.error(error); |
585 | return null; | 597 | return null; |
586 | } | 598 | } |
587 | }) | 599 | }) |
@@ -591,22 +603,21 @@ export default class ServerApi { | |||
591 | _getDevRecipes() { | 603 | _getDevRecipes() { |
592 | const recipesDirectory = getDevRecipeDirectory(); | 604 | const recipesDirectory = getDevRecipeDirectory(); |
593 | try { | 605 | try { |
594 | const paths = readdirSync(recipesDirectory) | 606 | const paths = readdirSync(recipesDirectory).filter( |
595 | .filter( | 607 | file => |
596 | file => | 608 | statSync(join(recipesDirectory, file)).isDirectory() && |
597 | statSync(join(recipesDirectory, file)).isDirectory() && | 609 | file !== 'temp', |
598 | file !== 'temp', | 610 | ); |
599 | ); | ||
600 | 611 | ||
601 | const recipes = paths | 612 | const recipes = paths |
602 | .map(id => { | 613 | .map(id => { |
603 | let Recipe; | 614 | let Recipe; |
604 | try { | 615 | try { |
605 | // eslint-disable-next-line | 616 | // eslint-disable-next-line import/no-dynamic-require |
606 | Recipe = require(id)(RecipeModel); | 617 | Recipe = require(id)(RecipeModel); |
607 | return new Recipe(loadRecipeConfig(id)); | 618 | return new Recipe(loadRecipeConfig(id)); |
608 | } catch (err) { | 619 | } catch (error) { |
609 | console.error(err); | 620 | console.error(error); |
610 | } | 621 | } |
611 | 622 | ||
612 | return false; | 623 | return false; |
@@ -624,7 +635,7 @@ export default class ServerApi { | |||
624 | }); | 635 | }); |
625 | 636 | ||
626 | return recipes; | 637 | return recipes; |
627 | } catch (err) { | 638 | } catch { |
628 | debug('Could not load dev recipes'); | 639 | debug('Could not load dev recipes'); |
629 | return false; | 640 | return false; |
630 | } | 641 | } |