diff --git a/DownloadDocument_StandAlone.js b/DownloadDocument_StandAlone.js new file mode 100644 index 0000000..2095ec9 --- /dev/null +++ b/DownloadDocument_StandAlone.js @@ -0,0 +1,35 @@ +const fs = require('fs') +const { resolve } = require('bluebird'); + +// récupère le nom du fichier de configuration +sFichierConfig = process.argv[2] + + + // Récupère la configuration du connecteur +// stUnElement = JSON.parse(fs.readFileSync(sFichierConfig)) + + stUnElement = JSON.parse('{"source": "/Users/marcpolycarpe/Documents/Sources/Cozy/konnectors/plugins/aprr/src/index.js","folder_to_save": "/Users/marcpolycarpe/Documents/Documents/APRR/","login": "250091389862","password": "mp0682969580"}') + + stOptions = {} + + // Construit la structure avec les options + stOptions.COZY_URL = "https://localhost" + stOptions.fields = {} + stOptions.fields.login = stUnElement.login + stOptions.fields.password = stUnElement.password + stOptions.folder_to_save = stUnElement.folder_to_save + stOptions.fields.folderPath = stUnElement.folder_to_save + if (stUnElement.others) + { + stUnElement.others.forEach(stAddon => { + stOptions.fields[stAddon.name] = stAddon.value + }); + } + + process.env.COZY_FIELDS = JSON.stringify(stOptions) + + // Importe le connecteur + require(stUnElement.source) + + // Supprime le fichier +// fs.unlinkSync(sFichierConfig) diff --git a/DownloadDocuments.js b/DownloadDocuments.js index 6c4e3da..aeba0ad 100644 --- a/DownloadDocuments.js +++ b/DownloadDocuments.js @@ -1,40 +1,31 @@ const path = require('path') const fs = require('fs') +const child_process = require('child_process') +var uuid = require('uuid'); -async function DownloadDocuments() +function DownloadDocuments(sNomPlugin) { // Liste les connecteurs ConnectorsList = JSON.parse(fs.readFileSync(__dirname + '/connectors_list.json')) - // Chaque connecteur a son fichier JSON "konnector-dev-config.json" dans son répertoire - // Ajoute les données de ce fichier a la variable d'environnement - ConnectorsList.forEach(stUnElement => { - stOptions = {} - // Construit la structure avec les options - stOptions.COZY_URL = "https://localhost" - stOptions.fields = {} - stOptions.fields.login = stUnElement.login - stOptions.fields.password = stUnElement.password - stOptions.folder_to_save = stUnElement.folder_to_save - stOptions.fields.folderPath = stUnElement.folder_to_save - if (stUnElement.others) - { - stUnElement.others.forEach(stAddon => { - stOptions.fields[stAddon.name] = stAddon.value - }); - } - process.env.COZY_FIELDS = JSON.stringify(stOptions) + if (sNomPlugin != '' && stUnElement.name != sNomPlugin) + return + + // Sauvegarde un fichier de config - // Charge l'élément et débute la récupération - element = require(stUnElement.source) + // Construit le nom du fichier + sNomFichier = uuid.v4() + '.json' - // On décharge l'élément pour pouvoir utiliser plusieurs fois le même connecteur - var name = require.resolve(stUnElement.source); - delete require.cache[name]; + fs.writeFileSync(sNomFichier, JSON.stringify(stUnElement)) + // Lancement d'un autre process + + child_process.execSync( + 'node ' + __dirname + '/DownloadDocument_StandAlone.js "'+sNomFichier + '"', + {stdio: 'inherit'}) }) -} +} module.exports = DownloadDocuments \ No newline at end of file diff --git a/InstallConnector.js b/InstallConnector.js index 63ad182..a2cbf13 100644 --- a/InstallConnector.js +++ b/InstallConnector.js @@ -50,6 +50,9 @@ async function installConnector(sURLGit) { // Install les modules nodes dans le répertoire parent await StartProcess('npm install ./' + sRepertoire) + // Installe toutes les dépendances + await InstallDependances(sRepertoire) + // Il reste l'installation dans le .json // Récupération du répertoire, login, user await DeclareConnecteur(path.join(sRepertoirePlugin, sRepertoire)) @@ -61,6 +64,10 @@ async function DeclareConnecteur(sRepertoireConnecteur) sIndex = path.join(sRepertoireConnecteur, '/src/','index.js') + console.log('Saisissez le nom du plugin : ') + let sNomPlugin = await readlineSync(); + + console.log('Saisissez le répertoire de téléchargement : ') let sRepertoireTelechargement = await readlineSync(); @@ -70,6 +77,15 @@ async function DeclareConnecteur(sRepertoireConnecteur) console.log('Saisissez le mot de passe de connexion au service : ') let sMotDePasse = await readlineSync(); + + // Lit le manifest du connecteur pour savoir si il reste des paramètres + //sContenuManifest = fs.readFileSync(path.join(sRepertoireConnecteur,'manifest.konnector'), 'utf8') + // Parse le fichier JSON + //let oManifest = JSON.parse(sContenuManifest) + + //oManifest.fields + + // Lit le JSON de configuration sFichierPackage = path.join(__dirname , '/connectors_list.json') sContenuFichierListe = fs.readFileSync(sFichierPackage, 'utf8') @@ -80,6 +96,7 @@ async function DeclareConnecteur(sRepertoireConnecteur) } MonPackage = {} + MonPackage["name"] = sNomPlugin MonPackage["source"] = sIndex MonPackage["folder_to_save"] = sRepertoireTelechargement MonPackage["login"] = sLogin @@ -153,4 +170,73 @@ function RemplaceLibs(sRepertoire) { fs.writeFileSync(sFichierPackage, JSON.stringify(MonPackage), 'utf8') } -module.exports = installConnector + +function InstallDependances(sRepertoire) +{ + + return true + +} + +async function UpdateConnector(sNomPlugin) { + + let sRepertoirePlugin = path.join(process.cwd(),'/plugins/') + + + // Récupère le nom du connecteur (le nom du répertoire dans lequel sera cloné le repo) + + // On se positionne dans le répertoire du plugin + sRepertoirePluginUpdate = path.join(sRepertoirePlugin, sNomPlugin) + + // Si le répertoire n'existe pas, on sort en erreur + // if (fs.existsSync(sRepertoirePluginUpdate) == false) + // return false + + + + // On change le répertoire pour faire la maj + process.chdir(sRepertoirePluginUpdate) + + console.log('Récupération du repository') + + // Clone le repo + await StartProcess('git pull') + + console.log('Remplacement de référence aux libs de cozy') + + // Remplace tous les cozy-lib par cozy-without-cozy + await RemplaceLibs(sRepertoirePluginUpdate) + + console.log('Installation de dépendances') + + process.chdir(sRepertoirePlugin) + + // Install les modules nodes dans le répertoire parent + await StartProcess('npm install ./' + sRepertoire) + + // Installe toutes les dépendances + await InstallDependances(sRepertoire) + + console.log("Le connecteur est correctement mis à jour") + +} + +/* +function ListeDependances(sFichierOrigine) +{ + var requiredFiles = []; + var contents = fs.readFileSync(sFichierOrigine, 'utf8').split('\n'); + + contents.forEach(function(line){ + var re = /(?:require\('?"?)(.*?)(?:'?"?\))/; + var matches = re.exec(line); + + if(matches){ + requiredFiles.push(matches[1]); + } + + }); + + return requiredFiles; +}*/ +module.exports = {installConnector, UpdateConnector} diff --git a/connectors_list.default.json b/connectors_list.default.json index ed52cf1..954fd43 100644 --- a/connectors_list.default.json +++ b/connectors_list.default.json @@ -1,5 +1,6 @@ [ { + "name":"Nom du plugin" "Source":"Chemin du fichier JS source du connecteur (généralement index.js)", "login":"login de connexion au site", "password":"mot de passe de connexion au site", diff --git a/connectors_list_save b/connectors_list_save new file mode 100644 index 0000000..e69de29 diff --git a/index.js b/index.js index 452dec5..d54ba1c 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,6 @@ const downloadDocuments = require('./DownloadDocuments') -const InstallConnector = require('./InstallConnector') +const InstallConnector = require('./InstallConnector').installConnector +const UpdateConnector = require('./InstallConnector').UpdateConnector // récupère l'opération (install (i) ou download (dld)) @@ -13,11 +14,17 @@ switch (sOperation.toUpperCase()) InstallConnector(process.argv[3]) break; } + case 'UPDATE': + case 'U': + { + UpdateConnector(process.argv[3]) + break; + } case 'DOWNLOAD': case 'DLD': { // On débute le téléchargement - downloadDocuments() + downloadDocuments(process.argv[3]) break } default: