docs/docs-importer/main.js

139 lines
3.2 KiB
JavaScript
Raw Normal View History

2018-02-28 22:53:06 +01:00
'use strict';
const recursive = require('recursive-readdir');
const ora = require('ora');
const inquirer = require('inquirer');
const preferences = require('preferences');
const fs = require('fs');
const request = require('request').defaults({
jar: true
});
// request.debug = true;
// Load preferences
const prefs = new preferences('com.sismics.docs.importer',{
importer: {}
}, {
encrypt: false,
format: 'yaml'
});
// Welcome message
console.log('Sismics Docs Importer 1.0.0, https://www.sismicsdocs.com' +
'\n\n' +
'This program let you import files from your system to Sismics Docs' +
'\n');
// Ask for the base URL
const askBaseUrl = () => {
inquirer.prompt([
{
type: 'input',
name: 'baseUrl',
message: 'What is the base URL of your Docs? (eg. https://docs.mycompany.com)',
default: prefs.importer.baseUrl
}
]).then(answers => {
// Save base URL
prefs.importer.baseUrl = answers.baseUrl;
// Test base URL
const spinner = ora({
text: 'Checking connection to Docs',
spinner: 'flips'
}).start();
request(answers.baseUrl + '/api/app', function (error, response) {
if (!response || response.statusCode !== 200) {
spinner.fail('Connection to Docs failed: ' + error);
askBaseUrl();
return;
}
spinner.succeed('Connection OK');
askCredentials();
});
});
};
askBaseUrl();
// Ask for credentials
const askCredentials = () => {
console.log('');
inquirer.prompt([
{
type: 'input',
name: 'username',
message: 'Account\'s username?',
default: prefs.importer.username
},
{
type: 'password',
name: 'password',
message: 'Account\'s password?',
default: prefs.importer.password
}
]).then(answers => {
// Save credentials
prefs.importer.username = answers.username;
prefs.importer.password = answers.password;
// Test credentials
const spinner = ora({
text: 'Checking connection to Docs',
spinner: 'flips'
}).start();
request.post({
url: prefs.importer.baseUrl + '/api/user/login',
form: {
username: answers.username,
password: answers.password,
remember: true
}
}, function (error, response) {
if (!response || response.statusCode !== 200) {
spinner.fail('Username or password incorrect');
askCredentials();
return;
}
spinner.succeed('Authentication OK');
askPath();
});
});
};
// Ask for the path
const askPath = () => {
console.log('');
inquirer.prompt([
{
type: 'input',
name: 'path',
message: 'What is the folder path you want to import?',
default: prefs.importer.path
}
]).then(answers => {
// Save path
prefs.importer.path = answers.path;
// Test path
const spinner = ora({
text: 'Checking import path',
spinner: 'flips'
}).start();
fs.lstat(answers.path, (err, stats) => {
if (err || !stats.isDirectory()) {
spinner.fail('Please enter a valid directory path');
return;
}
recursive(answers.path, function (err, files) {
spinner.succeed(files.length + ' files in this directory');
// TODO Then?
});
});
});
};