const fs = require("fs-extra"); const path = require("path"); const dnsSync = require("dns-sync"); const mustache = require("mustache"); const readlineSync = require("readline-sync"); const Odmdb = require("./Odmdb.js"); const conf = require(`../../../conf.json`); const Wwws = {}; Wwws.initlocaldata = (tribe, appname, profils,lg) => { const fileparam = `../../${tribe}/objects/wwws/itm/${appname}.json`; if (!fs.existsSync(fileparam)) { return res .status(404) .json({ status: 404, ref: "Wwws", msg: "appdoesnotexist", data: {} }); } const locals = fs.readJSONSync(fileparam); const localstorage = { headers: locals.headers, req: {}, itm: {}, itms: {}, options: {}, tpl: {}, ref: {}, schema: {}, }; localstorage.headers.xlang=lg; profils.forEach((p) => { if (locals.profils[p]) { if (locals.profils[p].req){ localstorage.req[p] = locals.profils[p].req; } if (locals.profils[p].ref){ Object.keys(locals.profils[p].ref).forEach(r=>{ const src= `../../${locals.profils[p].ref[r]}_${lg}.json`; if (fs.existsSync(src)){ localstorage.ref[r]=fs.readJSONSync(src) }else{ localstorage.ref[r]=`Check your ${fileparam} for ref in ${p} and ${r}` } }) } if (locals.profils[p].options){ Object.keys(locals.profils[p].options).forEach(r=>{ const src= `../../${locals.profils[p].options[r]}_${lg}.json`; if (fs.existsSync(src)){ localstorage.options[r]=fs.readJSONSync(src) }else{ localstorage.options[r]=`Check your ${fileparam} for options in ${p} profil and ${r}` } }) } if (locals.profils[p].tpl){ Object.keys(locals.profils[p].tpl).forEach(r=>{ let src= `../../${locals.profils[p].tpl[r]}`; if (!fs.existsSync(src)){ src+=`_${lg}.mustache` } if (fs.existsSync(src)){ localstorage.tpl[r]=fs.readJSONSync(src) }else{ localstorage.tpl[r]=`Check your ${fileparam} for template in ${p} profil and ${r}` } }) } if (locals.profils[p].schema){ locals.profils[p].schema.forEach(objpath=>{ const name=path.basename(objpath) const schema=Odmdb.Schema(`../../${objpath}`,false,lg) if (schema.status==200){ localstorage.schema[name]=schema.data.schema }else{ console.log(schema) localstorage.schema[name]=`Check your ${fileparam} for schema in ${p} profil` } }) } } }); return { status: 200, ref: "Wwws", msg: "initdbsuccess", data: { localstorage }, }; }; /*Wwws.apxtriinstall = (paramconf) => { if (fs.existsSync(`${conf.dirtown}/conf.json`)) { console.log("You already have a conf on this town"); process.exit(); } //first install const nginxconf = fs.readFileSync( `${conf.dirapi}/adminapi/www/adminapx/conf/nginx.conf.mustache`, "utf8" ); const proxyparams = fs.readFileSync( "../nationchains/www/adminapx/static/tpl/nginxproxy_params.mustache", "utf8" ); // saved and change nginx conf if (!fs.existsSync("/etc/nginx/nginxconf.saved")) { fs.moveSync("/etc/nginx/nginx.conf", "/etc/nginx/nginxconf.saved"); console.log( "your previous /etc/nginx/nginx.conf was backup in /etc/nginx/nginxconf.saved" ); } fs.outputFileSync( "/etc/nginx/nginx.conf", mustache.render(nginxconf, paramconf), "utf8" ); fs.outputFileSync( "/etc/nginx/proxy_params", mustache.render(proxyparams, paramconf), "utf8" ); if (!fs.existsSync(paramconf.nginx.logs)) fs.mkdirSync(paramconf.nginx.logs); paramconf.nginx.firstinstall = true; fs.outputJsonSync("../tribes/conf.json", paramconf, { space: 2, }); return Www.create(paramconf.nginx); }; */ Wwws.create = (paramnginx) => { /** * Create an nginx conf to make available a spaceweb for a tribe /www/appname/ * */ const res = { status: 200, ref: "Www", msg: "successfulwww", data: { website: paramnginx.website }, }; const nginxwebsite = fs.readFileSync( `${conf.dirapi}/adminapi/www/adminapx/conf/nginxmodelwebsite.conf.mustache`, "utf8" ); fs.outputFileSync( `./${paramnginx.fswww}www/nginx_${paramnginx.website}.conf`, mustache.render(nginxwebsite, paramnginx), "utf8" ); if (!fs.existsSync(`./${paramnginx.fswww}www/${paramnginx.website}`)) { //See later how to generate specific template of webapp fs.mkdirSync(`./${paramnginx.fswww}www/${paramnginx.website}`); } if (!fs.existsSync(`./${paramnginx.fswww}www/cdn`)) { //See later how to generate specific template of webapp fs.mkdirSync(`./${paramnginx.fswww}www/cdn`); } //restart nginx const { exec } = require("child_process"); exec(paramnginx.restart, (error, stdout, stderr) => { if (error) { if (paramnginx.firstinstall) { console.log("\x1b[42m", error, stdout, stderr, "x1b[0m"); } //@todo supprimer la derniere config et relancer res.status = 500; res.msg = "nginxError"; res.data = { msg: `${error}
${stdout}
${stderr}` }; } else { if (paramnginx.firstinstall) { // the tribes/conf.json is saved in apxtriinstall console.log( `\x1b[42m###########################################################################################\x1b[0m\n\x1b[42mWellcome into apxtri, you can now 'yarn dev' for dev or 'yarn startpm2' for prod or \n'yarn unittest' for testing purpose. Access to your town here \x1b[0m\x1b[32mhttp://adminapx\x1b[0m \x1b[42m \nto finish your town setup. Don't forget to set your localhost /etc/hosts by adding 127.0.0.1 adminapx or {LAN IP} adminapx . Check README's project to learn more. \x1b[0m\n\x1b[42m###########################################################################################\x1b[0m` ); } else { // add website to tribe conf } } }); return res; }; Wwws.setssl = () => { // Run process to change nginx conf to get a ssl }; Wwws.configlist = (tribeId) => { //if accessright R return list of conf parameter {webapp:{conf parameter}} const res = { status: 200, data: {} }; return res; }; module.exports = Wwws;