- AbitaregliIblei.it
- Server aggiornamenti agli script. - Editor HTML corretto un po'. - Record Mysql per server (appena iniziato)
This commit is contained in:
@@ -39,4 +39,5 @@ FTPSERVER_PORT=21
|
||||
FTPSERVER_USER=ftpusrsrv_
|
||||
FTPSERVER_PWD=ftpmypwd@1A_
|
||||
AUTH_NEW_SITES=123123123
|
||||
SCRIPTS_DIR=admin_scripts
|
||||
SCRIPTS_DIR=admin_scripts
|
||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||
|
||||
@@ -38,4 +38,5 @@ FTPSERVER_HOST=139.162.166.31
|
||||
FTPSERVER_PORT=21
|
||||
FTPSERVER_USER=ftpusrsrv_
|
||||
FTPSERVER_PWD=ftpmypwd@1A_
|
||||
AUTH_NEW_SITES=123123123
|
||||
AUTH_NEW_SITES=123123123
|
||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||
|
||||
@@ -7,8 +7,8 @@ PORT=3000
|
||||
appTelegram_TEST=["17","18"]
|
||||
appTelegram=["17","18"]
|
||||
ENABLE_PUSHNOTIFICATION=1
|
||||
DIRECTORY_SERVER=freeplanet_serverside
|
||||
SERVERDIR_WEBSITE=www.freeplanet_server
|
||||
DIRECTORY_SERVER=/var/www/www.freeplanet_server
|
||||
SERVERDIR_WEBSITE=
|
||||
PORT_APP1="0"
|
||||
DOMAIN=mongodb://localhost:32001/
|
||||
AUTH_MONGODB=1
|
||||
@@ -33,5 +33,6 @@ SECRTK=jAxKm02emx5SeJvz2IGmtRf6YqCgope
|
||||
TOKEN_LIFE=2h
|
||||
REFRESH_TOKEN_LIFE=14d
|
||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNVZZ
|
||||
DOMAINS=[{"hostname": "piuchebuono.app","port": 3000 },{"hostname":"gruppomacro.app","port": 3010}]
|
||||
SCRIPTS_DIR=admin_scripts
|
||||
DOMAINS=[{"hostname":"piuchebuono.app","port":"3000"},{"hostname":"gruppomacro.app","port":"3010"}]
|
||||
SCRIPTS_DIR=admin_scripts
|
||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||
|
||||
@@ -7,8 +7,8 @@ PORT=3001
|
||||
appTelegram_TEST=["17","18"]
|
||||
appTelegram=["17","18"]
|
||||
ENABLE_PUSHNOTIFICATION=1
|
||||
DIRECTORY_SERVER=freeplanet_serverside
|
||||
SERVERDIR_WEBSITE=test.freeplanet_server
|
||||
DIRECTORY_SERVER=/var/www/test.freeplanet_serverside
|
||||
SERVERDIR_WEBSITE=test.piuchebuono.app
|
||||
PORT_APP1="0"
|
||||
DOMAIN=mongodb://localhost:32002/
|
||||
AUTH_MONGODB=1
|
||||
@@ -31,4 +31,7 @@ PROJECT_DESCR_MAIN='__PROJECTS'
|
||||
SECRK=iUUb38v23jjDFaosWj92axkBOXCQ
|
||||
TOKEN_LIFE=2h
|
||||
REFRESH_TOKEN_LIFE=14d
|
||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
||||
DOMAINS=[{"hostname":"test.piuchebuono.app","port":"3002"},{"hostname":"test.gruppomacro.app","port":"3012"},{"hostname":"test.abitaregliiblei.it","port":"3022"}]
|
||||
SCRIPTS_DIR=admin_scripts
|
||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||
|
||||
@@ -5,7 +5,7 @@ SEND_EMAIL=1
|
||||
PORT=3001
|
||||
ENABLE_PUSHNOTIFICATION=1
|
||||
DIRECTORY_SERVER=/var/www/testriso.freeplanet_serverside
|
||||
SERVERDIR_WEBSITE=testriso.piuchebuono.app
|
||||
SERVERDIR_WEBSITE=test.riso.app
|
||||
PORT_APP1="0"
|
||||
DOMAIN=mongodb://localhost:32002/
|
||||
AUTH_MONGODB=1
|
||||
@@ -28,4 +28,7 @@ PROJECT_DESCR_MAIN='__PROJECTS'
|
||||
SECRK=iUUb38v23jjDFaosWj92axkBOXCQ
|
||||
TOKEN_LIFE=2h
|
||||
REFRESH_TOKEN_LIFE=14d
|
||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
||||
DOMAINS=[{"hostname":"test.abitaregliiblei.it","port":"3021"}]
|
||||
SCRIPTS_DIR=admin_scripts
|
||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/bin/bash
|
||||
#DATA|TITLE|Input Test
|
||||
#DATA|DESCRIZ|Input Test
|
||||
#DATA|SOCK|true
|
||||
|
||||
echo "Inizio dello Script... "
|
||||
echo ".............................................."
|
||||
|
||||
16
admin_scripts/5_UPGRADE/01_export_FreePlanet_to_pcb.sh
Normal file
16
admin_scripts/5_UPGRADE/01_export_FreePlanet_to_pcb.sh
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
#DATA|TITLE|Esporta FreePlanet sul Server PCB
|
||||
#DATA|DESCRIZ|Esporta FreePlanet in "exp_db_test.tar.gz" e lo invia sul Server PCB
|
||||
#DATA|SOCK|false
|
||||
|
||||
DATABASE="FreePlanet"
|
||||
FILEMONGODB="export_database_$DATABASE"
|
||||
FILEZIP="exp_db_test.tar.gz"
|
||||
|
||||
source .my_cfg.ini
|
||||
|
||||
mongodump --db $DATABASE --authenticationDatabase admin -u admin -p $PWDDB --out $FILEMONGODB
|
||||
|
||||
tar cvfz $FILEZIP $FILEMONGODB
|
||||
|
||||
scp -P 8822 $FILEZIP pcbuser@pcb:~
|
||||
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
#DATA|TITLE|Importa FreePlanet su test_FreePlanet
|
||||
#DATA|DESCRIZ|Importa FreePlanet (su test_FreePlanet) dal file inviato dal server mail.freeplanet.app
|
||||
#DATA|SOCK|false
|
||||
|
||||
FILEZIP="exp_db_test.tar.gz"
|
||||
DATABASEIN="FreePlanet"
|
||||
DATABASEOUT="test_FreePlanet"
|
||||
FILEMONGODBIN="export_database_$DATABASEIN"
|
||||
FILEMONGODBOUT="export_database_$DATABASEOUT"
|
||||
|
||||
source .my_cfg.ini
|
||||
|
||||
# Copia il file .tar.gz nel container
|
||||
docker cp /home/pcbuser/$FILEZIP mongodbtest:/home/test/
|
||||
|
||||
# Notifica l'intenzione di estrarre il contenuto del file tar.gz
|
||||
echo "Estrazione di $FILEZIP in /home/test/ all'interno del container..."
|
||||
echo ""
|
||||
|
||||
# Estrai il contenuto del file tar.gz nel container
|
||||
docker exec -it mongodbtest tar -xvzf /home/test/$FILEZIP -C /home/test/
|
||||
|
||||
# Rinomina la directory contenente il database esportato
|
||||
docker exec -i mongodbtest mv /home/test/$FILEMONGODBIN /home/test/$FILEMONGODBOUT
|
||||
|
||||
# Ripristina il database MongoDB dal dump
|
||||
docker exec -i mongodbtest mongorestore --username admin --password $PWDDB_TEST --authenticationDatabase admin --nsFrom='FreePlanet.*' --nsTo='test_FreePlanet.*' /home/test/>
|
||||
30
admin_scripts/5_UPGRADE/backup_sito_web.sh
Normal file
30
admin_scripts/5_UPGRADE/backup_sito_web.sh
Normal file
@@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
#DATA|TITLE|Copia sito Web
|
||||
#DATA|DESCRIZ|Fai una copia di Backup del sito web
|
||||
#DATA|SOCK|false
|
||||
|
||||
if [ "$1" = "" ]; then
|
||||
read -p "Inserisci il Sito Web (pippo.it)" WEBSITE
|
||||
else
|
||||
WEBSITE=$1
|
||||
fi
|
||||
|
||||
FILEBACKUP_SITE="BACKUP_$WEBSITE_$(date +"%Y-%m-%d").tar.gz"
|
||||
|
||||
echo "********************************"
|
||||
|
||||
msg="*** COPIA SITO WEB di $WEBSITE (Y/N) ? "
|
||||
|
||||
if [ "$1" = "" ]; then
|
||||
read -p "$msg" risposta
|
||||
else
|
||||
echo $msg
|
||||
risposta=$1
|
||||
fi
|
||||
|
||||
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
||||
tar cvfz $FILEBACKUP_SITE /var/www/$WEBSITE/
|
||||
|
||||
echo "*** COPIA TERMINATA ***
|
||||
echo "***********************"
|
||||
fi
|
||||
20
admin_scripts/6_CERTIFICATI/create_new_cert.sh
Executable file
20
admin_scripts/6_CERTIFICATI/create_new_cert.sh
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
#DATA|TITLE|Creazione Certificato
|
||||
#DATA|DESCRIZ|Crea un Certificato utilizzando cloudflare per dominio e *.dominio
|
||||
#DATA|SOCK|true
|
||||
|
||||
if [ "$1" = "" ]; then
|
||||
read -p "Inserisci il nome del Dominio " DOMINIO
|
||||
else
|
||||
DOMINIO=$1
|
||||
fi
|
||||
|
||||
echo sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /root/.secrets/certbot/cloudflare.ini -d $DOMINIO,*.$DOMINIO --preferred-challenges dns-01
|
||||
|
||||
read -p "CONTINUARE ed Eseguirlo ? (Y/N) ? " risposta
|
||||
|
||||
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
||||
|
||||
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /root/.secrets/certbot/cloudflare.ini -d $DOMINIO,*.$DOMINIO --preferred-challenges dns-01
|
||||
|
||||
fi
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
source ./.env.prod.pcb
|
||||
|
||||
echo "Sincronizzazione in corso PCB PRODUZIONE ... /var/www/$SERVERDIR_WEBSITE/"
|
||||
echo "Sincronizzazione in corso PCB PRODUZIONE ... $DIRECTORY_SERVER/"
|
||||
echo ""
|
||||
|
||||
#!/bin/bash
|
||||
@@ -11,7 +11,7 @@ echo ""
|
||||
REMOTE_USER="pcbuser"
|
||||
REMOTE_HOST="pcb"
|
||||
REMOTE_PORT="8822"
|
||||
REMOTE_DIR="/var/www/$SERVERDIR_WEBSITE"
|
||||
REMOTE_DIR="$DIRECTORY_SERVER"
|
||||
SSH_OPTIONS="-p $REMOTE_PORT"
|
||||
|
||||
# Array di cartelle e file da sincronizzare
|
||||
|
||||
@@ -2,18 +2,18 @@
|
||||
|
||||
source ./.env.test.pcb
|
||||
|
||||
echo "Sincronizzazione in corso PCB TEST ... /var/www/$SERVERDIR_WEBSITE/"
|
||||
echo "Sincronizzazione in corso PCB TEST ... /var/www/$DIRECTORY_SERVER/"
|
||||
echo ""
|
||||
|
||||
rsync -avz -e 'ssh -p 8822' css pcbuser@pcb:/var/www/$SERVERDIR_WEBSITE/
|
||||
rsync -avz -e 'ssh -p 8822' docs pcbuser@pcb:/var/www/$SERVERDIR_WEBSITE/
|
||||
rsync -avz -e 'ssh -p 8822' emails pcbuser@pcb:/var/www/$SERVERDIR_WEBSITE/
|
||||
rsync -avz -e 'ssh -p 8822' images pcbuser@pcb:/var/www/$SERVERDIR_WEBSITE/
|
||||
rsync -avz -e 'ssh -p 8822' plugins pcbuser@pcb:/var/www/$SERVERDIR_WEBSITE/
|
||||
rsync -avz -e 'ssh -p 8822' sass pcbuser@pcb:/var/www/$SERVERDIR_WEBSITE/
|
||||
rsync -avz -e 'ssh -p 8822' src pcbuser@pcb:/var/www/$SERVERDIR_WEBSITE/
|
||||
rsync -avz -e 'ssh -p 8822' .env.test.pcb pcbuser@pcb:/var/www/$SERVERDIR_WEBSITE/.env.test
|
||||
rsync -avz -e 'ssh -p 8822' .env.test.pcb pcbuser@pcb:/var/www/$SERVERDIR_WEBSITE/
|
||||
rsync -avz -e 'ssh -p 8822' package.json pcbuser@pcb:/var/www/$SERVERDIR_WEBSITE/package.json
|
||||
rsync -avz -e 'ssh -p 8822' css pcbuser@pcb:/var/www/$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' docs pcbuser@pcb:/var/www/$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' emails pcbuser@pcb:/var/www/$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' images pcbuser@pcb:/var/www/$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' plugins pcbuser@pcb:/var/www/$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' sass pcbuser@pcb:/var/www/$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' src pcbuser@pcb:/var/www/$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' .env.test.pcb pcbuser@pcb:/var/www/$DIRECTORY_SERVER/.env.test
|
||||
rsync -avz -e 'ssh -p 8822' .env.test.pcb pcbuser@pcb:/var/www/$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' package.json pcbuser@pcb:/var/www/$DIRECTORY_SERVER/package.json
|
||||
|
||||
echo "Sincronizzazione TERMINATA! - SERVER PCB!"
|
||||
|
||||
@@ -2,20 +2,68 @@
|
||||
|
||||
source ./.env.test.risosrv
|
||||
|
||||
echo "Sincronizzazione in corso... $DIRECTORY_SERVER"
|
||||
rsync -avz -e 'scp -p 8822' .env.test.risosrv pcbuser@pcb:$DIRECTORY_SERVER/.env.test
|
||||
rsync -avz -e 'ssh -p 8822' ecosystem.config.testriso.js pcbuser@pcb:$DIRECTORY_SERVER/ecosystem.config.js
|
||||
rsync -avz -e 'ssh -p 8822' css pcbuser@pcb:$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' docs pcbuser@pcb:$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' emails pcbuser@pcb:$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' images pcbuser@pcb:$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' plugins pcbuser@pcb:$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' sass pcbuser@pcb:$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' src --exclude 'server/router/upload' pcbuser@pcb:$DIRECTORY_SERVER/
|
||||
rsync -avz -e 'ssh -p 8822' ecosystem.config.testriso.js pcbuser@pcb:$DIRECTORY_SERVER/ecosystem.config.js
|
||||
rsync -avz -e 'ssh -p 8822' package.json pcbuser@pcb:$DIRECTORY_SERVER/package.json
|
||||
echo "Sincronizzazione in corso ... $DIRECTORY_SERVER/"
|
||||
echo ""
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Configurazione
|
||||
REMOTE_USER="pcbuser"
|
||||
REMOTE_HOST="pcb"
|
||||
REMOTE_PORT="8822"
|
||||
REMOTE_DIR="$DIRECTORY_SERVER"
|
||||
SSH_OPTIONS="-p $REMOTE_PORT"
|
||||
CONFIG_JS="ecosystem.config.testriso.js"
|
||||
ENV_FILE=".env.test.risosrv"
|
||||
ENV_OUT=".env.test"
|
||||
|
||||
#ENV_FILE=".env.prod.pcb"
|
||||
#ENV_OUT=".env.production"
|
||||
|
||||
# Array di cartelle e file da sincronizzare
|
||||
SYNC_ITEMS=(
|
||||
"css"
|
||||
"docs"
|
||||
"emails"
|
||||
"plugins"
|
||||
"sass"
|
||||
"src"
|
||||
)
|
||||
|
||||
echo $REMOTE_DIR
|
||||
|
||||
echo ""
|
||||
echo "*** Copia Cartelle ... "
|
||||
|
||||
|
||||
# Esegui rsync per le cartelle
|
||||
rsync -avz --delete \
|
||||
--exclude='src/server/router/upload/' \
|
||||
-e "ssh $SSH_OPTIONS" \
|
||||
"${SYNC_ITEMS[@]}" \
|
||||
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
||||
|
||||
echo ""
|
||||
echo "*** Copia del file $ENV_FILE su $ENV_OUT ... "
|
||||
|
||||
# Sincronizza i file specifici
|
||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||
$ENV_FILE "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$ENV_OUT"
|
||||
|
||||
echo ""
|
||||
echo "*** Copia del file package.json ... "
|
||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||
package.json "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/package.json"
|
||||
|
||||
echo ""
|
||||
echo "*** Copia del file ecosystem.config.js ... "
|
||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||
"$CONFIG_JS" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
||||
|
||||
# Verifica il risultato
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Sincronizzazione completata con successo. SERVER $REMOTE_DIR! "
|
||||
else
|
||||
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
||||
fi
|
||||
|
||||
echo "**************************"
|
||||
echo "Sincronizzazione TERMINATA! - TESTSRISO.FREEPLANET_SERVER!"
|
||||
echo "https://testriso.piuchebuono.app"
|
||||
echo "**************************"
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
Include /etc/apache2/sites-available/dominioinclude_test.abitaregliiblei.it.conf
|
||||
|
||||
# Configurazione per HTTP
|
||||
<VirtualHost 65.108.222.97:80>
|
||||
ServerName ${MIODOMINIO_COMPLETO}
|
||||
DocumentRoot /var/www/${MIODOMINIO_COMPLETO}
|
||||
|
||||
RewriteEngine on
|
||||
# Redirigi tutto il traffico HTTP verso HTTPS
|
||||
RewriteCond %{SERVER_NAME} =${MIODOMINIO_COMPLETO} [OR]
|
||||
RewriteCond %{SERVER_NAME} =www.${MIODOMINIO_COMPLETO}
|
||||
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
|
||||
|
||||
ErrorLog /var/www/${MIODOMINIO_COMPLETO}/logs/error.log
|
||||
CustomLog /var/www/${MIODOMINIO_COMPLETO}/logs/access.log combined
|
||||
</VirtualHost>
|
||||
|
||||
|
||||
# Configurazione per HTTPS
|
||||
<IfModule mod_ssl.c>
|
||||
<VirtualHost 65.108.222.97:443>
|
||||
ServerName ${MIODOMINIO_COMPLETO}
|
||||
DocumentRoot /var/www/${MIODOMINIO_COMPLETO}
|
||||
|
||||
ErrorLog /var/www/${MIODOMINIO_COMPLETO}/logs/error.log
|
||||
CustomLog /var/www/${MIODOMINIO_COMPLETO}/logs/access.log combined
|
||||
|
||||
<Directory /var/www/${MIODOMINIO_COMPLETO}/>
|
||||
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
RewriteEngine on
|
||||
Include /etc/letsencrypt/options-ssl-apache.conf
|
||||
SSLCertificateFile /etc/letsencrypt/live/${MIODOMINIO}/fullchain.pem
|
||||
SSLCertificateKeyFile /etc/letsencrypt/live/${MIODOMINIO}/privkey.pem
|
||||
</VirtualHost>
|
||||
</IfModule>
|
||||
@@ -0,0 +1,4 @@
|
||||
Define MIODOMINIO abitaregliiblei.it
|
||||
Define MIODOMINIO_COMPLETO test.abitaregliiblei.it
|
||||
Define MIOURL_TESTAPI testapi.abitaregliiblei.it
|
||||
Define PORTA 3022
|
||||
51
docs/apache2/ssl_vhost_api.abitaregliiblei.it.conf
Normal file
51
docs/apache2/ssl_vhost_api.abitaregliiblei.it.conf
Normal file
@@ -0,0 +1,51 @@
|
||||
Include /etc/apache2/sites-available/dominioinclude_test.abitaregliiblei.it.conf
|
||||
|
||||
# Configurazione per HTTP
|
||||
<VirtualHost 65.108.222.97:80>
|
||||
ServerName ${MIODOMINIO_COMPLETO}
|
||||
DocumentRoot /var/www/${MIODOMINIO_COMPLETO}
|
||||
|
||||
RewriteEngine on
|
||||
# Redirigi tutto il traffico HTTP verso HTTPS
|
||||
RewriteCond %{SERVER_NAME} =${MIODOMINIO_COMPLETO} [OR]
|
||||
RewriteCond %{SERVER_NAME} =www.${MIODOMINIO_COMPLETO}
|
||||
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
|
||||
|
||||
ErrorLog /var/www/${MIODOMINIO_COMPLETO}/logs/error.log
|
||||
CustomLog /var/www/${MIODOMINIO_COMPLETO}/logs/access.log combined
|
||||
</VirtualHost>
|
||||
|
||||
<VirtualHost 65.108.222.97:443>
|
||||
|
||||
ServerName ${MIOURL_TESTAPI}
|
||||
ServerAdmin surya@riso.app
|
||||
|
||||
SSLEngine On
|
||||
SSLProtocol -ALL +TLSv1.2 +TLSv1.3
|
||||
SSLCompression Off
|
||||
SSLHonorCipherOrder off
|
||||
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:E>
|
||||
SSLVerifyDepth 10
|
||||
SSLCertificateFile /etc/letsencrypt/live/${MIODOMINIO}/cert.pem
|
||||
SSLCertificateKeyFile /etc/letsencrypt/live/${MIODOMINIO}/privkey.pem
|
||||
|
||||
ProxyPreserveHost On
|
||||
SSLProxyEngine On
|
||||
SSLProxyVerify None
|
||||
SSLProxyCheckPeerCN Off
|
||||
SSLProxyCheckPeerName Off
|
||||
ProxyPass / https://localhost:${PORTA}/ retry=0 timeout=5 connectiontimeout=2
|
||||
ProxyPassReverse / https://localhost:${PORTA}/
|
||||
|
||||
ProxyTimeout 5
|
||||
|
||||
LogLevel debug proxy:trace5
|
||||
ErrorLog /var/www/${MIODOMINIO_COMPLETO}/logs/error.log
|
||||
CustomLog /var/www/${MIODOMINIO_COMPLETO}/logs/access.log combined
|
||||
|
||||
<Location />
|
||||
ProxyPassReverse /
|
||||
SetEnv force-proxy-request-1.0 1
|
||||
SetEnv proxy-nokeepalive 1
|
||||
</Location>
|
||||
</VirtualHost>
|
||||
@@ -1,22 +1,11 @@
|
||||
<VirtualHost 65.108.222.97:443>
|
||||
ServerName api.gruppomacro.app
|
||||
ServerAlias www.api.gruppomacro.app
|
||||
ServerAdmin surya@riso.app
|
||||
|
||||
SSLEngine On
|
||||
SSLProtocol -ALL +TLSv1.2 +TLSv1.3
|
||||
SSLCompression Off
|
||||
SSLHonorCipherOrder off
|
||||
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:E>
|
||||
SSLVerifyDepth 10
|
||||
SSLCertificateFile /etc/letsencrypt/live/gruppomacro.app/cert.pem
|
||||
SSLCertificateKeyFile /etc/letsencrypt/live/gruppomacro.app/privkey.pem
|
||||
|
||||
ProxyPreserveHost On
|
||||
SSLProxyEngine On
|
||||
SSLProxyVerify None
|
||||
SSLProxyCheckPeerCN Off
|
||||
SSLProxyCheckPeerName Off
|
||||
ProxyPass / https://localhost:3010/ retry=0 timeout=5 connectiontimeout=2
|
||||
ProxyPassReverse / https://localhost:3010/
|
||||
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
<VirtualHost 65.108.222.97:443>
|
||||
ServerName abitaregliiblei.it
|
||||
ServerAlias *.abitaregliiblei.it
|
||||
ServerAdmin surya@riso.app
|
||||
SSLEngine On
|
||||
SSLProtocol -ALL +TLSv1.2
|
||||
SSLCompression Off
|
||||
SSLHonorCipherOrder off
|
||||
SSLCipherSuite ECDH+AESGCM:ECDH+AES256:!aNULL:!MD5:!DSS:!DH:!AES128
|
||||
SSLVerifyDepth 10
|
||||
SSLCertificateFile /etc/letsencrypt/live/abitaregliiblei.it/cert.pem
|
||||
SSLCertificateKeyFile /etc/letsencrypt/live/abitaregliiblei.it/privkey.pem
|
||||
DocumentRoot "/var/customers/webs/paolouser/abitaregliiblei.it"
|
||||
<Directory "/var/customers/webs/paolouser/abitaregliiblei.it/">
|
||||
CGIPassAuth On
|
||||
Require all granted
|
||||
AllowOverride All
|
||||
</Directory>
|
||||
LogLevel warn
|
||||
ErrorLog "/var/customers/logs/paolouser-error.log"
|
||||
CustomLog "/var/customers/logs/paolouser-access.log" combined
|
||||
</VirtualHost>
|
||||
@@ -1,354 +0,0 @@
|
||||
// MongoDB Playground
|
||||
// To disable this template go to Settings | MongoDB | Use Default Template For Playground.
|
||||
// Make sure you are connected to enable completions and to be able to run a playground.
|
||||
// Use Ctrl+Space inside a snippet or a string literal to trigger completions.
|
||||
|
||||
// Select the database to use.
|
||||
use('test_FreePlanet');
|
||||
|
||||
let aggregation = [
|
||||
{
|
||||
$match: {
|
||||
idapp: "13",
|
||||
},
|
||||
},
|
||||
{
|
||||
$sort: {
|
||||
date_updated: -1,
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
myId1: {
|
||||
$toObjectId: "$userId",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "users",
|
||||
localField: "myId1",
|
||||
foreignField: "_id",
|
||||
as: "user",
|
||||
},
|
||||
},
|
||||
{
|
||||
$replaceRoot: {
|
||||
newRoot: {
|
||||
$mergeObjects: [
|
||||
{
|
||||
$arrayElemAt: [
|
||||
"$user",
|
||||
0,
|
||||
],
|
||||
},
|
||||
"$$ROOT",
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$project: {
|
||||
recGood: 1,
|
||||
sectorGood: 1,
|
||||
idSectorGood: 1,
|
||||
idGood: 1,
|
||||
mygood: 1,
|
||||
idStatusSkill: 1,
|
||||
idContribType: 1,
|
||||
"profile.username_telegram": 1,
|
||||
"profile.favorite": 1,
|
||||
"profile.bookmark": 1,
|
||||
idCity: 1,
|
||||
pub_to_share: 1,
|
||||
numLevel: 1,
|
||||
adType: 1,
|
||||
photos: 1,
|
||||
note: 1,
|
||||
website: 1,
|
||||
descr: 1,
|
||||
date_created: 1,
|
||||
date_updated: 1,
|
||||
userId: 1,
|
||||
username: 1,
|
||||
name: 1,
|
||||
surname: 1,
|
||||
lasttimeonline: 1,
|
||||
comune: 1,
|
||||
mycities: 1,
|
||||
"profile.img": 1,
|
||||
"profile.mygroups": 1,
|
||||
"profile.qualifica": 1,
|
||||
"profile.resid_province": 1,
|
||||
"profile.resid_card": 1,
|
||||
reported: 1,
|
||||
date_report: 1,
|
||||
username_who_report: 1,
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "goods",
|
||||
localField: "idGood",
|
||||
foreignField: "_id",
|
||||
as: "recGood",
|
||||
},
|
||||
},
|
||||
{
|
||||
$replaceRoot: {
|
||||
newRoot: {
|
||||
$mergeObjects: [
|
||||
{
|
||||
$arrayElemAt: [
|
||||
"$recGood",
|
||||
0,
|
||||
],
|
||||
},
|
||||
"$$ROOT",
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$project: {
|
||||
recGood: 1,
|
||||
sectorGood: 1,
|
||||
idSectorGood: 1,
|
||||
idGood: 1,
|
||||
mygood: 1,
|
||||
idStatusSkill: 1,
|
||||
idContribType: 1,
|
||||
"profile.username_telegram": 1,
|
||||
"profile.favorite": 1,
|
||||
"profile.bookmark": 1,
|
||||
idCity: 1,
|
||||
pub_to_share: 1,
|
||||
numLevel: 1,
|
||||
adType: 1,
|
||||
photos: 1,
|
||||
note: 1,
|
||||
website: 1,
|
||||
descr: 1,
|
||||
date_created: 1,
|
||||
date_updated: 1,
|
||||
userId: 1,
|
||||
username: 1,
|
||||
name: 1,
|
||||
surname: 1,
|
||||
lasttimeonline: 1,
|
||||
comune: 1,
|
||||
mycities: 1,
|
||||
"profile.img": 1,
|
||||
"profile.mygroups": 1,
|
||||
"profile.qualifica": 1,
|
||||
"profile.resid_province": 1,
|
||||
"profile.resid_card": 1,
|
||||
reported: 1,
|
||||
date_report: 1,
|
||||
username_who_report: 1,
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "sectorgoods",
|
||||
localField: "idSectorGood",
|
||||
foreignField: "_id",
|
||||
as: "sectorGood",
|
||||
},
|
||||
},
|
||||
{
|
||||
$replaceRoot: {
|
||||
newRoot: {
|
||||
$mergeObjects: [
|
||||
{
|
||||
$arrayElemAt: [
|
||||
"$sectorGood",
|
||||
0,
|
||||
],
|
||||
},
|
||||
"$$ROOT",
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$project: {
|
||||
recGood: 1,
|
||||
sectorGood: 1,
|
||||
idSectorGood: 1,
|
||||
idGood: 1,
|
||||
mygood: 1,
|
||||
idStatusSkill: 1,
|
||||
idContribType: 1,
|
||||
"profile.username_telegram": 1,
|
||||
"profile.favorite": 1,
|
||||
"profile.bookmark": 1,
|
||||
idCity: 1,
|
||||
pub_to_share: 1,
|
||||
numLevel: 1,
|
||||
adType: 1,
|
||||
photos: 1,
|
||||
note: 1,
|
||||
website: 1,
|
||||
descr: 1,
|
||||
date_created: 1,
|
||||
date_updated: 1,
|
||||
userId: 1,
|
||||
username: 1,
|
||||
name: 1,
|
||||
surname: 1,
|
||||
lasttimeonline: 1,
|
||||
comune: 1,
|
||||
mycities: 1,
|
||||
"profile.img": 1,
|
||||
"profile.mygroups": 1,
|
||||
"profile.qualifica": 1,
|
||||
"profile.resid_province": 1,
|
||||
reported: 1,
|
||||
date_report: 1,
|
||||
username_who_report: 1,
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "cities",
|
||||
localField: "idCity",
|
||||
foreignField: "_id",
|
||||
as: "mycities",
|
||||
},
|
||||
},
|
||||
{
|
||||
$replaceRoot: {
|
||||
newRoot: {
|
||||
$mergeObjects: [
|
||||
{
|
||||
$arrayElemAt: [
|
||||
"$mycities",
|
||||
0,
|
||||
],
|
||||
},
|
||||
"$$ROOT",
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$project: {
|
||||
recGood: 1,
|
||||
sectorGood: 1,
|
||||
idSectorGood: 1,
|
||||
idGood: 1,
|
||||
mygood: 1,
|
||||
idStatusSkill: 1,
|
||||
idContribType: 1,
|
||||
"profile.username_telegram": 1,
|
||||
"profile.favorite": 1,
|
||||
"profile.bookmark": 1,
|
||||
idCity: 1,
|
||||
pub_to_share: 1,
|
||||
numLevel: 1,
|
||||
adType: 1,
|
||||
photos: 1,
|
||||
note: 1,
|
||||
website: 1,
|
||||
descr: 1,
|
||||
date_created: 1,
|
||||
date_updated: 1,
|
||||
userId: 1,
|
||||
username: 1,
|
||||
name: 1,
|
||||
surname: 1,
|
||||
lasttimeonline: 1,
|
||||
comune: 1,
|
||||
mycities: 1,
|
||||
"profile.img": 1,
|
||||
"profile.mygroups": 1,
|
||||
"profile.qualifica": 1,
|
||||
"profile.resid_province": 1,
|
||||
reported: 1,
|
||||
date_report: 1,
|
||||
username_who_report: 1,
|
||||
},
|
||||
},
|
||||
{
|
||||
$match: {
|
||||
$or: [
|
||||
{
|
||||
$and: [
|
||||
{
|
||||
"profile.mygroups": {
|
||||
$elemMatch: {
|
||||
groupname: {
|
||||
$in: [
|
||||
"000017",
|
||||
"risoprova",
|
||||
"VillaggiamoItalia",
|
||||
"Terraw",
|
||||
"RisoBenevento",
|
||||
"111",
|
||||
"gruppodefaultriso",
|
||||
"pontiUmani",
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
pub_to_share: 1,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
$or: [
|
||||
{
|
||||
pub_to_share: {
|
||||
$exists: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
pub_to_share: {
|
||||
$exists: true,
|
||||
$eq: 0,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
$match: {
|
||||
$and: [
|
||||
{
|
||||
"mycities.reg": "EMR",
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
$group: {
|
||||
_id: null,
|
||||
count: {
|
||||
$sum: 1,
|
||||
},
|
||||
results: {
|
||||
$push: "$$ROOT",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$project: {
|
||||
count: 1,
|
||||
rows: {
|
||||
$slice: [
|
||||
"$results",
|
||||
0,
|
||||
10,
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
db.myskills.aggregate(aggregation);
|
||||
|
||||
87
src/server/models/sectoractivities.js
Executable file
87
src/server/models/sectoractivities.js
Executable file
@@ -0,0 +1,87 @@
|
||||
const mongoose = require('mongoose').set('debug', false)
|
||||
const Schema = mongoose.Schema;
|
||||
|
||||
mongoose.Promise = global.Promise;
|
||||
mongoose.level = "F";
|
||||
|
||||
const tools = require('../tools/general');
|
||||
|
||||
const { ObjectID } = require('mongodb');
|
||||
|
||||
// Resolving error Unknown modifier: $pushAll
|
||||
mongoose.plugin(schema => {
|
||||
schema.options.usePushEach = true
|
||||
});
|
||||
|
||||
const SectorActivitiesSchema = new Schema({
|
||||
_id: {
|
||||
type: Number,
|
||||
},
|
||||
descr: {
|
||||
type: String,
|
||||
},
|
||||
idSectorActivities: {
|
||||
type: Number
|
||||
},
|
||||
icon: {
|
||||
type: String,
|
||||
},
|
||||
img: {
|
||||
type: String,
|
||||
},
|
||||
color: {
|
||||
type: String,
|
||||
},
|
||||
theme: {
|
||||
type: String,
|
||||
},
|
||||
});
|
||||
|
||||
SectorActivitiesSchema.pre('save', async function (next) {
|
||||
if (this.isNew) {
|
||||
const myrec = await SectorActivities.findOne().limit(1).sort({ _id: -1 });
|
||||
if (!!myrec) {
|
||||
if (myrec._doc._id === 0)
|
||||
this._id = 1;
|
||||
else
|
||||
this._id = myrec._doc._id + 1;
|
||||
} else {
|
||||
this._id = 1;
|
||||
}
|
||||
}
|
||||
|
||||
next();
|
||||
});
|
||||
|
||||
SectorActivitiesSchema.statics.findAllIdApp = async function (idapp) {
|
||||
const SectorActivities = this;
|
||||
|
||||
const query = [
|
||||
{ $sort: { descr: 1 } }
|
||||
];
|
||||
|
||||
return await SectorActivities
|
||||
.aggregate(query)
|
||||
.then((arrrec) => {
|
||||
return arrrec
|
||||
})
|
||||
|
||||
};
|
||||
|
||||
SectorActivitiesSchema.statics.getFieldsForSearch = function () {
|
||||
return [{ field: 'descr', type: tools.FieldType.string }]
|
||||
};
|
||||
|
||||
SectorActivitiesSchema.statics.executeQueryTable = function (idapp, params) {
|
||||
params.fieldsearch = this.getFieldsForSearch();
|
||||
return tools.executeQueryTable(this, 0, params);
|
||||
};
|
||||
|
||||
|
||||
const SectorActivities = mongoose.model('SectorActivities', SectorActivitiesSchema);
|
||||
|
||||
SectorActivities.createIndexes((err) => {
|
||||
if (err) throw err;
|
||||
});
|
||||
|
||||
module.exports = { SectorActivities };
|
||||
@@ -672,6 +672,16 @@ UserSchema.statics.isManagerById = async function (id) {
|
||||
}
|
||||
};
|
||||
|
||||
UserSchema.statics.isAdminById = async function (id) {
|
||||
try {
|
||||
const ris = await User.findOne({ _id: id }, { perm: 1 }).lean();
|
||||
return ((ris.perm & shared_consts.Permissions.Admin) ===
|
||||
shared_consts.Permissions.Admin);
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
UserSchema.statics.isEditor = function (perm) {
|
||||
try {
|
||||
return ((perm & shared_consts.Permissions.Editor) ===
|
||||
@@ -3237,7 +3247,7 @@ UserSchema.statics.setCircuitCmd = async function (idapp, usernameOrig, circuitn
|
||||
}
|
||||
|
||||
ris = true;
|
||||
// } else if ((cmd === shared_consts.CIRCUITCMD.SENDCOINS_ACCEPT) || (cmd === shared_consts.CIRCUITCMD.SENDCOINS_REFUSE)) {
|
||||
// } else if ((cmd === shared_consts.CIRCUITCMD.SENDCOINS_ACCEPT) || (cmd === shared_consts.CIRCUITCMD.SENDCOINS_REFUSE)) {
|
||||
// Before to accept, I see if it's already set !
|
||||
|
||||
/*outres = {
|
||||
@@ -5742,10 +5752,10 @@ UserSchema.statics.tooManyLoginWrong = async function (idapp, username, set) {
|
||||
|
||||
await User.findOneAndUpdate({ _id: user._id }, { $set: { retry_pwd: user.retry_pwd } });
|
||||
}
|
||||
return {troppilogin: user.retry_pwd > maxnum, retry_pwd: user.retry_pwd};
|
||||
return { troppilogin: user.retry_pwd > maxnum, retry_pwd: user.retry_pwd };
|
||||
}
|
||||
|
||||
return {troppilogin: false, retry_pwd: 0};
|
||||
return { troppilogin: false, retry_pwd: 0 };
|
||||
};
|
||||
|
||||
UserSchema.statics.setLastCircuitOpened = async function (idapp, username, circuitpath) {
|
||||
|
||||
@@ -1,66 +1,90 @@
|
||||
|
||||
const axios = require('axios');
|
||||
|
||||
const apiUrl = 'https://api.cloudflare.com/client/v4'; // Endpoint
|
||||
|
||||
async function fetchCloudflareZones(apiToken) {
|
||||
try {
|
||||
class CloudFlare {
|
||||
constructor(config) {
|
||||
this.config = config ? config : {};
|
||||
|
||||
// Effettua una richiesta GET all'API di Cloudflare
|
||||
const response = await axios.get(apiUrl + '/zones', {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${apiToken}`, // Autenticazione con token
|
||||
'Content-Type': 'application/json' // Tipo di contenuto
|
||||
}
|
||||
});
|
||||
if (!this.config.arrTokens) {
|
||||
this.config.arrTokens = process.env.CLOUDFLARE_TOKENS;
|
||||
}
|
||||
}
|
||||
|
||||
// Estrai i dati dalla risposta
|
||||
const zones = response.data.result;
|
||||
init() {
|
||||
if (this.config.arrTokens) {
|
||||
// this.zones = this.fetchCloudflareZones(this.config.apiToken);
|
||||
this.zones = [];
|
||||
this.dnsRecords = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Stampa le zone
|
||||
// console.log('Zone di Cloudflare:', zones);
|
||||
} catch (error) {
|
||||
console.error('Errore durante il recupero delle zone di Cloudflare:', error.message);
|
||||
async fetchCloudflareZones(apiToken) {
|
||||
try {
|
||||
|
||||
// Effettua una richiesta GET all'API di Cloudflare
|
||||
const response = await axios.get(apiUrl + '/zones', {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${apiToken}`, // Autenticazione con token
|
||||
'Content-Type': 'application/json' // Tipo di contenuto
|
||||
}
|
||||
});
|
||||
|
||||
// Estrai i dati dalla risposta
|
||||
this.zones = response.data.result;
|
||||
|
||||
return this.zones;
|
||||
|
||||
// Stampa le zone
|
||||
// console.log('Zone di Cloudflare:', zones);
|
||||
} catch (error) {
|
||||
console.error('Errore durante il recupero delle zone di Cloudflare:', error.message);
|
||||
}
|
||||
}
|
||||
|
||||
// Funzione per estrarre i record DNS
|
||||
async fetchDNSRecords(apiToken, zoneId) {
|
||||
const apiUrlDNS = apiUrl + `/zones/${zoneId}/dns_records`;
|
||||
|
||||
try {
|
||||
const response = await axios.get(apiUrlDNS, {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${apiToken}`, // Autenticazione con token
|
||||
'Content-Type': 'application/json' // Tipo di contenuto
|
||||
}
|
||||
});
|
||||
|
||||
this.dnsRecords = response.data.result;
|
||||
|
||||
return this.dnsRecords;
|
||||
} catch (error) {
|
||||
console.error('Errore durante il recupero dei record DNS di Cloudflare:', error.message);
|
||||
}
|
||||
}
|
||||
|
||||
// Funzione per aggiornare un record DNS
|
||||
async updateDNSRecord(apiToken, zoneId, dnsRecordId, newDnsRecordData) {
|
||||
const apiUrlDNS = apiUrl + `/zones/${zoneId}/dns_records/${dnsRecordId}`;
|
||||
|
||||
try {
|
||||
|
||||
const response = await axios.put(apiUrlDNS, newDnsRecordData, {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${apiToken}`, // Autenticazione con token
|
||||
'Content-Type': 'application/json' // Tipo di contenuto
|
||||
}
|
||||
});
|
||||
|
||||
const updatedRecord = response.data.result;
|
||||
|
||||
// Stampa il record DNS aggiornato
|
||||
console.log('Record DNS aggiornato:', updatedRecord);
|
||||
|
||||
return updatedRecord;
|
||||
} catch (error) {
|
||||
console.error('Errore durante l\'aggiornamento del record DNS:', error.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Funzione per estrarre i record DNS
|
||||
async function fetchDNSRecords(apiToken, zoneId) {
|
||||
const apiUrlDNS = apiUrl + `/zones/${zoneId}/dns_records`;
|
||||
|
||||
try {
|
||||
const response = await axios.get(apiUrlDNS, {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${apiToken}`, // Autenticazione con token
|
||||
'Content-Type': 'application/json' // Tipo di contenuto
|
||||
}
|
||||
});
|
||||
|
||||
const dnsRecords = response.data.result;
|
||||
|
||||
return dnsRecords;
|
||||
} catch (error) {
|
||||
console.error('Errore durante il recupero dei record DNS di Cloudflare:', error.message);
|
||||
}
|
||||
}
|
||||
|
||||
// Funzione per aggiornare un record DNS
|
||||
async function updateDNSRecord(apiToken, zoneId, dnsRecordId, newDnsRecordData) {
|
||||
const apiUrlDNS = apiUrl + `/zones/${zoneId}/dns_records/${dnsRecordId}`;
|
||||
|
||||
try {
|
||||
const response = await axios.put(apiUrlDNS, newDnsRecordData, {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${apiToken}`, // Autenticazione con token
|
||||
'Content-Type': 'application/json' // Tipo di contenuto
|
||||
}
|
||||
});
|
||||
|
||||
const updatedRecord = response.data.result;
|
||||
|
||||
// Stampa il record DNS aggiornato
|
||||
console.log('Record DNS aggiornato:', updatedRecord);
|
||||
} catch (error) {
|
||||
console.error('Errore durante l\'aggiornamento del record DNS:', error.message);
|
||||
}
|
||||
}
|
||||
module.exports = CloudFlare
|
||||
@@ -1193,4 +1193,47 @@ router.post('/exec', authenticate, async (req, res) => {
|
||||
|
||||
});
|
||||
|
||||
router.post('/cloudflare', authenticate, async (req, res) => {
|
||||
try {
|
||||
idapp = req.body.idapp;
|
||||
cmd = req.body.cmd;
|
||||
tok = req.body.tok;
|
||||
zoneId = req.body.zoneId;
|
||||
tokcheck = req.body.tokcheck;
|
||||
dnsRecordId = req.body.dnsRecordId;
|
||||
record = req.body.record;
|
||||
console.log('/cloudflare idapp=', idapp, req.body.script);
|
||||
|
||||
const CloudFlareClass = require('../modules/Cloudflare.js');
|
||||
|
||||
const TOKCHECK = 'php8.1_version_762321HSD121nJDokq@?!aFS.tar.gz'
|
||||
|
||||
if (!User.isAdmin(req.user.perm) || (tokcheck !== TOKCHECK)) {
|
||||
// If without permissions, exit
|
||||
return res.status(404).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
||||
}
|
||||
|
||||
let result = '';
|
||||
|
||||
let cf = new CloudFlareClass(null);
|
||||
cf.init();
|
||||
|
||||
if (cmd === "getzones") {
|
||||
result = await cf.fetchCloudflareZones(tok);
|
||||
} else if (cmd === "getDNS") {
|
||||
result = await cf.fetchDNSRecords(tok, zoneId);
|
||||
} else if (cmd === "setRecordDNS") {
|
||||
result = await cf.updateDNSRecord(tok, zoneId, dnsRecordId, record);
|
||||
} else if (cmd === "gettok") {
|
||||
result = JSON.parse(process.env.CLOUDFLARE_TOKENS);
|
||||
}
|
||||
|
||||
return res.send(result);
|
||||
} catch (e) {
|
||||
console.error('e', e);
|
||||
return res.status(400).send({ code: server_constants.RIS_CODE_ERR, msg: '' });
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
||||
@@ -662,7 +662,7 @@ router.post('/gettable', authenticate, (req, res) => {
|
||||
let params = req.body;
|
||||
|
||||
params.table = sanitizeHtml(params.table);
|
||||
|
||||
|
||||
let idapp = req.user ? req.user.idapp : sanitizeHtml(params.idapp);
|
||||
const mytable = globalTables.getTableByTableName(params.table);
|
||||
//console.log('mytable', mytable);
|
||||
@@ -1402,7 +1402,7 @@ router.get('/loadsite/:userId/:idapp/:vers', authenticate_noerror,
|
||||
});
|
||||
|
||||
function load(req, res, version) {
|
||||
|
||||
|
||||
const userId = req.params.userId;
|
||||
const idapp = req.params.idapp;
|
||||
|
||||
@@ -1410,7 +1410,7 @@ function load(req, res, version) {
|
||||
if (req.code === server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
||||
status = server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!version) {
|
||||
version = '0';
|
||||
@@ -1890,9 +1890,10 @@ function uploadFile(req, res, version) {
|
||||
// console.log('fromfile', fromfile)
|
||||
// console.log('tofile', tofile);
|
||||
|
||||
|
||||
if (!tools.sulServer()) {
|
||||
console.log('Dovresti copiare fromfile', fromfile, 'tofile', tofile);
|
||||
console.log('cp ', fromfile, tofile);
|
||||
await tools.execScriptNoOutput('sudo cp -R ' + fromfile + ' ' + tofile)
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -17,8 +17,6 @@ var http = require('http');
|
||||
const WebSocket = require('ws');
|
||||
const { spawn } = require('child_process');
|
||||
|
||||
const pty = require('node-pty');
|
||||
|
||||
const NUOVO_METODO_TEST = true;
|
||||
|
||||
const METODO_MULTI_CORS = false;
|
||||
@@ -283,6 +281,9 @@ async function mystart() {
|
||||
|
||||
// await estraiTutteLeImmagini();
|
||||
|
||||
console.log('Versione Server: ' + await tools.getVersServer());
|
||||
|
||||
|
||||
await tools.getApps();
|
||||
|
||||
if (process.env.PROD !== 1) {
|
||||
@@ -716,11 +717,6 @@ async function faitest() {
|
||||
}
|
||||
}
|
||||
|
||||
/*const domains = [
|
||||
{ hostname: 'piuchebuono.app', port: 3000 },
|
||||
{ hostname: 'gruppomacro.app', port: 3010 },
|
||||
];*/
|
||||
|
||||
function getCredentials(hostname) {
|
||||
|
||||
if (NUOVO_METODO_TEST) {
|
||||
@@ -801,6 +797,8 @@ function startServer(app, port) {
|
||||
let httpsServer = null;
|
||||
let httpServer = null;
|
||||
|
||||
console.log('isProduction', isProduction);
|
||||
|
||||
if (isProduction) {
|
||||
for (let i = 0; i < domains.length; i++) {
|
||||
const credentials = getCredentials(domains[i].hostname);
|
||||
@@ -859,82 +857,98 @@ function startServer(app, port) {
|
||||
// process.exit(1);
|
||||
}
|
||||
|
||||
wss.on('connection', (ws) => {
|
||||
// console.log('Client connected');
|
||||
let scriptProcess = null;
|
||||
if (wss) {
|
||||
|
||||
ws.on('message', (message) => {
|
||||
const parsedMessage = JSON.parse(message);
|
||||
wss.on('connection', (ws) => {
|
||||
console.log('Client socket connected...');
|
||||
|
||||
if (parsedMessage.type === 'start_script') {
|
||||
if (scriptProcess) {
|
||||
scriptProcess.kill();
|
||||
}
|
||||
const { User } = require('./models/user');
|
||||
|
||||
const scriptPath = path.join(__dirname, '..', '..', '', parsedMessage.scriptName);
|
||||
let scriptProcess = null;
|
||||
|
||||
// Verifica che lo script esista e sia all'interno della directory consentita
|
||||
if (fs.existsSync(scriptPath)) {
|
||||
scriptProcess = pty.spawn('bash', [scriptPath], {
|
||||
name: 'xterm-color',
|
||||
cols: 80,
|
||||
rows: 40,
|
||||
cwd: process.cwd(),
|
||||
env: process.env
|
||||
});
|
||||
try {
|
||||
|
||||
let buffer = '';
|
||||
scriptProcess.on('data', (data) => {
|
||||
buffer += data;
|
||||
const pty = require('node-pty');
|
||||
|
||||
// Invia l'output al client
|
||||
ws.send(JSON.stringify({ type: 'output', data: data }));
|
||||
ws.on('message', (message) => {
|
||||
const parsedMessage = JSON.parse(message);
|
||||
|
||||
// Controlla se c'è una richiesta di input
|
||||
if (buffer.endsWith(': ') || buffer.includes('? ') ||
|
||||
buffer.toLowerCase().includes('password')
|
||||
|| buffer.includes('Inserisci')
|
||||
|| buffer.includes('Inserted')
|
||||
|| buffer.includes('(Y')
|
||||
) {
|
||||
ws.send(JSON.stringify({ type: 'input_required', prompt: data.trim() }));
|
||||
buffer = '';
|
||||
if ((parsedMessage.type === 'start_script') && (User.isAdminById(parsedMessage.user_id))) {
|
||||
if (scriptProcess) {
|
||||
scriptProcess.kill();
|
||||
}
|
||||
|
||||
// Pulisci il buffer se diventa troppo grande
|
||||
if (buffer.length > 5024) {
|
||||
buffer = buffer.slice(-500);
|
||||
}
|
||||
});
|
||||
const scriptPath = path.join(__dirname, '..', '..', '', parsedMessage.scriptName);
|
||||
|
||||
scriptProcess.on('exit', (code) => {
|
||||
if (code === 0) {
|
||||
ws.send(JSON.stringify({ type: 'close', data: `*** FINE SCRIPT ***` }));
|
||||
// Verifica che lo script esista e sia all'interno della directory consentita
|
||||
if (fs.existsSync(scriptPath)) {
|
||||
scriptProcess = pty.spawn('bash', [scriptPath], {
|
||||
name: 'xterm-color',
|
||||
cols: 80,
|
||||
rows: 40,
|
||||
cwd: process.cwd(),
|
||||
env: process.env
|
||||
});
|
||||
|
||||
let buffer = '';
|
||||
scriptProcess.on('data', (data) => {
|
||||
buffer += data;
|
||||
|
||||
// Invia l'output al client
|
||||
ws.send(JSON.stringify({ type: 'output', data: data }));
|
||||
|
||||
// Controlla se c'è una richiesta di input
|
||||
if (buffer.endsWith(': ') || buffer.includes('? ') ||
|
||||
buffer.toLowerCase().includes('password')
|
||||
|| buffer.includes('Inserisci')
|
||||
|| buffer.includes('Inserted')
|
||||
|| buffer.includes('(Y')
|
||||
) {
|
||||
ws.send(JSON.stringify({ type: 'input_required', prompt: data.trim() }));
|
||||
buffer = '';
|
||||
}
|
||||
|
||||
// Pulisci il buffer se diventa troppo grande
|
||||
if (buffer.length > 5024) {
|
||||
buffer = buffer.slice(-500);
|
||||
}
|
||||
});
|
||||
|
||||
scriptProcess.on('exit', (code) => {
|
||||
if (code === 0) {
|
||||
ws.send(JSON.stringify({ type: 'close', data: `*** FINE SCRIPT ***` }));
|
||||
} else {
|
||||
ws.send(JSON.stringify({ type: 'close', data: `Script terminato con codice ${code}` }));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
ws.send(JSON.stringify({ type: 'close', data: `Script terminato con codice ${code}` }));
|
||||
ws.send(JSON.stringify({ type: 'error', data: 'Script non trovato o non autorizzato' }));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
ws.send(JSON.stringify({ type: 'error', data: 'Script non trovato o non autorizzato' }));
|
||||
}
|
||||
} else if (parsedMessage.type === 'input') {
|
||||
if (scriptProcess) {
|
||||
scriptProcess.write(parsedMessage.data + '\n');
|
||||
}
|
||||
} else if (parsedMessage.type === 'input') {
|
||||
if (scriptProcess) {
|
||||
scriptProcess.write(parsedMessage.data + '\n');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
ws.on('close', () => {
|
||||
console.log('*** Client socket disconnected');
|
||||
if (scriptProcess) {
|
||||
scriptProcess.kill();
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('connection: Errore durante l\'inizializzazione del WebSocket, error:', error.message);
|
||||
}
|
||||
});
|
||||
|
||||
ws.on('close', () => {
|
||||
console.log('Client disconnected');
|
||||
if (scriptProcess) {
|
||||
scriptProcess.kill();
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
console.error('Nessuna Socket Aperta con WebSocket !!');
|
||||
}
|
||||
|
||||
|
||||
} catch (e) {
|
||||
console.log('error ' + e);
|
||||
console.log('error startServer: ' + e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2486,8 +2486,13 @@ class Telegram {
|
||||
file = '~/batch/test_restart_server.sh';
|
||||
}
|
||||
|
||||
const ris = await tools.execScriptByTelegram(this.idapp, msg, file,
|
||||
this.chisono(rec) + ' Restart il Server (Node.Js) : ' + process.version);
|
||||
let messaggio = this.chisono(rec) + ' Restart il Server (Node.Js) : ' + process.version;
|
||||
|
||||
messaggio += '\nVersione Server: ' + await tools.getVersServer();
|
||||
|
||||
const ris = await tools.execScriptByTelegram(this.idapp, msg, file, messaggio);
|
||||
|
||||
|
||||
} else {
|
||||
this.nonAbilitato(msg);
|
||||
}
|
||||
|
||||
@@ -1861,9 +1861,9 @@ module.exports = {
|
||||
this.MYAPPS.find(item => item.idapp === idapp);
|
||||
if (myapp) {
|
||||
if (process.env.NODE_ENV === 'test')
|
||||
mypath = (myapp) ? myapp.dir_test : '';
|
||||
mypath = (myapp && myapp.dir_test) ? myapp.dir_test : '';
|
||||
else
|
||||
mypath = (myapp) ? myapp.dir : '';
|
||||
mypath = (myapp && myapp.dir) ? myapp.dir : '';
|
||||
|
||||
if (dirmain) {
|
||||
if (!this.sulServer()) {
|
||||
@@ -3812,15 +3812,30 @@ module.exports = {
|
||||
|
||||
},
|
||||
|
||||
readlogfile(idapp, filename) {
|
||||
async readlogfile(idapp, filename) {
|
||||
|
||||
try {
|
||||
return fs.readFileSync(idapp + '/' + filename, 'utf8');
|
||||
return await fs.readFileSync(idapp + '/' + filename, 'utf8');
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
},
|
||||
|
||||
async readfilecontent(filename) {
|
||||
|
||||
try {
|
||||
const cont = await fs.readFileSync(filename, 'utf8');
|
||||
return cont;
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
},
|
||||
|
||||
async getVersServer() {
|
||||
return await this.readfilecontent(__dirname + '/../version.txt');
|
||||
},
|
||||
|
||||
|
||||
writelog(mystr) {
|
||||
this.writelogfile(mystr, FILELOG);
|
||||
},
|
||||
@@ -3852,11 +3867,6 @@ module.exports = {
|
||||
this.writelogfile(mystr, idapp + '/' + riga + '_' + col + '.txt');
|
||||
},
|
||||
|
||||
readFlottaLog(idapp, riga, col) {
|
||||
const nomefile = riga + '_' + col + '.txt';
|
||||
return this.readlogfile(idapp, nomefile);
|
||||
},
|
||||
|
||||
writeNaveLog(mystr) {
|
||||
this.writelogfile(mystr, FILENAVE);
|
||||
},
|
||||
@@ -4507,6 +4517,7 @@ module.exports = {
|
||||
|
||||
for (let i = 0; i < arrscripts.length; i++) {
|
||||
let label = arrscripts[i];
|
||||
let sock = false;
|
||||
let description = '';
|
||||
if (listafiles) {
|
||||
if (arrscripts[i].endsWith('.sh')) {
|
||||
@@ -4537,6 +4548,8 @@ module.exports = {
|
||||
label = value;
|
||||
} else if (paramstr === 'DESCRIZ') {
|
||||
description = value;
|
||||
} else if (paramstr === 'SOCK') {
|
||||
sock = (value.toLowerCase() === 'true');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4551,7 +4564,7 @@ module.exports = {
|
||||
}
|
||||
|
||||
if ((label) && (!extfiles || (extfiles && arrscripts[i].endsWith('.' + extfiles)))) {
|
||||
arrout.push({ label, value: arrscripts[i], description });
|
||||
arrout.push({ label, value: arrscripts[i], description, sock });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4559,6 +4572,20 @@ module.exports = {
|
||||
});
|
||||
});
|
||||
},
|
||||
execScriptNoOutput: async function (script) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
console.log('execScriptNoOutput:', script);
|
||||
exec(script, async (error, stdout, stderr) => { // Aggiunto async qui
|
||||
if (error) {
|
||||
console.error(`error: ${error}`);
|
||||
}
|
||||
if (stderr) {
|
||||
console.error(`stderr: ${stderr}`);
|
||||
}
|
||||
resolve(!error && !stderr);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
execScriptWithInputOnServer: async function (idapp, script) {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
1
src/server/version.txt
Normal file
1
src/server/version.txt
Normal file
@@ -0,0 +1 @@
|
||||
1.0.56
|
||||
Reference in New Issue
Block a user