Advertisement
Guest User

Untitled

a guest
May 25th, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var request = require("request"),
  2.   cheerio = require("cheerio"),
  3.   url = "http://fr.wordpress.org/";
  4. var fs = require('fs-extra');
  5. var replaceall = require("replaceall");
  6. var exec = require('exec');
  7. var child_process = require('child_process');
  8.  
  9. var tarball = require('tarball-extract')
  10. var wget = require('wget');
  11. var output = '/tmp/wp/wp.tar.gz';  
  12. var options = {}
  13. var nogo = 0;
  14. var mysql      = require('mysql');
  15. var connection = mysql.createConnection({
  16.   host     : 'localhost',
  17.   user     : 'root',
  18.   password : 'xxxxxxxxxxx'
  19. });
  20.  
  21. connection.connect();
  22.  
  23.  
  24. var rmdirAsync = function(path, callback) {
  25.     fs.readdir(path, function(err, files) {
  26.         if(err) {
  27.             // Pass the error on to callback
  28.             callback(err, []);
  29.             return;
  30.         }
  31.         var wait = files.length,
  32.             count = 0,
  33.             folderDone = function(err) {
  34.             count++;
  35.             // If we cleaned out all the files, continue
  36.             if( count >= wait || err) {
  37.                 fs.rmdir(path,callback);
  38.             }
  39.         };
  40.         // Empty directory to bail early
  41.         if(!wait) {
  42.             folderDone();
  43.             return;
  44.         }
  45.        
  46.         // Remove one or more trailing slash to keep from doubling up
  47.         path = path.replace(/\/+$/,"");
  48.         files.forEach(function(file) {
  49.             var curPath = path + "/" + file;
  50.             fs.lstat(curPath, function(err, stats) {
  51.                 if( err ) {
  52.                     callback(err, []);
  53.                     return;
  54.                 }
  55.                 if( stats.isDirectory() ) {
  56.                     rmdirAsync(curPath, folderDone);
  57.                 } else {
  58.                     fs.unlink(curPath, folderDone);
  59.                 }
  60.             });
  61.         });
  62.     });
  63. };
  64.  
  65. function randomString(len, charSet) {
  66.     charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  67.     var randomString = '';
  68.     for (var i = 0; i < len; i++) {
  69.         var randomPoz = Math.floor(Math.random() * charSet.length);
  70.         randomString += charSet.substring(randomPoz,randomPoz+1);
  71.     }
  72.     return randomString;
  73. }
  74.  
  75. var foldername = replaceall('.', '_', process.argv[2]);
  76. var themedir = process.argv[2].split('.')[0]
  77. var siteurl = process.argv[2]
  78. var username = replaceall('_', '', foldername);  
  79. username = replaceall('-', '', username);
  80. console.log('folder', foldername);
  81.  
  82.  
  83.  
  84. var goCreate = function() {
  85.  
  86.   fs.ensureDir(dir, function(err) {
  87.     if (err) {  // handle folder creation error
  88.       console.log('erreur', err)    
  89.     } else { // we're all good
  90.       console.log('dir no', dir)
  91.  
  92.  
  93.       request(url, function (error, response, body) {
  94.         if (!error) {
  95.           var $ = cheerio.load(body),
  96.             lastwp = $(".download-tar a")[0].attribs.href;
  97.      
  98.             var download = wget.download(lastwp, output, options);
  99.             download.on('error', function(err) {
  100.                 console.log('error download:'+err);
  101.             });
  102.             download.on('end', function(output) {
  103.                 console.warn('Extracting '+output);
  104.                
  105.                
  106.                 tarball.extractTarball(output, '/tmp/wp/', function(err){
  107.                   if(err) console.log(err)
  108.                   fs.move('/tmp/wp/wordpress', '/srv/'+foldername, function (err) {
  109.                     if (err) return console.error(err)
  110.                     console.log("success!")
  111.                     var wpconfig = fs.readFileSync('/srv/'+foldername+'/wp-config-sample.php','utf8')
  112.                     wpconfig = wpconfig.replace('votre_nom_de_bdd', username)
  113.                     wpconfig = wpconfig.replace('votre_utilisateur_de_bdd', username)
  114.                     wpconfig = wpconfig.replace('votre_mdp_de_bdd', mysqlpassword)
  115.                     var x = wpconfig
  116.                     var startdel = x.indexOf('/**#@+')
  117.                     var enddel = x.indexOf('/**#@-*/')
  118.                     var final = x.slice(startdel, enddel)
  119.                    
  120.                     //var install = "update_option('template', '"+themedir+"');\n"
  121.                    
  122.                  //   fs.writeFileSync('/srv/'+foldername+'/wp-content/install.php',install)
  123.                    
  124.                     request('http://api.wordpress.org/secret-key/1.1/salt/', function (erro, respons, bod) {
  125.                         wpconfig = x.replace(final, bod)
  126.                         fs.writeFileSync('/srv/'+foldername+'/wp-config.php',wpconfig)
  127.                         process.exit(1)
  128.                     });
  129.  
  130.                    
  131.                    
  132.                     child_process.exec('chown www-data:www-data /srv/'+foldername+' -R', function(err, out, code) {
  133.                       if (err instanceof Error)
  134.                         throw err;
  135.                       fs.copy('/srv/staging/defaulttheme/html5blank/dist', '/srv/'+foldername+'/wp-content/themes/'+themedir, function (err) {
  136.                           rmdirAsync('/srv/'+foldername+'/wp-content/themes/twentyfifteen');
  137.                           rmdirAsync('/srv/'+foldername+'/wp-content/themes/twentysixteen');
  138.                           rmdirAsync('/srv/'+foldername+'/wp-content/themes/twentyfourteen');
  139.                           console.log('theme copied')
  140.                           //process.exit(1);
  141.                       });
  142.                     });
  143.                     /*
  144.                     fs.chown('/srv/'+foldername, 33, 33, function (err) {
  145.                       if (err) { throw err; }
  146.                       // done
  147.                       console.log('dir chowned')
  148.                     })*/
  149.                    
  150.                   })
  151.                  
  152.                  
  153.                 })
  154.      
  155.                 /*
  156.                 targz().extract(output, '/tmp/wp/', function(err){
  157.                  
  158.                  
  159.                   if(err)
  160.                     console.log('Something is wrong ', err.stack);
  161.                  
  162.                   console.log('Done extracting!')
  163.                   //
  164.                   //
  165.                   //console.log('Job done!');
  166.                 });
  167.      
  168.                 */
  169.             });
  170.            
  171.         } else {
  172.           console.log("We’ve encountered an error: " + error);
  173.         }
  174.        
  175.       });
  176.  
  177.  
  178.       }          
  179.   });
  180.  
  181.  
  182.  
  183.  
  184. }
  185.  
  186. var dir = '/tmp/wp/';
  187.  
  188. try {
  189.     // Query the entry
  190.     stats = fs.lstatSync(dir);
  191.  
  192.     // Is it a directory?
  193.     if (stats.isDirectory()) {
  194.         console.log('Del dir')
  195.         rmdirAsync(dir, function() {
  196.            console.log('cond0');
  197.            if(!nogo) goCreate()
  198.         });
  199.     }
  200.    
  201. } catch (e) {
  202.   if(!nogo) { console.log('cond1');goCreate() }  
  203. }
  204.  
  205. var ftppassword = randomString(32)
  206. var mysqlpassword = randomString(32)
  207.  
  208. var text = fs.readFileSync('/etc/ajenti/vh.json','utf8')
  209. var config = JSON.parse(text)
  210.  
  211. //confsite = JSON.parse(JSON.stringify(confsite));
  212. var confsite = JSON.parse( fs.readFileSync('/srv/staging/example.json','utf8') )
  213.  
  214. confsite.root = '/srv/'+foldername
  215. confsite.domains[0].domain = siteurl
  216. confsite.name = siteurl
  217. confsite.extensions['ajenti.plugins.vh-pureftpd.pureftpd.PureFTPDExtension'].username = username;
  218. confsite.extensions['ajenti.plugins.vh-pureftpd.pureftpd.PureFTPDExtension'].password = ftppassword;
  219. confsite.extensions['ajenti.plugins.vh-pureftpd.pureftpd.PureFTPDExtension'].path = '/srv/'+foldername;
  220. confsite.extensions['ajenti.plugins.vh-pureftpd.pureftpd.PureFTPDExtension'].created = false;
  221.  
  222. confsite.extensions['ajenti.plugins.vh-mysql.mysql.MySQLExtension'].users[0].name = username;
  223. confsite.extensions['ajenti.plugins.vh-mysql.mysql.MySQLExtension'].users[0].password = mysqlpassword
  224. confsite.extensions['ajenti.plugins.vh-mysql.mysql.MySQLExtension'].databases[0].name = username
  225. //config.websites.push(confsite)
  226.  
  227. //console.log( JSON.stringify(config, false, 1) )
  228. var createsqlquery = 'CREATE DATABASE '+username;
  229.  
  230. console.log('createsqlquery', createsqlquery)
  231. connection.query(createsqlquery, function (error, results, fields) {
  232.   console.log('erreur 1'+error)
  233.   // error will be an Error if one occurred during the query
  234.   // results will contain the results of the query
  235.   // fields will contain information about the returned results fields (if any)
  236.  
  237.   connection.query('use '+username, function (error, results, fields) {
  238.     console.log('erreur 3'+error)
  239.  
  240.     var grantsql = "GRANT ALL PRIVILEGES ON "+username+".* TO '"+username+"'@'localhost' IDENTIFIED BY '"+mysqlpassword+"'";
  241.     console.log('grantsql', grantsql)
  242.    
  243.     connection.query(grantsql, function (error, results, fields) {
  244.       console.log('erreur 4'+error)
  245.       // error will be an Error if one occurred during the query
  246.       // results will contain the results of the query
  247.       // fields will contain information about the returned results fields (if any)
  248.       console.log('mysql done')
  249.     });
  250.  
  251.   });
  252.  
  253. });
  254.  
  255. fs.writeFile("/srv/staging/"+username+'.json', JSON.stringify(confsite, false, 1), function(err) {
  256.    
  257.     if(err) {
  258.         return console.log(err);
  259.     }
  260.  
  261.     child_process.exec('ajenti-ipc v import /srv/staging/'+username+'.json', function(err, out, code) {
  262.         console.log('err', err)
  263.         console.log('out', out)
  264.         console.log('code', code)
  265.         child_process.exec('ajenti-ipc v apply', function(err, out, code) {
  266.             console.log('err', err)
  267.             console.log('out', out)
  268.             console.log('code', code)
  269.            
  270.         });
  271.  
  272.     });
  273.  
  274.     //console.log( JSON.stringify(config, false, 1) )
  275.     //console.log("The file was saved!");
  276.     return true;
  277. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement