Skip to content

Commit

Permalink
Corrections et amélioration de l'install d'un connecteur
Browse files Browse the repository at this point in the history
  • Loading branch information
Bouhmarc committed Jan 17, 2020
1 parent 80a6b5b commit 2fa55ba
Show file tree
Hide file tree
Showing 9 changed files with 304 additions and 78 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
src/connectors_list.json
node_modules
node_modules
connectors_list.json
4 changes: 2 additions & 2 deletions src/DownloadDocuments.js → DownloadDocuments.js
Original file line number Diff line number Diff line change
Expand Up @@ -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];

})
Expand Down
156 changes: 156 additions & 0 deletions InstallConnector.js
Original file line number Diff line number Diff line change
@@ -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
File renamed without changes.
File renamed without changes.
121 changes: 121 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 23 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -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"
}
72 changes: 0 additions & 72 deletions src/InstallConnector.js

This file was deleted.

3 changes: 0 additions & 3 deletions src/connectors_list.json

This file was deleted.

0 comments on commit 2fa55ba

Please sign in to comment.