2023-12-07 12:04:19 +01:00
const fs = require ( "fs-extra" ) ;
const path = require ( "path" ) ;
const dnsSync = require ( "dns-sync" ) ;
const mustache = require ( "mustache" ) ;
const readlineSync = require ( "readline-sync" ) ;
2024-04-18 11:35:29 +02:00
const Odmdb = require ( "./Odmdb.js" ) ;
2024-03-20 11:24:03 +01:00
const conf = require ( ` ../../../conf.json ` ) ;
2023-12-07 12:04:19 +01:00
const Wwws = { } ;
2024-04-18 11:35:29 +02:00
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 } ,
} ;
} ;
2023-12-07 12:04:19 +01:00
/ * W w w s . a p x t r i i n s t a l l = ( p a r a m c o n f ) = > {
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 ;
2024-03-15 08:49:23 +01:00
fs . outputJsonSync ( "../tribes/conf.json" , paramconf , {
2023-12-07 12:04:19 +01:00
space : 2 ,
} ) ;
return Www . create ( paramconf . nginx ) ;
} ;
* /
Wwws . create = ( paramnginx ) => {
/ * *
* Create an nginx conf to make available a spaceweb for a tribe / www / appname /
2024-04-18 11:35:29 +02:00
*
2023-12-07 12:04:19 +01:00
* /
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 } <br> ${ stdout } <br> ${ stderr } ` } ;
} else {
if ( paramnginx . firstinstall ) {
// the tribes/conf.json is saved in apxtriinstall
console . log (
` \x 1b[42m########################################################################################### \x 1b[0m \n \x 1b[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 \x 1b[0m \x 1b[32mhttp://adminapx \x 1b[0m \x 1b[42m \n to 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. \x 1b[0m \n \x 1b[42m########################################################################################### \x 1b[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 ;