From 2fa55ba93c4f6fe50bb96ca604f4750a1386e25f Mon Sep 17 00:00:00 2001 From: bouhmarc Date: Fri, 17 Jan 2020 23:39:33 +0100 Subject: [PATCH] =?UTF-8?q?Corrections=20et=20am=C3=A9lioration=20de=20l'i?= =?UTF-8?q?nstall=20d'un=20connecteur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- ...wnloadDocuments.js => DownloadDocuments.js | 4 +- InstallConnector.js | 156 ++++++++++++++++++ ...fault.json => connectors_list.default.json | 0 src/index.js => index.js | 0 package-lock.json | 121 ++++++++++++++ package.json | 23 +++ src/InstallConnector.js | 72 -------- src/connectors_list.json | 3 - 9 files changed, 304 insertions(+), 78 deletions(-) rename src/DownloadDocuments.js => DownloadDocuments.js (92%) create mode 100644 InstallConnector.js rename src/connectors_list.default.json => connectors_list.default.json (100%) rename src/index.js => index.js (100%) create mode 100644 package-lock.json create mode 100644 package.json delete mode 100644 src/InstallConnector.js delete mode 100644 src/connectors_list.json diff --git a/.gitignore b/.gitignore index 0abda95..34ac4a3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ src/connectors_list.json -node_modules \ No newline at end of file +node_modules +connectors_list.json diff --git a/src/DownloadDocuments.js b/DownloadDocuments.js similarity index 92% rename from src/DownloadDocuments.js rename to DownloadDocuments.js index 1d87712..6c4e3da 100644 --- a/src/DownloadDocuments.js +++ b/DownloadDocuments.js @@ -28,10 +28,10 @@ async function DownloadDocuments() process.env.COZY_FIELDS = JSON.stringify(stOptions) // Charge l'élément et débute la récupération - element = require(stUnElement.Source) + element = require(stUnElement.source) // On décharge l'élément pour pouvoir utiliser plusieurs fois le même connecteur - var name = require.resolve(stUnElement.Source); + var name = require.resolve(stUnElement.source); delete require.cache[name]; }) diff --git a/InstallConnector.js b/InstallConnector.js new file mode 100644 index 0000000..63ad182 --- /dev/null +++ b/InstallConnector.js @@ -0,0 +1,156 @@ +const child_process = require('child_process') +const fs = require('fs') +const path = require('path') +const shell = require('shelljs') + +// Sette l'encodage du stdin pour gérer les accents +process.stdin.setEncoding('utf8'); + +async function StartProcess(sCommande) { + child_process.execSync(sCommande, { stdio: 'inherit' }) +} +function CreeRepertoire(sRepertoire) +{ + // Vérifie le répertoire de destination + if (sRepertoire && fs.existsSync(sRepertoire) == false) { + // Crée le répertoire + // la création récursive est dispo uniquement a partir de la version 10 de node + //fs.mkdirSync(saveOptions.folderPath, { recursive: true }) + shell.mkdir('-p', sRepertoire) + } +} + +async function installConnector(sURLGit) { + + let sRepertoirePlugin = path.join(process.cwd(),'/plugins/') + // Crée le répertoire si il n'existe pas + CreeRepertoire(sRepertoirePlugin) + + // On change le répertoire pour installer tous les plugins + process.chdir(sRepertoirePlugin) + + // Récupère le nom du connecteur (le nom du répertoire dans lequel sera cloné le repo) + var extension = path.extname(sURLGit) + var sRepertoire = path.basename(sURLGit, extension) + + console.log('Récupération du repository') + + // Clone le repo + await StartProcess('git clone ' + sURLGit) + + console.log('Remplacement de référence aux libs de cozy') + + // Remplace tous les cozy-lib par cozy-without-cozy + await RemplaceLibs(path.join(sRepertoirePlugin, sRepertoire)) + + console.log('Installation de dépendances') + + process.chdir(sRepertoirePlugin) + + // Install les modules nodes dans le répertoire parent + await StartProcess('npm install ./' + sRepertoire) + + // Il reste l'installation dans le .json + // Récupération du répertoire, login, user + await DeclareConnecteur(path.join(sRepertoirePlugin, sRepertoire)) + + console.log("Le connecteur est correctement installé") +} +async function DeclareConnecteur(sRepertoireConnecteur) +{ + + sIndex = path.join(sRepertoireConnecteur, '/src/','index.js') + + console.log('Saisissez le répertoire de téléchargement : ') + let sRepertoireTelechargement = await readlineSync(); + + console.log('Saisissez le login de connexion au service : ') + let sLogin = await readlineSync(); + + console.log('Saisissez le mot de passe de connexion au service : ') + let sMotDePasse = await readlineSync(); + + // Lit le JSON de configuration + sFichierPackage = path.join(__dirname , '/connectors_list.json') + sContenuFichierListe = fs.readFileSync(sFichierPackage, 'utf8') + if (sContenuFichierListe != ''){ + ConnectorsList = JSON.parse(sContenuFichierListe) + }else{ + ConnectorsList = [] + } + + MonPackage = {} + MonPackage["source"] = sIndex + MonPackage["folder_to_save"] = sRepertoireTelechargement + MonPackage["login"] = sLogin + MonPackage["password"] = sMotDePasse + + // Supprime les dépendances de dev + ConnectorsList.push(MonPackage) + + fs.writeFileSync(sFichierPackage, JSON.stringify(ConnectorsList), 'utf8') + +} + +// This function reads only one line on console synchronously. After pressing `enter` key the console will stop listening for data. +function readlineSync() { + return new Promise((resolve, reject) => { + process.stdin.resume(); + process.stdin.on('data', function (data) { + process.stdin.pause(); // stops after one line reads + resolve(data.replace(/\n/g, "")); + }); + }); +} + +function ReadDirRecursive(sRepertoire) { + var results = [] + var list = fs.readdirSync(sRepertoire) + list.forEach(function(file) { + file = path.resolve(sRepertoire, file) + var stat = fs.statSync(file) + if (stat && stat.isDirectory()) { + /* Recurse into a subdirectory */ + results = results.concat(ReadDirRecursive(file)) + } else { + /* Is a file */ + results.push(file) + } + }) + return results +} +function RemplaceLibs(sRepertoire) { + + var sRepertoireSrc = path.join(sRepertoire,'/src') + + // Lit le répertoire de manière récursive + let sListe = ReadDirRecursive(sRepertoireSrc) + + // Remplace les require dans le code + for (var i = 0; i < sListe.length; i++) { + // Lit le fichier + + let data = fs.readFileSync(sListe[i], 'utf8') + var result = data.replace('require(\'cozy-konnector-libs\')', 'require(\'cozy-konnector-link\')') + fs.writeFileSync(sListe[i], result, 'utf8') + } + + // Remplace les dépendances dans le package.json + // + let sFichierPackage = path.join(sRepertoire, 'package.json') + + // Charge le fichier + var MonPackage = JSON.parse(fs.readFileSync(sFichierPackage, 'utf8')); + + // Supprime les dépendances de dev + MonPackage.devDependencies = {} + + // Supprime les dépendances de prod + MonPackage.dependencies = {} + + MonPackage.dependencies["cozy-konnector-link"] = "*" + + fs.writeFileSync(sFichierPackage, JSON.stringify(MonPackage), 'utf8') + +} +module.exports = installConnector diff --git a/src/connectors_list.default.json b/connectors_list.default.json similarity index 100% rename from src/connectors_list.default.json rename to connectors_list.default.json diff --git a/src/index.js b/index.js similarity index 100% rename from src/index.js rename to index.js diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..157796f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,121 @@ +{ + "name": "downloaddocuments", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "resolve": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz", + "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "shelljs": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..868eb7a --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "downloaddocuments", + "version": "1.0.0", + "description": "", + "main": "index.js", + "dependencies": { + "shelljs": "^0.8.3" + }, + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Bouhmarc/DownloadDocuments.git" + }, + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/Bouhmarc/DownloadDocuments/issues" + }, + "homepage": "https://github.com/Bouhmarc/DownloadDocuments#readme" +} diff --git a/src/InstallConnector.js b/src/InstallConnector.js deleted file mode 100644 index fd5b9f7..0000000 --- a/src/InstallConnector.js +++ /dev/null @@ -1,72 +0,0 @@ -const child_process = require('child_process') -const fs = require('fs') -const path = require('path') -var merge = require('package-merge') - -async function mergePackages(sPackageOriginal, sPackageConnecteur) { - var dst = '' - if (!fs.existsSync(sPackageOriginal)) { - return fs.copyFileSync(sPackageConnecteur, sPackageOriginal) - } - dst = fs.readFileSync(sPackageOriginal, 'utf8') - var src = fs.readFileSync(sPackageConnecteur, 'utf8') - - // On resauve dans le package original - fs.writeFile(sPackageOriginal, merge(dst, src)) -} - -async function StartProcess(sCommande) { - child_process.execSync(sCommande, { stdio: 'inherit' }) -} - -async function installConnector(sURLGit) { - // Récupère le nom du connecteur (le nom du répertoire dans lequel sera cloné le repo) - var extension = path.extname(sURLGit) - var sRepertoire = path.basename(sURLGit, extension) - console.log('Récupération du repository') - // Clone le repo - await StartProcess('git clone ' + sURLGit) - - console.log('Remplacement de référence aux libs de cozy') - // Remplace tous les cozy-lib par cozy-without-cozy - await RemplaceLibs(path.join(process.cwd(), sRepertoire, 'src/')) - - console.log('Installation de dépendances') - - process.chdir(path.join(process.cwd(), sRepertoire)) - - // Install - await StartProcess('npm install') - - // Il reste l'installation dans le .json - // Récupération du répertoire, login, user -} -function ReadDirRecursive(sRepertoire) { - var results = [] - var list = fs.readdirSync(sRepertoire) - list.forEach(function(file) { - file = path.resolve(sRepertoire, file) - var stat = fs.statSync(file) - if (stat && stat.isDirectory()) { - /* Recurse into a subdirectory */ - results = results.concat(ReadDirRecursive(file)) - } else { - /* Is a file */ - results.push(file) - } - }) - return results -} -function RemplaceLibs(sRepertoire) { - // Lit le répertoire de manière récursive - let sListe = ReadDirRecursive(sRepertoire) - - for (var i = 0; i < sListe.length; i++) { - // Lit le fichier - - let data = fs.readFileSync(sListe[i], 'utf8') - var result = data.replace('require(\'cozy-konnector-libs\')', 'require(\'../../cozy-konnector-without-cozy/src/index.js\')') - fs.writeFileSync(sListe[i], result, 'utf8') - } -} -module.exports = installConnector diff --git a/src/connectors_list.json b/src/connectors_list.json deleted file mode 100644 index ab42009..0000000 --- a/src/connectors_list.json +++ /dev/null @@ -1,3 +0,0 @@ -[ - -] \ No newline at end of file