Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var request = require("request"),
- cheerio = require("cheerio"),
- url = "http://fr.wordpress.org/";
- var fs = require('fs-extra');
- var replaceall = require("replaceall");
- var exec = require('exec');
- var child_process = require('child_process');
- var tarball = require('tarball-extract')
- var wget = require('wget');
- var output = '/tmp/wp/wp.tar.gz';
- var options = {}
- var nogo = 0;
- var mysql = require('mysql');
- var connection = mysql.createConnection({
- host : 'localhost',
- user : 'root',
- password : 'xxxxxxxxxxx'
- });
- connection.connect();
- var rmdirAsync = function(path, callback) {
- fs.readdir(path, function(err, files) {
- if(err) {
- // Pass the error on to callback
- callback(err, []);
- return;
- }
- var wait = files.length,
- count = 0,
- folderDone = function(err) {
- count++;
- // If we cleaned out all the files, continue
- if( count >= wait || err) {
- fs.rmdir(path,callback);
- }
- };
- // Empty directory to bail early
- if(!wait) {
- folderDone();
- return;
- }
- // Remove one or more trailing slash to keep from doubling up
- path = path.replace(/\/+$/,"");
- files.forEach(function(file) {
- var curPath = path + "/" + file;
- fs.lstat(curPath, function(err, stats) {
- if( err ) {
- callback(err, []);
- return;
- }
- if( stats.isDirectory() ) {
- rmdirAsync(curPath, folderDone);
- } else {
- fs.unlink(curPath, folderDone);
- }
- });
- });
- });
- };
- function randomString(len, charSet) {
- charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
- var randomString = '';
- for (var i = 0; i < len; i++) {
- var randomPoz = Math.floor(Math.random() * charSet.length);
- randomString += charSet.substring(randomPoz,randomPoz+1);
- }
- return randomString;
- }
- var foldername = replaceall('.', '_', process.argv[2]);
- var themedir = process.argv[2].split('.')[0]
- var siteurl = process.argv[2]
- var username = replaceall('_', '', foldername);
- username = replaceall('-', '', username);
- console.log('folder', foldername);
- var goCreate = function() {
- fs.ensureDir(dir, function(err) {
- if (err) { // handle folder creation error
- console.log('erreur', err)
- } else { // we're all good
- console.log('dir no', dir)
- request(url, function (error, response, body) {
- if (!error) {
- var $ = cheerio.load(body),
- lastwp = $(".download-tar a")[0].attribs.href;
- var download = wget.download(lastwp, output, options);
- download.on('error', function(err) {
- console.log('error download:'+err);
- });
- download.on('end', function(output) {
- console.warn('Extracting '+output);
- tarball.extractTarball(output, '/tmp/wp/', function(err){
- if(err) console.log(err)
- fs.move('/tmp/wp/wordpress', '/srv/'+foldername, function (err) {
- if (err) return console.error(err)
- console.log("success!")
- var wpconfig = fs.readFileSync('/srv/'+foldername+'/wp-config-sample.php','utf8')
- wpconfig = wpconfig.replace('votre_nom_de_bdd', username)
- wpconfig = wpconfig.replace('votre_utilisateur_de_bdd', username)
- wpconfig = wpconfig.replace('votre_mdp_de_bdd', mysqlpassword)
- var x = wpconfig
- var startdel = x.indexOf('/**#@+')
- var enddel = x.indexOf('/**#@-*/')
- var final = x.slice(startdel, enddel)
- //var install = "update_option('template', '"+themedir+"');\n"
- // fs.writeFileSync('/srv/'+foldername+'/wp-content/install.php',install)
- request('http://api.wordpress.org/secret-key/1.1/salt/', function (erro, respons, bod) {
- wpconfig = x.replace(final, bod)
- fs.writeFileSync('/srv/'+foldername+'/wp-config.php',wpconfig)
- process.exit(1)
- });
- child_process.exec('chown www-data:www-data /srv/'+foldername+' -R', function(err, out, code) {
- if (err instanceof Error)
- throw err;
- fs.copy('/srv/staging/defaulttheme/html5blank/dist', '/srv/'+foldername+'/wp-content/themes/'+themedir, function (err) {
- rmdirAsync('/srv/'+foldername+'/wp-content/themes/twentyfifteen');
- rmdirAsync('/srv/'+foldername+'/wp-content/themes/twentysixteen');
- rmdirAsync('/srv/'+foldername+'/wp-content/themes/twentyfourteen');
- console.log('theme copied')
- //process.exit(1);
- });
- });
- /*
- fs.chown('/srv/'+foldername, 33, 33, function (err) {
- if (err) { throw err; }
- // done
- console.log('dir chowned')
- })*/
- })
- })
- /*
- targz().extract(output, '/tmp/wp/', function(err){
- if(err)
- console.log('Something is wrong ', err.stack);
- console.log('Done extracting!')
- //
- //
- //console.log('Job done!');
- });
- */
- });
- } else {
- console.log("We’ve encountered an error: " + error);
- }
- });
- }
- });
- }
- var dir = '/tmp/wp/';
- try {
- // Query the entry
- stats = fs.lstatSync(dir);
- // Is it a directory?
- if (stats.isDirectory()) {
- console.log('Del dir')
- rmdirAsync(dir, function() {
- console.log('cond0');
- if(!nogo) goCreate()
- });
- }
- } catch (e) {
- if(!nogo) { console.log('cond1');goCreate() }
- }
- var ftppassword = randomString(32)
- var mysqlpassword = randomString(32)
- var text = fs.readFileSync('/etc/ajenti/vh.json','utf8')
- var config = JSON.parse(text)
- //confsite = JSON.parse(JSON.stringify(confsite));
- var confsite = JSON.parse( fs.readFileSync('/srv/staging/example.json','utf8') )
- confsite.root = '/srv/'+foldername
- confsite.domains[0].domain = siteurl
- confsite.name = siteurl
- confsite.extensions['ajenti.plugins.vh-pureftpd.pureftpd.PureFTPDExtension'].username = username;
- confsite.extensions['ajenti.plugins.vh-pureftpd.pureftpd.PureFTPDExtension'].password = ftppassword;
- confsite.extensions['ajenti.plugins.vh-pureftpd.pureftpd.PureFTPDExtension'].path = '/srv/'+foldername;
- confsite.extensions['ajenti.plugins.vh-pureftpd.pureftpd.PureFTPDExtension'].created = false;
- confsite.extensions['ajenti.plugins.vh-mysql.mysql.MySQLExtension'].users[0].name = username;
- confsite.extensions['ajenti.plugins.vh-mysql.mysql.MySQLExtension'].users[0].password = mysqlpassword
- confsite.extensions['ajenti.plugins.vh-mysql.mysql.MySQLExtension'].databases[0].name = username
- //config.websites.push(confsite)
- //console.log( JSON.stringify(config, false, 1) )
- var createsqlquery = 'CREATE DATABASE '+username;
- console.log('createsqlquery', createsqlquery)
- connection.query(createsqlquery, function (error, results, fields) {
- console.log('erreur 1'+error)
- // error will be an Error if one occurred during the query
- // results will contain the results of the query
- // fields will contain information about the returned results fields (if any)
- connection.query('use '+username, function (error, results, fields) {
- console.log('erreur 3'+error)
- var grantsql = "GRANT ALL PRIVILEGES ON "+username+".* TO '"+username+"'@'localhost' IDENTIFIED BY '"+mysqlpassword+"'";
- console.log('grantsql', grantsql)
- connection.query(grantsql, function (error, results, fields) {
- console.log('erreur 4'+error)
- // error will be an Error if one occurred during the query
- // results will contain the results of the query
- // fields will contain information about the returned results fields (if any)
- console.log('mysql done')
- });
- });
- });
- fs.writeFile("/srv/staging/"+username+'.json', JSON.stringify(confsite, false, 1), function(err) {
- if(err) {
- return console.log(err);
- }
- child_process.exec('ajenti-ipc v import /srv/staging/'+username+'.json', function(err, out, code) {
- console.log('err', err)
- console.log('out', out)
- console.log('code', code)
- child_process.exec('ajenti-ipc v apply', function(err, out, code) {
- console.log('err', err)
- console.log('out', out)
- console.log('code', code)
- });
- });
- //console.log( JSON.stringify(config, false, 1) )
- //console.log("The file was saved!");
- return true;
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement