Compare commits
91 Commits
preced_all
...
ver-1.2.42
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ee710b748 | ||
|
|
e3db42dcbc | ||
|
|
32210bb96a | ||
|
|
f26ae170bb | ||
|
|
a189aeb99c | ||
|
|
e118c30f47 | ||
|
|
fb11e15907 | ||
|
|
87c8bf4c45 | ||
|
|
efd1d12ba7 | ||
|
|
29437d9d7b | ||
|
|
ed27a6f6a5 | ||
|
|
d6579763f4 | ||
|
|
88cb2f13cc | ||
|
|
91ac7a5bde | ||
|
|
0b06f9f93a | ||
|
|
a13635ab4e | ||
|
|
31a93424aa | ||
|
|
8d4158c2c6 | ||
|
|
8c0619992b | ||
|
|
5668c620da | ||
|
|
6b9ddc8986 | ||
|
|
133dc6a502 | ||
|
|
25377090c1 | ||
|
|
d1d4b73da0 | ||
|
|
f88f433003 | ||
|
|
28a4fe1952 | ||
|
|
f85b8d0637 | ||
|
|
3d6455f23c | ||
|
|
f0c25366db | ||
|
|
d2aaf78c0e | ||
|
|
40214abe64 | ||
|
|
9efd193124 | ||
|
|
0e5d28d199 | ||
|
|
d6aaaabb00 | ||
|
|
10097f4238 | ||
|
|
a3c7b92c0c | ||
|
|
a374a7d7bc | ||
|
|
7e50299854 | ||
|
|
1da0e0f4b5 | ||
|
|
636136a077 | ||
|
|
3521a88395 | ||
|
|
768d299881 | ||
|
|
a76d6c9b12 | ||
|
|
0bf8d3c83c | ||
|
|
b2c19801e6 | ||
|
|
ee3846159c | ||
|
|
5ab24b2abd | ||
|
|
09a05a11d5 | ||
|
|
6c254a6a8e | ||
|
|
240a7be7f1 | ||
|
|
58839c32e1 | ||
|
|
b77a0579f1 | ||
|
|
6e8d1fcff1 | ||
|
|
192fd4706c | ||
|
|
fcc3755c19 | ||
|
|
97abe8b46d | ||
|
|
e40fbd550b | ||
|
|
3d4f8b0d04 | ||
|
|
95793fd73f | ||
|
|
4b4e3963ac | ||
|
|
85e2df56e1 | ||
|
|
58431c144c | ||
|
|
ad45ce60ee | ||
|
|
fba2ebd710 | ||
|
|
8e8a3204a7 | ||
|
|
e1ca4ef17f | ||
|
|
5431fe118e | ||
|
|
789dc1dcae | ||
|
|
76bacf3f5a | ||
|
|
d94cbde948 | ||
|
|
dfe492df45 | ||
|
|
6c50f35b2b | ||
|
|
a03c4cf613 | ||
|
|
7d845355a9 | ||
|
|
aeb83a512b | ||
|
|
e04247b1b6 | ||
|
|
f713f66369 | ||
|
|
f32bd189dc | ||
|
|
0017f04e45 | ||
|
|
65b29a6eee | ||
|
|
7827e49760 | ||
|
|
d106a59bb5 | ||
|
|
4758ce0857 | ||
|
|
6579c6bb3f | ||
|
|
6270991b76 | ||
|
|
f6d8e1bb0b | ||
|
|
f3597facd3 | ||
|
|
8363d65456 | ||
|
|
0a4cea94ae | ||
|
|
53a70a1c96 | ||
|
|
45d06b0923 |
12
.env.dev.pcb
12
.env.dev.pcb
@@ -8,24 +8,21 @@ appTelegram_TEST=["1","17"]
|
|||||||
appTelegram=["1","17"]
|
appTelegram=["1","17"]
|
||||||
appTelegram_DEVELOP=["17"]
|
appTelegram_DEVELOP=["17"]
|
||||||
DOMAIN=mongodb://localhost:27017/
|
DOMAIN=mongodb://localhost:27017/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=0
|
||||||
MONGODB_USER=admin
|
|
||||||
MONGODB_PWD=mypwadmin@1A
|
|
||||||
ENABLE_PUSHNOTIFICATION=1
|
ENABLE_PUSHNOTIFICATION=1
|
||||||
URLBASE_APP1=https://localhost
|
URLBASE_APP1=https://localhost
|
||||||
PORT_APP1=8080
|
PORT_APP1=8080
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
HTTPS_LOCALHOST=true
|
HTTPS_LOCALHOST=true
|
||||||
VITE_DEBUG=0
|
VITE_DEBUG=0
|
||||||
VITE_DEBUG=0
|
|
||||||
TESTING_ON=1
|
TESTING_ON=1
|
||||||
LOCALE=1
|
LOCALE=1
|
||||||
DELAY_SENDEMAIL=2000
|
DELAY_SENDEMAIL=2000
|
||||||
VAPI_KEY_SUBJECT=mailto:paolo@freeplanet.app
|
VAPI_KEY_SUBJECT=mailto:paolo@freeplanet.app
|
||||||
PUBLIC_VAPI_KEY=BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8
|
PUBLIC_VAPI_KEY=BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8
|
||||||
PRIVATE_VAPI_KEY=uB2-jQkrbysyDtqN3ziMBDsVn0wdEaDsksX81zoOGQo
|
PRIVATE_VAPI_KEY=uB2-jQkrbysyDtqN3ziMBDsVn0wdEaDsksX81zoOGQo
|
||||||
PATH_CERT_KEY=localhost.key
|
PATH_CERT_KEY=localhost-key.pem
|
||||||
PATH_SERVER_CRT=localhost.crt
|
PATH_SERVER_CRT=localhost.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
GCM_API_KEY=""
|
GCM_API_KEY=""
|
||||||
@@ -45,6 +42,5 @@ MIAB_HOST=box.lamiaposta.org
|
|||||||
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
||||||
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
||||||
DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7"
|
DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7"
|
||||||
|
|
||||||
API_KEY_MSSQL="m68yADSr123MIVIDA@154$DSAGVOK"
|
|
||||||
SERVER_A_URL="http://51.77.156.69:3000"
|
SERVER_A_URL="http://51.77.156.69:3000"
|
||||||
|
API_KEY_MSSQL="m68yADSr123MIVIDA@154$DSAGVOK"
|
||||||
@@ -8,31 +8,28 @@ appTelegram_TEST=["1","13"]
|
|||||||
appTelegram=["1","13"]
|
appTelegram=["1","13"]
|
||||||
appTelegram_DEVELOP=["13"]
|
appTelegram_DEVELOP=["13"]
|
||||||
DOMAIN=mongodb://localhost:27017/
|
DOMAIN=mongodb://localhost:27017/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=0
|
||||||
MONGODB_USER=admin
|
|
||||||
MONGODB_PWD=mypwadmin@1A
|
|
||||||
ENABLE_PUSHNOTIFICATION=1
|
ENABLE_PUSHNOTIFICATION=1
|
||||||
URLBASE_APP1=https://localhost
|
URLBASE_APP1=https://localhost
|
||||||
PORT_APP1=8080
|
PORT_APP1=8080
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
HTTPS_LOCALHOST=true
|
HTTPS_LOCALHOST=true
|
||||||
VITE_DEBUG=0
|
VITE_DEBUG=0
|
||||||
VITE_DEBUG=0
|
|
||||||
TESTING_ON=1
|
TESTING_ON=1
|
||||||
LOCALE=1
|
LOCALE=1
|
||||||
DELAY_SENDEMAIL=2000
|
DELAY_SENDEMAIL=2000
|
||||||
VAPI_KEY_SUBJECT=mailto:paolo@freeplanet.app
|
VAPI_KEY_SUBJECT=mailto:paolo@freeplanet.app
|
||||||
PUBLIC_VAPI_KEY=BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8
|
PUBLIC_VAPI_KEY=BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8
|
||||||
PRIVATE_VAPI_KEY=uB2-jQkrbysyDtqN3ziMBDsVn0wdEaDsksX81zoOGQo
|
PRIVATE_VAPI_KEY=uB2-jQkrbysyDtqN3ziMBDsVn0wdEaDsksX81zoOGQo
|
||||||
PATH_CERT_KEY=localhost.key
|
PATH_CERT_KEY=localhost-key.pem
|
||||||
PATH_SERVER_CRT=localhost.crt
|
PATH_SERVER_CRT=localhost.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
GCM_API_KEY=""
|
GCM_API_KEY=""
|
||||||
PROD=0
|
PROD=0
|
||||||
PROJECT_DESCR_MAIN='__PROJECTS'
|
PROJECT_DESCR_MAIN='__PROJECTS'
|
||||||
SECRK=Askb38v23jjDFaoskBOWj92axXCQ
|
SECRK=Askb38v23jjDFaoskBOWj92axXCQ
|
||||||
TOKEN_LIFE=2h
|
TOKEN_LIFE=1m
|
||||||
REFRESH_TOKEN_LIFE=14d
|
REFRESH_TOKEN_LIFE=14d
|
||||||
FTPSERVER_HOST=139.162.166.31
|
FTPSERVER_HOST=139.162.166.31
|
||||||
FTPSERVER_PORT=21
|
FTPSERVER_PORT=21
|
||||||
|
|||||||
@@ -1,38 +1,35 @@
|
|||||||
DATABASE=test_PiuCheBuono
|
DATABASE=test_FreePlanet
|
||||||
UDB=paofreeplanet
|
UDB=paofreeplanet
|
||||||
PDB=mypassword@1A
|
PDB=mypassword@1A
|
||||||
SEND_EMAIL=0
|
SEND_EMAIL=0
|
||||||
SEND_EMAIL_ORDERS=1
|
SEND_EMAIL_ORDERS=1
|
||||||
PORT=3000
|
PORT=3000
|
||||||
appTelegram_TEST=["1","17"]
|
appTelegram_TEST=["1","13"]
|
||||||
appTelegram=["1","17"]
|
appTelegram=["1","13"]
|
||||||
appTelegram_DEVELOP=["17"]
|
appTelegram_DEVELOP=["13"]
|
||||||
DOMAIN=mongodb://localhost:27017/
|
DOMAIN=mongodb://localhost:27017/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=0
|
||||||
MONGODB_USER=admin
|
|
||||||
MONGODB_PWD=mypwadmin@1A
|
|
||||||
ENABLE_PUSHNOTIFICATION=1
|
ENABLE_PUSHNOTIFICATION=1
|
||||||
URLBASE_APP1=https://localhost
|
URLBASE_APP1=https://localhost
|
||||||
PORT_APP1=8080
|
PORT_APP1=8080
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
HTTPS_LOCALHOST=true
|
HTTPS_LOCALHOST=true
|
||||||
VITE_DEBUG=0
|
VITE_DEBUG=0
|
||||||
VITE_DEBUG=0
|
|
||||||
TESTING_ON=1
|
TESTING_ON=1
|
||||||
LOCALE=1
|
LOCALE=1
|
||||||
DELAY_SENDEMAIL=2000
|
DELAY_SENDEMAIL=2000
|
||||||
VAPI_KEY_SUBJECT=mailto:paolo@freeplanet.app
|
VAPI_KEY_SUBJECT=mailto:paolo@freeplanet.app
|
||||||
PUBLIC_VAPI_KEY=BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8
|
PUBLIC_VAPI_KEY=BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8
|
||||||
PRIVATE_VAPI_KEY=uB2-jQkrbysyDtqN3ziMBDsVn0wdEaDsksX81zoOGQo
|
PRIVATE_VAPI_KEY=uB2-jQkrbysyDtqN3ziMBDsVn0wdEaDsksX81zoOGQo
|
||||||
PATH_CERT_KEY=localhost.key
|
PATH_CERT_KEY=localhost-key.pem
|
||||||
PATH_SERVER_CRT=localhost.crt
|
PATH_SERVER_CRT=localhost.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
GCM_API_KEY=""
|
GCM_API_KEY=""
|
||||||
PROD=0
|
PROD=0
|
||||||
PROJECT_DESCR_MAIN='__PROJECTS'
|
PROJECT_DESCR_MAIN='__PROJECTS'
|
||||||
SECRK=Askb38v23jjDFaoskBOWj92axXCQ
|
SECRK=Askb38v23jjDFaoskBOWj92axXCQ
|
||||||
TOKEN_LIFE=2h
|
TOKEN_LIFE=1m
|
||||||
REFRESH_TOKEN_LIFE=14d
|
REFRESH_TOKEN_LIFE=14d
|
||||||
FTPSERVER_HOST=139.162.166.31
|
FTPSERVER_HOST=139.162.166.31
|
||||||
FTPSERVER_PORT=21
|
FTPSERVER_PORT=21
|
||||||
@@ -41,10 +38,4 @@ FTPSERVER_PWD=ftpmypwd@1A_
|
|||||||
AUTH_NEW_SITES=123123123
|
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"}]
|
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||||
MIAB_HOST=box.lamiaposta.org
|
|
||||||
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
|
||||||
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
|
||||||
DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7"
|
DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7"
|
||||||
|
|
||||||
API_KEY_MSSQL="m68yADSr123MIVIDA@154$DSAGVOK"
|
|
||||||
SERVER_A_URL="http://51.77.156.69:3000"
|
|
||||||
@@ -8,7 +8,9 @@ DIRECTORY_SERVER=/var/www/www.freeplanet_server
|
|||||||
SERVERDIR_WEBSITE=/var/www/www.freeplanet_server
|
SERVERDIR_WEBSITE=/var/www/www.freeplanet_server
|
||||||
PORT_APP1="0"
|
PORT_APP1="0"
|
||||||
DOMAIN=mongodb://localhost:27017/
|
DOMAIN=mongodb://localhost:27017/
|
||||||
|
DOMAIN_AUTH=mongodb://{username}:{password}@127.0.0.1:27017/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=1
|
||||||
|
AUTH_DB_PASSING=1
|
||||||
MONGODB_USER=admin
|
MONGODB_USER=admin
|
||||||
MONGODB_PWD=mypwadminREAL@1A
|
MONGODB_PWD=mypwadminREAL@1A
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
@@ -19,7 +21,7 @@ VAPI_KEY_SUBJECT="mailto:paolo@freeplanet.app"
|
|||||||
PUBLIC_VAPI_KEY="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
PUBLIC_VAPI_KEY="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
||||||
PRIVATE_VAPI_KEY="St9UMzcS76Q9yKG6RInAuYydYjFRliqwHTJY3A5wjO0"
|
PRIVATE_VAPI_KEY="St9UMzcS76Q9yKG6RInAuYydYjFRliqwHTJY3A5wjO0"
|
||||||
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
||||||
PATH_CERT_KEY=key.pem
|
PATH_CERT_KEY=privkey.pem
|
||||||
PATH_SERVER_CRT=fullchain.pem
|
PATH_SERVER_CRT=fullchain.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
|
|||||||
@@ -10,8 +10,11 @@ ENABLE_PUSHNOTIFICATION=1
|
|||||||
DIRECTORY_SERVER=/var/www/nodejs_piuchebuono_server
|
DIRECTORY_SERVER=/var/www/nodejs_piuchebuono_server
|
||||||
SERVERDIR_WEBSITE=/var/www/piuchebuono.app
|
SERVERDIR_WEBSITE=/var/www/piuchebuono.app
|
||||||
PORT_APP1="0"
|
PORT_APP1="0"
|
||||||
DOMAIN=mongodb://localhost:32001/
|
DOMAIN_OFF=mongodb://localhost:32001/
|
||||||
|
DOMAIN_AUTH_OLD=mongodb://{username}:{password}@127.0.0.1:32001/
|
||||||
|
DOMAIN_AUTH=mongodb://{username}:{password}@127.0.0.1:27030/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=1
|
||||||
|
AUTH_DB_PASSING=1
|
||||||
MONGODB_USER=admin
|
MONGODB_USER=admin
|
||||||
MONGODB_PWD=mypwadminREAL@1A
|
MONGODB_PWD=mypwadminREAL@1A
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
@@ -31,15 +34,11 @@ TOKEN_LIFE=2h
|
|||||||
REFRESH_TOKEN_LIFE=14d
|
REFRESH_TOKEN_LIFE=14d
|
||||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNVZZ
|
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNVZZ
|
||||||
DOMAINS=[{"hostname":"piuchebuono.app","port":"3030"},{"hostname":"gruppomacro.app","port":"3010"}]
|
DOMAINS=[{"hostname":"piuchebuono.app","port":"3030"},{"hostname":"gruppomacro.app","port":"3010"}]
|
||||||
|
DOMAINS_ALLOWED=[]
|
||||||
SCRIPTS_DIR=admin_scripts
|
SCRIPTS_DIR=admin_scripts
|
||||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||||
MIAB_HOST=box.lamiaposta.org
|
MIAB_HOST=box.lamiaposta.org
|
||||||
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
||||||
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
||||||
|
SERVER_A_URL="http://51.77.156.69:3000"
|
||||||
#DB_CONNECTION=sqlsrv
|
API_KEY_MSSQL="m68yADSr123MIVIDA@154$DSAGVOK"
|
||||||
DB_HOST_SQLSRVTEST=31.3.180.50
|
|
||||||
DB_PORT_SQLSRVTEST=14338
|
|
||||||
DB_DATABASE_SQLSRVTEST=ANAG_MACRO
|
|
||||||
DB_USERNAME_SQLSRVTEST=woo
|
|
||||||
DB_PASSWORD_SQLSRVTEST=4n4traPe@
|
|
||||||
@@ -7,8 +7,11 @@ ENABLE_PUSHNOTIFICATION=1
|
|||||||
DIRECTORY_SERVER=/var/www/nodejs_riso_server
|
DIRECTORY_SERVER=/var/www/nodejs_riso_server
|
||||||
SERVERDIR_WEBSITE=/var/www/riso.app
|
SERVERDIR_WEBSITE=/var/www/riso.app
|
||||||
PORT_APP1="0"
|
PORT_APP1="0"
|
||||||
DOMAIN=mongodb://localhost:32015/
|
DOMAIN_OFF=mongodb://localhost:32015/
|
||||||
|
DOMAIN_AUTH_OLD=mongodb://{username}:{password}@127.0.0.1:32015/
|
||||||
|
DOMAIN_AUTH=mongodb://{username}:{password}@127.0.0.1:27030/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=1
|
||||||
|
AUTH_DB_PASSING=1
|
||||||
MONGODB_USER=admin
|
MONGODB_USER=admin
|
||||||
MONGODB_PWD=mypwadminREAL@1A
|
MONGODB_PWD=mypwadminREAL@1A
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
@@ -28,6 +31,7 @@ TOKEN_LIFE=2h
|
|||||||
REFRESH_TOKEN_LIFE=14d
|
REFRESH_TOKEN_LIFE=14d
|
||||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
||||||
DOMAINS=[{"hostname":"riso.app","port":"3006"},{"hostname":"freeplanet.app","port":"3000"}]
|
DOMAINS=[{"hostname":"riso.app","port":"3006"},{"hostname":"freeplanet.app","port":"3000"}]
|
||||||
|
DOMAINS_ALLOWED=["comunitanuovomondo.app","kolibrilab.it","artenergetica.org","freeplanet.app","www.freeplanet.app","freeplanet.app:3000","freeplanet.app:3001","www.freeplanet.app:3000","www.freeplanet.app:3001"]
|
||||||
#DOMAINS=[{"hostname":"abitaregliiblei.it","port":"3021"},{"hostname":"riso.app","port":"3005"}]
|
#DOMAINS=[{"hostname":"abitaregliiblei.it","port":"3021"},{"hostname":"riso.app","port":"3005"}]
|
||||||
SCRIPTS_DIR=admin_scripts
|
SCRIPTS_DIR=admin_scripts
|
||||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||||
|
|||||||
@@ -11,9 +11,11 @@ DIRECTORY_SERVER=/var/www/nodejs_test.piuchebuono_server
|
|||||||
SERVERDIR_WEBSITE=var/www/test.piuchebuono.app
|
SERVERDIR_WEBSITE=var/www/test.piuchebuono.app
|
||||||
PORT_APP1="0"
|
PORT_APP1="0"
|
||||||
DOMAIN=mongodb://localhost:32002/
|
DOMAIN=mongodb://localhost:32002/
|
||||||
|
DOMAIN_AUTH=mongodb://{username}:{password}@127.0.0.1:32002/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=1
|
||||||
|
AUTH_DB_PASSING=1
|
||||||
MONGODB_USER=admin
|
MONGODB_USER=admin
|
||||||
MONGODB_PWD=mypwadmin@1A
|
MONGODB_PWD=mypwadminS1A
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
VITE_DEBUG=0
|
VITE_DEBUG=0
|
||||||
LOCALE=0
|
LOCALE=0
|
||||||
@@ -22,7 +24,7 @@ VAPI_KEY_SUBJECT="mailto:surya@riso.app"
|
|||||||
PUBLIC_VAPI_KEY="BJgo8XR_upbnbMLWgCAUELo6DK7dRXffYAnFOxbaMMz5favBgcQBKT-eISqouO-jRad4Sw8l5nd2wCF6KorGiTc"
|
PUBLIC_VAPI_KEY="BJgo8XR_upbnbMLWgCAUELo6DK7dRXffYAnFOxbaMMz5favBgcQBKT-eISqouO-jRad4Sw8l5nd2wCF6KorGiTc"
|
||||||
PRIVATE_VAPI_KEY="LVpFDJuKscdHuQr5pe20dFuYuWX1-ZRb6x72PP-Pp4I"
|
PRIVATE_VAPI_KEY="LVpFDJuKscdHuQr5pe20dFuYuWX1-ZRb6x72PP-Pp4I"
|
||||||
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
||||||
PATH_CERT_KEY=key.pem
|
PATH_CERT_KEY=privkey.pem
|
||||||
PATH_SERVER_CRT=fullchain.pem
|
PATH_SERVER_CRT=fullchain.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
@@ -33,8 +35,11 @@ TOKEN_LIFE=2h
|
|||||||
REFRESH_TOKEN_LIFE=14d
|
REFRESH_TOKEN_LIFE=14d
|
||||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
||||||
DOMAINS=[{"hostname":"piuchebuono.app","port":"3031"},{"hostname":"gruppomacro.app","port":"3011"}]
|
DOMAINS=[{"hostname":"piuchebuono.app","port":"3031"},{"hostname":"gruppomacro.app","port":"3011"}]
|
||||||
|
DOMAINS_ALLOWED=[]
|
||||||
SCRIPTS_DIR=admin_scripts
|
SCRIPTS_DIR=admin_scripts
|
||||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||||
MIAB_HOST=box.lamiaposta.org
|
MIAB_HOST=box.lamiaposta.org
|
||||||
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
||||||
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
||||||
|
SERVER_A_URL="http://51.77.156.69:3000"
|
||||||
|
API_KEY_MSSQL="m68yADSr123MIVIDA@154$DSAGVOK"
|
||||||
@@ -8,28 +8,31 @@ DIRECTORY_SERVER=/var/www/nodejs_test.riso_server
|
|||||||
SERVERDIR_WEBSITE=/var/www/test.riso.app
|
SERVERDIR_WEBSITE=/var/www/test.riso.app
|
||||||
PORT_APP1="0"
|
PORT_APP1="0"
|
||||||
DOMAIN=mongodb://localhost:32012/
|
DOMAIN=mongodb://localhost:32012/
|
||||||
|
DOMAIN_AUTH=mongodb://{username}:{password}@127.0.0.1:32012/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=1
|
||||||
MONGODB_USER=admin
|
AUTH_DB_PASSING=1
|
||||||
MONGODB_PWD=mypwadmin@1A
|
MONGODB_USER="admin"
|
||||||
|
MONGODB_PWD="mypwadminS1A"
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
VITE_DEBUG=0
|
VITE_DEBUG=1
|
||||||
LOCALE=0
|
LOCALE=0
|
||||||
DELAY_SENDEMAIL=1000
|
DELAY_SENDEMAIL=1000
|
||||||
VAPI_KEY_SUBJECT="mailto:surya@riso.app"
|
VAPI_KEY_SUBJECT="mailto:surya@riso.app"
|
||||||
PUBLIC_VAPI_KEY="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
PUBLIC_VAPI_KEY="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
||||||
PRIVATE_VAPI_KEY="St9UMzcS76Q9yKG6RInAuYydYjFRliqwHTJY3A5wjO0"
|
PRIVATE_VAPI_KEY="St9UMzcS76Q9yKG6RInAuYydYjFRliqwHTJY3A5wjO0"
|
||||||
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
||||||
PATH_CERT_KEY=key.pem
|
PATH_CERT_KEY=privkey.pem
|
||||||
PATH_SERVER_CRT=fullchain.pem
|
PATH_SERVER_CRT=fullchain.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
PROD=0
|
PROD=0
|
||||||
PROJECT_DESCR_MAIN='__PROJECTS'
|
PROJECT_DESCR_MAIN='__PROJECTS'
|
||||||
SECRK=iUUb38v23jjDFaosWj92axkBOXCQ
|
SECRK=iUUb38v23jjDFaosWj92axkBOXCQ
|
||||||
TOKEN_LIFE=1m
|
TOKEN_LIFE=2h
|
||||||
REFRESH_TOKEN_LIFE=14d
|
REFRESH_TOKEN_LIFE=14d
|
||||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
||||||
DOMAINS=[{"hostname":"riso.app","port":"3005"}]
|
DOMAINS=[{"hostname":"riso.app","port":"3005"}]
|
||||||
|
DOMAINS_ALLOWED=["comunitanuovomondo.app","kolibrilab.it","artenergetica.org","freeplanet.app","www.freeplanet.app","freeplanet.app:3000","freeplanet.app:3001","www.freeplanet.app:3000","www.freeplanet.app:3001"]
|
||||||
SCRIPTS_DIR=admin_scripts
|
SCRIPTS_DIR=admin_scripts
|
||||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||||
MIAB_HOST=box.lamiaposta.org
|
MIAB_HOST=box.lamiaposta.org
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ VAPI_KEY_SUBJECT="mailto:paolo@freeplanet.app"
|
|||||||
PUBLIC_VAPI_KEY="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
PUBLIC_VAPI_KEY="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
||||||
PRIVATE_VAPI_KEY="St9UMzcS76Q9yKG6RInAuYydYjFRliqwHTJY3A5wjO0"
|
PRIVATE_VAPI_KEY="St9UMzcS76Q9yKG6RInAuYydYjFRliqwHTJY3A5wjO0"
|
||||||
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
||||||
PATH_CERT_KEY=key.pem
|
PATH_CERT_KEY=privkey.pem
|
||||||
PATH_SERVER_CRT=fullchain.pem
|
PATH_SERVER_CRT=fullchain.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
|
|||||||
76
OFF_deploynodejs_on_production.sh.off
Executable file
76
OFF_deploynodejs_on_production.sh.off
Executable file
@@ -0,0 +1,76 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ./.env.production
|
||||||
|
|
||||||
|
msg="*** SERVER DI PRODUZIONE **** SEI SICURO DI INVIARE GLI AGGIORNAMENTI SERVERSIDE (NODE JS) - SUL SERVER DI PRODUZIONE ?? $SERVERDIR_WEBSITE (Y/N) ? "
|
||||||
|
|
||||||
|
if [ "$1" = "" ]; then
|
||||||
|
read -p "$msg" risposta
|
||||||
|
else
|
||||||
|
echo $msg
|
||||||
|
risposta=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso NODEPRODUZIONE ... $SERVERDIR_WEBSITE/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Configurazione
|
||||||
|
REMOTE_USER="suryapaolo"
|
||||||
|
REMOTE_HOST="servereng"
|
||||||
|
REMOTE_PORT="8855"
|
||||||
|
REMOTE_DIR="$SERVERDIR_WEBSITE"
|
||||||
|
SSH_OPTIONS="-p $REMOTE_PORT"
|
||||||
|
|
||||||
|
# Array di cartelle e file da sincronizzare
|
||||||
|
SYNC_ITEMS=(
|
||||||
|
"css"
|
||||||
|
"docs"
|
||||||
|
"emails"
|
||||||
|
"plugins"
|
||||||
|
"admin_scripts"
|
||||||
|
"sass"
|
||||||
|
"src"
|
||||||
|
)
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Sincronizzazione Cartelle su $REMOTE_DIR ..."
|
||||||
|
|
||||||
|
|
||||||
|
# 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.production ... "
|
||||||
|
|
||||||
|
# Sincronizza i file specifici
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
.env.production "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
||||||
|
|
||||||
|
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" \
|
||||||
|
ecosystem.config.js "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
||||||
|
|
||||||
|
# Verifica il risultato
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Sincronizzazione completata con successo. SERVER PRODUZIONE! "
|
||||||
|
else
|
||||||
|
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
db.myelems.insertMany([
|
db.myelems.insertMany([
|
||||||
{
|
{
|
||||||
"_id": ObjectId("669fbf9dc9d625d0628eb12f"),
|
"_id": new ObjectId("669fbf9dc9d625d0628eb12f"),
|
||||||
"order": 20,
|
"order": 20,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 20,
|
"type": 20,
|
||||||
@@ -13,14 +13,14 @@ db.myelems.insertMany([
|
|||||||
"__v": 0,
|
"__v": 0,
|
||||||
"containerHtml": "<div style=\"text-align: center;\"><b><font size=\"4\">Abitare Gli Iblei</font></b></div>",
|
"containerHtml": "<div style=\"text-align: center;\"><b><font size=\"4\">Abitare Gli Iblei</font></b></div>",
|
||||||
"anim": {
|
"anim": {
|
||||||
"_id": ObjectId("66e456981e0719a1012121c0"),
|
"_id": new ObjectId("66e456981e0719a1012121c0"),
|
||||||
"name": "",
|
"name": "",
|
||||||
"clduration": "",
|
"clduration": "",
|
||||||
"cldelay": "",
|
"cldelay": "",
|
||||||
"timingtype": "ease-in-out"
|
"timingtype": "ease-in-out"
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"_id": ObjectId("669fbfc3c9d625d0628eb131"),
|
"_id": new ObjectId("669fbfc3c9d625d0628eb131"),
|
||||||
"order": 100,
|
"order": 100,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 145,
|
"type": 145,
|
||||||
@@ -32,7 +32,7 @@ db.myelems.insertMany([
|
|||||||
"list": [],
|
"list": [],
|
||||||
"__v": 0
|
"__v": 0
|
||||||
}, {
|
}, {
|
||||||
"_id": ObjectId("66db2a45054b3b09f85e6983"),
|
"_id": new ObjectId("66db2a45054b3b09f85e6983"),
|
||||||
"order": 26,
|
"order": 26,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 35,
|
"type": 35,
|
||||||
@@ -45,7 +45,7 @@ db.myelems.insertMany([
|
|||||||
"__v": 0,
|
"__v": 0,
|
||||||
"image": "logo.jpg",
|
"image": "logo.jpg",
|
||||||
"anim": {
|
"anim": {
|
||||||
"_id": ObjectId("66db34215740efc77547a93a"),
|
"_id": new ObjectId("66db34215740efc77547a93a"),
|
||||||
"name": "",
|
"name": "",
|
||||||
"clduration": "",
|
"clduration": "",
|
||||||
"cldelay": "",
|
"cldelay": "",
|
||||||
@@ -55,7 +55,7 @@ db.myelems.insertMany([
|
|||||||
"align": 2
|
"align": 2
|
||||||
}
|
}
|
||||||
, {
|
, {
|
||||||
"_id": ObjectId("66db38a77e24f4509eef655b"),
|
"_id": new ObjectId("66db38a77e24f4509eef655b"),
|
||||||
"order": 26,
|
"order": 26,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 20,
|
"type": 20,
|
||||||
@@ -68,7 +68,7 @@ db.myelems.insertMany([
|
|||||||
"__v": 0,
|
"__v": 0,
|
||||||
"containerHtml": "<style>\nbody {\n font-family: Arial, sans-serif;\n margin: 0;\n padding: 20px;\n background-color: #f0f0f0;\n color: #333;\n}\n\nh1 {\n color: #0056b3;\n text-align: center;\n}\n\n\np, li {\n line-height: 1.6;\n}\n\n\nul {\n list-style-type: none;\n padding: 0;\n}\n\n\nli {\n background-color: #fff !important;\n margin-bottom: 10px !important;\n padding: 10px !important;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important; \n}\n\n\na {\n color: #007bff;\n text-decoration: none;\n}\n\n\na:hover {\n text-decoration: underline;\n}\n\n\n.container {\n max-width: 800px;\n margin: 0 auto;\n background-color: #fff;\n padding: 20px;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n}\n\n\n.strong {\n font-weight: bold;\n}\n</style>\n\n\n<p><strong>“Abitare gli Iblei”</strong> è una rete aperta che ha lo scopo di riunire tutte quelle persone che vogliono valorizzare e qualificare la vita nel territorio degli Iblei. </p>\n \n <p>Chi aderisce alla rete si riconosce in una <strong>Carta dei valori comuni</strong> e usa la rete per scambiare conoscenze, esperienze, risorse e prodotti sviluppati nell’ambito delle proprie iniziative (profit e non profit) individuali o collettive.</p>\n\n\n <p>L’area territoriale di questa rete è quella dei <strong>Monti Iblei orientali e occidentali</strong> (Noto, Avola, Canicattini, Siracusa, Palazzolo, Buccheri, Ferla, Modica, …).</p>\n\n\n <p>La rete <strong>“Abitare gli Iblei”</strong> offre i seguenti servizi utili per il territorio ed i suoi abitanti, frutto di una costruzione collettiva:</p>\n \n <ul>\n <li><strong>1. Mappa delle attività virtuose:</strong> permette di identificare attività pubbliche e private nel territorio che possono essere utili nella vita quotidiana. Queste attività possono riguardare artigiani, produttori o fornitori di servizi di cui almeno un membro della rete conosca la qualità e l’affidabilità (agricoltori, falegnami, fabbri, idraulici, imprese edili, strutture ricettive, …). Altre informazioni utili possono riguardare associazioni/istituzioni operanti in vari settori. – <strong>Accesso pubblico</strong></li>\n <li><strong>2. Calendario:</strong> permette di accedere ad annunci di eventi utili alla crescita culturale del territorio. La pubblicazione di eventi è riservata ai soli membri della rete che possono presentare iniziative anche di altri organizzatori. – <strong>Accesso pubblico</strong></li>\n <li><strong>3. Scambi di servizi, prodotti e ospitalità:</strong> questa funzione è riservata ai soli membri della rete e si realizza attraverso la Rete italiana di scambi orizzontali (RISO). – <strong>Accesso riservato</strong></li>\n <li><strong>4. Segnalazione di pericoli per il territorio:</strong> attraverso questa mappa è possibile segnalare incendi, immondizia abbandonata, discariche abusive, fonti di inquinamento per corsi d’acqua e spiagge, presenza di inquinamento nell’aria, … – <strong>Accesso riservato</strong></li>\n </ul>\n \n <p>Se vuoi aderire alla rete puoi richiederne la registrazione utilizzando questo Link <a href=\"#\"><strong>(Pagina in Costruzione)</strong></a>.</p>\n\n",
|
"containerHtml": "<style>\nbody {\n font-family: Arial, sans-serif;\n margin: 0;\n padding: 20px;\n background-color: #f0f0f0;\n color: #333;\n}\n\nh1 {\n color: #0056b3;\n text-align: center;\n}\n\n\np, li {\n line-height: 1.6;\n}\n\n\nul {\n list-style-type: none;\n padding: 0;\n}\n\n\nli {\n background-color: #fff !important;\n margin-bottom: 10px !important;\n padding: 10px !important;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important; \n}\n\n\na {\n color: #007bff;\n text-decoration: none;\n}\n\n\na:hover {\n text-decoration: underline;\n}\n\n\n.container {\n max-width: 800px;\n margin: 0 auto;\n background-color: #fff;\n padding: 20px;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n}\n\n\n.strong {\n font-weight: bold;\n}\n</style>\n\n\n<p><strong>“Abitare gli Iblei”</strong> è una rete aperta che ha lo scopo di riunire tutte quelle persone che vogliono valorizzare e qualificare la vita nel territorio degli Iblei. </p>\n \n <p>Chi aderisce alla rete si riconosce in una <strong>Carta dei valori comuni</strong> e usa la rete per scambiare conoscenze, esperienze, risorse e prodotti sviluppati nell’ambito delle proprie iniziative (profit e non profit) individuali o collettive.</p>\n\n\n <p>L’area territoriale di questa rete è quella dei <strong>Monti Iblei orientali e occidentali</strong> (Noto, Avola, Canicattini, Siracusa, Palazzolo, Buccheri, Ferla, Modica, …).</p>\n\n\n <p>La rete <strong>“Abitare gli Iblei”</strong> offre i seguenti servizi utili per il territorio ed i suoi abitanti, frutto di una costruzione collettiva:</p>\n \n <ul>\n <li><strong>1. Mappa delle attività virtuose:</strong> permette di identificare attività pubbliche e private nel territorio che possono essere utili nella vita quotidiana. Queste attività possono riguardare artigiani, produttori o fornitori di servizi di cui almeno un membro della rete conosca la qualità e l’affidabilità (agricoltori, falegnami, fabbri, idraulici, imprese edili, strutture ricettive, …). Altre informazioni utili possono riguardare associazioni/istituzioni operanti in vari settori. – <strong>Accesso pubblico</strong></li>\n <li><strong>2. Calendario:</strong> permette di accedere ad annunci di eventi utili alla crescita culturale del territorio. La pubblicazione di eventi è riservata ai soli membri della rete che possono presentare iniziative anche di altri organizzatori. – <strong>Accesso pubblico</strong></li>\n <li><strong>3. Scambi di servizi, prodotti e ospitalità:</strong> questa funzione è riservata ai soli membri della rete e si realizza attraverso la Rete italiana di scambi orizzontali (RISO). – <strong>Accesso riservato</strong></li>\n <li><strong>4. Segnalazione di pericoli per il territorio:</strong> attraverso questa mappa è possibile segnalare incendi, immondizia abbandonata, discariche abusive, fonti di inquinamento per corsi d’acqua e spiagge, presenza di inquinamento nell’aria, … – <strong>Accesso riservato</strong></li>\n </ul>\n \n <p>Se vuoi aderire alla rete puoi richiederne la registrazione utilizzando questo Link <a href=\"#\"><strong>(Pagina in Costruzione)</strong></a>.</p>\n\n",
|
||||||
"anim": {
|
"anim": {
|
||||||
"_id": ObjectId("66db393e3b885ccdfaed28d6"),
|
"_id": new ObjectId("66db393e3b885ccdfaed28d6"),
|
||||||
"name": "",
|
"name": "",
|
||||||
"clduration": "",
|
"clduration": "",
|
||||||
"cldelay": "",
|
"cldelay": "",
|
||||||
@@ -76,7 +76,7 @@ db.myelems.insertMany([
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
, {
|
, {
|
||||||
"_id": ObjectId("66e41cff78c8d880eebfbf1c"),
|
"_id": new ObjectId("66e41cff78c8d880eebfbf1c"),
|
||||||
"order": 32.5,
|
"order": 32.5,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 20,
|
"type": 20,
|
||||||
@@ -89,7 +89,7 @@ db.myelems.insertMany([
|
|||||||
"__v": 0,
|
"__v": 0,
|
||||||
"containerHtml": "ORAAAA",
|
"containerHtml": "ORAAAA",
|
||||||
"anim": {
|
"anim": {
|
||||||
"_id": ObjectId("66e459421e0719a1012123ad"),
|
"_id": new ObjectId("66e459421e0719a1012123ad"),
|
||||||
"name": "",
|
"name": "",
|
||||||
"clduration": "",
|
"clduration": "",
|
||||||
"cldelay": "",
|
"cldelay": "",
|
||||||
@@ -98,7 +98,7 @@ db.myelems.insertMany([
|
|||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66e4270d78c8d880eebfbf24"),
|
"_id": new ObjectId("66e4270d78c8d880eebfbf24"),
|
||||||
"order": 40,
|
"order": 40,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 20,
|
"type": 20,
|
||||||
@@ -111,14 +111,14 @@ db.myelems.insertMany([
|
|||||||
"__v": 0,
|
"__v": 0,
|
||||||
"containerHtml": "BBB",
|
"containerHtml": "BBB",
|
||||||
"anim": {
|
"anim": {
|
||||||
"_id": ObjectId("66e4568d1e0719a1012121a6"),
|
"_id": new ObjectId("66e4568d1e0719a1012121a6"),
|
||||||
"name": "",
|
"name": "",
|
||||||
"clduration": "",
|
"clduration": "",
|
||||||
"cldelay": "",
|
"cldelay": "",
|
||||||
"timingtype": "ease-in-out"
|
"timingtype": "ease-in-out"
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"_id": ObjectId("66e45b0c78c8d880eebfbf45"),
|
"_id": new ObjectId("66e45b0c78c8d880eebfbf45"),
|
||||||
"order": 70,
|
"order": 70,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 20,
|
"type": 20,
|
||||||
@@ -136,7 +136,7 @@ db.myelems.insertMany([
|
|||||||
db.sites.insert(
|
db.sites.insert(
|
||||||
/* 1 */
|
/* 1 */
|
||||||
{
|
{
|
||||||
"_id": ObjectId("669fbef7fc704b8912263af9"),
|
"_id": new ObjectId("669fbef7fc704b8912263af9"),
|
||||||
"confpages": {
|
"confpages": {
|
||||||
"font": "",
|
"font": "",
|
||||||
"col_toolbar": "",
|
"col_toolbar": "",
|
||||||
@@ -235,7 +235,7 @@ db.sites.insert(
|
|||||||
|
|
||||||
db.users.insert(
|
db.users.insert(
|
||||||
{
|
{
|
||||||
"_id": ObjectId("669fbef7c9d625d0628eb12d"),
|
"_id": new ObjectId("669fbef7c9d625d0628eb12d"),
|
||||||
"profile": {
|
"profile": {
|
||||||
"paymenttypes": [],
|
"paymenttypes": [],
|
||||||
"notif_idCities": [],
|
"notif_idCities": [],
|
||||||
@@ -343,7 +343,7 @@ db.users.insert(
|
|||||||
"tokens": [
|
"tokens": [
|
||||||
{
|
{
|
||||||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI3NjIzNjY1fQ.6QaBaiE1pv7mDy7S8YUReqH8m0CCK7jTmd57eGHgnzE",
|
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI3NjIzNjY1fQ.6QaBaiE1pv7mDy7S8YUReqH8m0CCK7jTmd57eGHgnzE",
|
||||||
"_id": ObjectId("66e6fcf1ac95a84fd0e11b2c"),
|
"_id": new ObjectId("66e6fcf1ac95a84fd0e11b2c"),
|
||||||
"access": "auth",
|
"access": "auth",
|
||||||
"browser": "Mozilla/5.0 (Linux; Android 11; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.127 Mobile Safari/537.36",
|
"browser": "Mozilla/5.0 (Linux; Android 11; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.127 Mobile Safari/537.36",
|
||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI2NDIxMjY1fQ.wCZcQ5uSQXnVgS_ZGyzjl6TOQk8rflfe2HSxSku0Aj4",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI2NDIxMjY1fQ.wCZcQ5uSQXnVgS_ZGyzjl6TOQk8rflfe2HSxSku0Aj4",
|
||||||
@@ -351,7 +351,7 @@ db.users.insert(
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI3NjQwNTgwfQ.YdB5unWwaZ21kk87RRPolLGiWxf7bKX0piKd-bGQifU",
|
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI3NjQwNTgwfQ.YdB5unWwaZ21kk87RRPolLGiWxf7bKX0piKd-bGQifU",
|
||||||
"_id": ObjectId("66e73f04ac95a84fd0e122ae"),
|
"_id": new ObjectId("66e73f04ac95a84fd0e122ae"),
|
||||||
"access": "auth",
|
"access": "auth",
|
||||||
"browser": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36",
|
"browser": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36",
|
||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI2NDM4MTgwfQ.TMF1UNbgw-EpGVWWDNnY3wRdLYOyp5HzAQiakpyaL_4",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI2NDM4MTgwfQ.TMF1UNbgw-EpGVWWDNnY3wRdLYOyp5HzAQiakpyaL_4",
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ db.mygroups.insert(
|
|||||||
"photos": [],
|
"photos": [],
|
||||||
"admins": [
|
"admins": [
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66e2e6276b502b07f1e89571"),
|
"_id": new ObjectId("66e2e6276b502b07f1e89571"),
|
||||||
"username": "paoloar77"
|
"username": "paoloar77"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
db.mypages.insertMany([
|
db.mypages.insertMany([
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66db21118009ea4503bb6a01"),
|
"_id": new ObjectId("66db21118009ea4503bb6a01"),
|
||||||
"order": 10,
|
"order": 10,
|
||||||
"idapp": "19",
|
"idapp": "19",
|
||||||
"path": "home",
|
"path": "home",
|
||||||
@@ -8,7 +8,7 @@ db.mypages.insertMany([
|
|||||||
"title": "Home",
|
"title": "Home",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66db21118009ea4503bb6a03"),
|
"_id": new ObjectId("66db21118009ea4503bb6a03"),
|
||||||
"order": 10,
|
"order": 10,
|
||||||
"idapp": "19",
|
"idapp": "19",
|
||||||
"path": "home_logout",
|
"path": "home_logout",
|
||||||
@@ -16,7 +16,7 @@ db.mypages.insertMany([
|
|||||||
"title": "Home NoLoggato",
|
"title": "Home NoLoggato",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66e322dd5a6360e3b3c71c5a"),
|
"_id": new ObjectId("66e322dd5a6360e3b3c71c5a"),
|
||||||
"order": 40,
|
"order": 40,
|
||||||
"idapp": "19",
|
"idapp": "19",
|
||||||
"path": "presentazione",
|
"path": "presentazione",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
db.users.insertMany([
|
db.users.insertMany([
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66db21115281b23462d496d2"),
|
"_id": new ObjectId("66db21115281b23462d496d2"),
|
||||||
"profile": {
|
"profile": {
|
||||||
"paymenttypes": [],
|
"paymenttypes": [],
|
||||||
"notif_idCities": [],
|
"notif_idCities": [],
|
||||||
@@ -66,7 +66,7 @@ db.users.insertMany([
|
|||||||
"tokens": [
|
"tokens": [
|
||||||
{
|
{
|
||||||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZkYjIxMTE1MjgxYjIzNDYyZDQ5NmQyIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG9hcjc3IiwiaWF0IjoxNzI2NTEyODY1LCJleHAiOjE3Mjc3MjI0NjV9.EOvF89kswT1eqVJCSwVMMI-jB4kokP-aQVhi7xSUods",
|
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZkYjIxMTE1MjgxYjIzNDYyZDQ5NmQyIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG9hcjc3IiwiaWF0IjoxNzI2NTEyODY1LCJleHAiOjE3Mjc3MjI0NjV9.EOvF89kswT1eqVJCSwVMMI-jB4kokP-aQVhi7xSUods",
|
||||||
"_id": ObjectId("66e87ee1bbe2ce0f77adf6b8"),
|
"_id": new ObjectId("66e87ee1bbe2ce0f77adf6b8"),
|
||||||
"access": "auth",
|
"access": "auth",
|
||||||
"browser": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
"browser": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZkYjIxMTE1MjgxYjIzNDYyZDQ5NmQyIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG9hcjc3IiwiaWF0IjoxNzI2NTEyODY1LCJleHAiOjE3MjY1MjAwNjV9.ESvyTWmXhfAQ0i-wwjxZR1A1Y5Bwixb60uG_UcOPQ5Y",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZkYjIxMTE1MjgxYjIzNDYyZDQ5NmQyIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG9hcjc3IiwiaWF0IjoxNzI2NTEyODY1LCJleHAiOjE3MjY1MjAwNjV9.ESvyTWmXhfAQ0i-wwjxZR1A1Y5Bwixb60uG_UcOPQ5Y",
|
||||||
@@ -90,7 +90,7 @@ db.users.insertMany([
|
|||||||
"useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
|
"useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66e49515d18d313a144ead56"),
|
"_id": new ObjectId("66e49515d18d313a144ead56"),
|
||||||
"profile": {
|
"profile": {
|
||||||
"paymenttypes": [],
|
"paymenttypes": [],
|
||||||
"notif_idCities": [],
|
"notif_idCities": [],
|
||||||
@@ -187,7 +187,7 @@ db.users.insertMany([
|
|||||||
"tokens": [
|
"tokens": [
|
||||||
{
|
{
|
||||||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNDk1MTVkMThkMzEzYTE0NGVhZDU2IiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG90ZXN0IiwiaWF0IjoxNzI2MzQ3MzE1LCJleHAiOjE3Mjc1NTY5MTV9.NHnFUXOL0MbjRs9F6HrQsEBRGXG89AsBYP7jU9m8icY",
|
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNDk1MTVkMThkMzEzYTE0NGVhZDU2IiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG90ZXN0IiwiaWF0IjoxNzI2MzQ3MzE1LCJleHAiOjE3Mjc1NTY5MTV9.NHnFUXOL0MbjRs9F6HrQsEBRGXG89AsBYP7jU9m8icY",
|
||||||
"_id": ObjectId("66e5f83392c9540e18f89730"),
|
"_id": new ObjectId("66e5f83392c9540e18f89730"),
|
||||||
"access": "auth",
|
"access": "auth",
|
||||||
"browser": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
"browser": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNDk1MTVkMThkMzEzYTE0NGVhZDU2IiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG90ZXN0IiwiaWF0IjoxNzI2MzQ3MzE1LCJleHAiOjE3MjYzNTQ1MTV9.HTr1kNMhBU_38R2Tfy6m22XCbiRh5IsBKC3fl0ipIgM",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNDk1MTVkMThkMzEzYTE0NGVhZDU2IiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG90ZXN0IiwiaWF0IjoxNzI2MzQ3MzE1LCJleHAiOjE3MjYzNTQ1MTV9.HTr1kNMhBU_38R2Tfy6m22XCbiRh5IsBKC3fl0ipIgM",
|
||||||
@@ -207,7 +207,7 @@ db.users.insertMany([
|
|||||||
"perm": 16
|
"perm": 16
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66e6fb5aac95a84fd0e11881"),
|
"_id": new ObjectId("66e6fb5aac95a84fd0e11881"),
|
||||||
"profile": {
|
"profile": {
|
||||||
"paymenttypes": [],
|
"paymenttypes": [],
|
||||||
"notif_idCities": [],
|
"notif_idCities": [],
|
||||||
@@ -304,7 +304,7 @@ db.users.insertMany([
|
|||||||
"tokens": [
|
"tokens": [
|
||||||
{
|
{
|
||||||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI3NjIzNjY1fQ.6QaBaiE1pv7mDy7S8YUReqH8m0CCK7jTmd57eGHgnzE",
|
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI3NjIzNjY1fQ.6QaBaiE1pv7mDy7S8YUReqH8m0CCK7jTmd57eGHgnzE",
|
||||||
"_id": ObjectId("66e6fcf1ac95a84fd0e11b2c"),
|
"_id": new ObjectId("66e6fcf1ac95a84fd0e11b2c"),
|
||||||
"access": "auth",
|
"access": "auth",
|
||||||
"browser": "Mozilla/5.0 (Linux; Android 11; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.127 Mobile Safari/537.36",
|
"browser": "Mozilla/5.0 (Linux; Android 11; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.127 Mobile Safari/537.36",
|
||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI2NDIxMjY1fQ.wCZcQ5uSQXnVgS_ZGyzjl6TOQk8rflfe2HSxSku0Aj4",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI2NDIxMjY1fQ.wCZcQ5uSQXnVgS_ZGyzjl6TOQk8rflfe2HSxSku0Aj4",
|
||||||
@@ -312,7 +312,7 @@ db.users.insertMany([
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI3NjQwNTgwfQ.YdB5unWwaZ21kk87RRPolLGiWxf7bKX0piKd-bGQifU",
|
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI3NjQwNTgwfQ.YdB5unWwaZ21kk87RRPolLGiWxf7bKX0piKd-bGQifU",
|
||||||
"_id": ObjectId("66e73f04ac95a84fd0e122ae"),
|
"_id": new ObjectId("66e73f04ac95a84fd0e122ae"),
|
||||||
"access": "auth",
|
"access": "auth",
|
||||||
"browser": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36",
|
"browser": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36",
|
||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI2NDM4MTgwfQ.TMF1UNbgw-EpGVWWDNnY3wRdLYOyp5HzAQiakpyaL_4",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI2NDM4MTgwfQ.TMF1UNbgw-EpGVWWDNnY3wRdLYOyp5HzAQiakpyaL_4",
|
||||||
|
|||||||
@@ -80,7 +80,8 @@ p {
|
|||||||
|
|
||||||
/* Whitespace (imageless spacer) */
|
/* Whitespace (imageless spacer) */
|
||||||
.whitespace {
|
.whitespace {
|
||||||
line-height: 0; }
|
line-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.firma {
|
.firma {
|
||||||
font-size: 0.75rem; }
|
font-size: 0.75rem; }
|
||||||
|
|||||||
@@ -1,64 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
source ./.env.prod.pcb
|
|
||||||
|
|
||||||
echo "Sincronizzazione in corso PCB PRODUZIONE ... $DIRECTORY_SERVER/"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Configurazione
|
|
||||||
REMOTE_USER="pcbuser"
|
|
||||||
REMOTE_HOST="pcb"
|
|
||||||
REMOTE_PORT="8822"
|
|
||||||
REMOTE_DIR="$DIRECTORY_SERVER"
|
|
||||||
SSH_OPTIONS="-p $REMOTE_PORT"
|
|
||||||
|
|
||||||
# Array di cartelle e file da sincronizzare
|
|
||||||
SYNC_ITEMS=(
|
|
||||||
"css"
|
|
||||||
"docs"
|
|
||||||
"emails"
|
|
||||||
"plugins"
|
|
||||||
"admin_scripts"
|
|
||||||
"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.production ... "
|
|
||||||
|
|
||||||
# Sincronizza i file specifici
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
.env.prod.pcb "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/.env.production"
|
|
||||||
|
|
||||||
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" \
|
|
||||||
ecosystem.config.pcb.js "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
|
||||||
|
|
||||||
# Verifica il risultato
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo "Sincronizzazione completata con successo. SERVER PCB! "
|
|
||||||
else
|
|
||||||
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
|
||||||
fi
|
|
||||||
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
source ./.env.test.pcb
|
|
||||||
|
|
||||||
echo "Sincronizzazione in corso PCB TEST ... $DIRECTORY_SERVER/"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Configurazione
|
|
||||||
REMOTE_USER="pcbuser"
|
|
||||||
REMOTE_HOST="pcb"
|
|
||||||
REMOTE_PORT="8822"
|
|
||||||
REMOTE_DIR="$DIRECTORY_SERVER"
|
|
||||||
SSH_OPTIONS="-p $REMOTE_PORT"
|
|
||||||
|
|
||||||
# Array di cartelle e file da sincronizzare
|
|
||||||
SYNC_ITEMS=(
|
|
||||||
"css"
|
|
||||||
"docs"
|
|
||||||
"emails"
|
|
||||||
"plugins"
|
|
||||||
"admin_scripts"
|
|
||||||
"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.test ... "
|
|
||||||
|
|
||||||
# Sincronizza i file specifici
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
.env.test.pcb "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/.env.test"
|
|
||||||
|
|
||||||
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.testpcb.js in ecosystem.config.js ... "
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
ecosystem.config.testpcb.js "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
|
||||||
|
|
||||||
# Verifica il risultato
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo "Sincronizzazione completata con successo. SERVER PCB TEST! "
|
|
||||||
else
|
|
||||||
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
|
||||||
fi
|
|
||||||
|
|
||||||
82
deploynode_pcb_prod.sh
Executable file
82
deploynode_pcb_prod.sh
Executable file
@@ -0,0 +1,82 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ./.env.prod.pcb
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso PCB PRODUZIONE ... $DIRECTORY_SERVER/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
msg="*** SERVER DI PRODUZIONE PCB **** INVIARE GLI AGGIORNAMENTI ? (Y/N)"
|
||||||
|
|
||||||
|
if [ "$1" = "" ]; then
|
||||||
|
read -p "$msg" risposta
|
||||||
|
else
|
||||||
|
echo $msg
|
||||||
|
risposta=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso PCB PRODUZIONE ... $DIRECTORY_SERVER/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Configurazione
|
||||||
|
REMOTE_USER="pcbuser"
|
||||||
|
REMOTE_HOST="pcb"
|
||||||
|
REMOTE_PORT="8822"
|
||||||
|
REMOTE_DIR="$DIRECTORY_SERVER"
|
||||||
|
SSH_OPTIONS="-p $REMOTE_PORT"
|
||||||
|
|
||||||
|
CONFIG_JS="ecosystem.config.pcb_prod.js"
|
||||||
|
ENV_FILE=".env.prod.pcb"
|
||||||
|
ENV_OUT=".env.production"
|
||||||
|
|
||||||
|
# Array di cartelle e file da sincronizzare
|
||||||
|
SYNC_ITEMS=(
|
||||||
|
"css"
|
||||||
|
"docs"
|
||||||
|
"emails"
|
||||||
|
"plugins"
|
||||||
|
"admin_scripts"
|
||||||
|
"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.production ... "
|
||||||
|
|
||||||
|
# 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 $CONFIG_JS in 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 PCB PRODUZIONE! "
|
||||||
|
else
|
||||||
|
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
82
deploynode_pcb_test.sh
Executable file
82
deploynode_pcb_test.sh
Executable file
@@ -0,0 +1,82 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ./.env.test.pcb
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso PCB TEST ... $DIRECTORY_SERVER/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
msg="*** SERVER DI TEST PCB **** INVIARE GLI AGGIORNAMENTI ? (Y/N)"
|
||||||
|
|
||||||
|
if [ "$1" = "" ]; then
|
||||||
|
read -p "$msg" risposta
|
||||||
|
else
|
||||||
|
echo $msg
|
||||||
|
risposta=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso PCB TEST ... $DIRECTORY_SERVER/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Configurazione
|
||||||
|
REMOTE_USER="pcbuser"
|
||||||
|
REMOTE_HOST="pcb"
|
||||||
|
REMOTE_PORT="8822"
|
||||||
|
REMOTE_DIR="$DIRECTORY_SERVER"
|
||||||
|
SSH_OPTIONS="-p $REMOTE_PORT"
|
||||||
|
|
||||||
|
CONFIG_JS="ecosystem.config.pcb_test.js"
|
||||||
|
ENV_FILE=".env.test.pcb"
|
||||||
|
ENV_OUT=".env.test"
|
||||||
|
|
||||||
|
# Array di cartelle e file da sincronizzare
|
||||||
|
SYNC_ITEMS=(
|
||||||
|
"css"
|
||||||
|
"docs"
|
||||||
|
"emails"
|
||||||
|
"plugins"
|
||||||
|
"admin_scripts"
|
||||||
|
"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.test ... "
|
||||||
|
|
||||||
|
# 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 $CONFIG_JS in 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 PCB TEST! "
|
||||||
|
else
|
||||||
|
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
77
deploynode_riso_prod.sh
Executable file
77
deploynode_riso_prod.sh
Executable file
@@ -0,0 +1,77 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ./.env.prod.riso
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso ... $DIRECTORY_SERVER/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
msg="*** SERVER DI ### PRODUZIONE ### RISO **** INVIARE GLI AGGIORNAMENTI ? (Y/N)"
|
||||||
|
|
||||||
|
if [ "$1" = "" ]; then
|
||||||
|
read -p "$msg" risposta
|
||||||
|
else
|
||||||
|
echo $msg
|
||||||
|
risposta=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
||||||
|
|
||||||
|
# Configurazione
|
||||||
|
REMOTE_USER="pcbuser"
|
||||||
|
REMOTE_HOST="pcb"
|
||||||
|
REMOTE_PORT="8822"
|
||||||
|
REMOTE_DIR="$DIRECTORY_SERVER"
|
||||||
|
SSH_OPTIONS="-p $REMOTE_PORT"
|
||||||
|
CONFIG_JS="ecosystem.config.riso_prod.js"
|
||||||
|
ENV_FILE=".env.prod.riso"
|
||||||
|
ENV_OUT=".env.production"
|
||||||
|
|
||||||
|
# Array di cartelle e file da sincronizzare
|
||||||
|
SYNC_ITEMS=(
|
||||||
|
"css"
|
||||||
|
"docs"
|
||||||
|
"emails"
|
||||||
|
"plugins"
|
||||||
|
"sass"
|
||||||
|
"admin_scripts"
|
||||||
|
"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
|
||||||
|
|
||||||
|
fi
|
||||||
86
deploynode_riso_test.sh
Executable file
86
deploynode_riso_test.sh
Executable file
@@ -0,0 +1,86 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ./.env.test.risosrv
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso ... $DIRECTORY_SERVER/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
msg="*** SERVER DI ### TEST ### RISO **** INVIARE GLI AGGIORNAMENTI ? (Y/N)"
|
||||||
|
|
||||||
|
if [ "$1" = "" ]; then
|
||||||
|
read -p "$msg" risposta
|
||||||
|
else
|
||||||
|
echo $msg
|
||||||
|
risposta=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
||||||
|
|
||||||
|
# Configurazione
|
||||||
|
REMOTE_USER="pcbuser"
|
||||||
|
REMOTE_HOST="pcb"
|
||||||
|
REMOTE_PORT="8822"
|
||||||
|
REMOTE_DIR="$DIRECTORY_SERVER"
|
||||||
|
SSH_OPTIONS="-p $REMOTE_PORT"
|
||||||
|
CONFIG_JS="ecosystem.config.riso_test.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"
|
||||||
|
"admin_scripts"
|
||||||
|
"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"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file $CONFIG_JS in 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
|
||||||
|
|
||||||
|
fi
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
source ./.env.prod.riso
|
|
||||||
|
|
||||||
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.prod_riso.js"
|
|
||||||
ENV_FILE=".env.prod.riso"
|
|
||||||
ENV_OUT=".env.production"
|
|
||||||
|
|
||||||
#ENV_FILE=".env.prod.pcb"
|
|
||||||
#ENV_OUT=".env.production"
|
|
||||||
|
|
||||||
# Array di cartelle e file da sincronizzare
|
|
||||||
SYNC_ITEMS=(
|
|
||||||
"css"
|
|
||||||
"docs"
|
|
||||||
"emails"
|
|
||||||
"plugins"
|
|
||||||
"sass"
|
|
||||||
"admin_scripts"
|
|
||||||
"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
|
|
||||||
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
source ./.env.test2
|
|
||||||
|
|
||||||
echo "Directory attuale: $PWD"
|
|
||||||
|
|
||||||
msg="*** SERVER DI TEST2 **** SEI SICURO DI INVIARE GLI AGGIORNAMENTI SERVERSIDE (NODE JS) - SUL SERVER $SERVERDIR_WEBSITE (Y/N) ? "
|
|
||||||
|
|
||||||
if [ "$1" = "" ]; then
|
|
||||||
read -p "$msg" risposta
|
|
||||||
else
|
|
||||||
echo $msg
|
|
||||||
risposta=$1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
|
||||||
|
|
||||||
echo "Sincronizzazione in corso... $SERVERDIR_WEBSITE"
|
|
||||||
echo "Copiando .env.test2..."
|
|
||||||
rsync -avz -e 'ssh -p 8855' .env.test2 suryapaolo@servereng:$SERVERDIR_WEBSITE/.env.test
|
|
||||||
echo "Sincronizzazione in corso... src"
|
|
||||||
rsync -avz -e 'ssh -p 8855' -a --exclude 'src/router/upload' src suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
rsync -avz -e 'ssh -p 8855' package.json suryapaolo@servereng:$SERVERDIR_WEBSITE/package.json
|
|
||||||
rsync -avz -e 'ssh -p 8855' css suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
rsync -avz -e 'ssh -p 8855' docs suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
rsync -avz -e 'ssh -p 8855' emails suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
rsync -avz -e 'ssh -p 8855' images suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
rsync -avz -e 'ssh -p 8855' plugins suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
rsync -avz -e 'ssh -p 8855' sass suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
|
|
||||||
echo "Sincronizzazione TERMINATA! - SERVER TEST2!"
|
|
||||||
fi
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
source ./.env.test.risosrv
|
|
||||||
|
|
||||||
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"
|
|
||||||
"admin_scripts"
|
|
||||||
"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
|
|
||||||
|
|
||||||
38
docs/aaa.json
Normal file
38
docs/aaa.json
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"id": "70606",
|
||||||
|
"title": "Grande Libro dell'Autosufficienza - 50 anni - Nuovo",
|
||||||
|
"description": "<em><strong>\"Il Grande Libro dell\u2019Autosufficienza\"<\/strong><\/em> di John Seymour \u00e8 un manuale completo che celebra 50 anni di pratiche di <strong>autosufficienza<\/strong> e <strong>sostenibilit\u00e0<\/strong>. Il libro offre insegnamenti pratici su come creare e gestire un <strong>orto biologico<\/strong>, raccogliere e conservare i raccolti, produrre <strong>energia rinnovabile<\/strong>, allevare animali e ridurre i rifiuti. Seymour ci guida passo passo in un viaggio verso una vita in armonia con la natura, promuovendo l\u2019indipendenza e la sostenibilit\u00e0. Un testo imprescindibile per chi desidera riscoprire le tradizioni agricole e applicarle per vivere in modo pi\u00f9 <strong>sostenibile<\/strong> e <strong>autonomo<\/strong>.\r\n<h2><strong>Con questo libro scoprirai<\/strong>:<\/h2>\r\n<ul>\r\n \t<li>Come <strong>coltivare un orto biologico<\/strong> e ottenere cibo sano.<\/li>\r\n \t<li>Le tecniche per <strong>conservare il raccolto<\/strong> e ottimizzare le risorse naturali.<\/li>\r\n \t<li>Come allevare animali per ottenere cibo e altri prodotti.<\/li>\r\n \t<li>Come produrre <strong>energia rinnovabile<\/strong> e ridurre l\u2019impatto ambientale.<\/li>\r\n \t<li>L\u2019arte di <strong>ridurre e riciclare<\/strong> rifiuti, promuovendo uno stile di vita pi\u00f9 sostenibile.<\/li>\r\n<\/ul>\r\n<h2><strong>Domande cruciali a cui <em>\"Il Grande Libro dell\u2019Autosufficienza\"<\/em> risponde<\/strong>:<\/h2>\r\n<ul>\r\n \t<li>Come posso vivere in modo <strong>autosufficiente<\/strong> e ridurre la mia dipendenza dalle risorse esterne?<\/li>\r\n \t<li>Quali sono le migliori tecniche per <strong>coltivare un orto biologico<\/strong> e garantire un raccolto abbondante?<\/li>\r\n \t<li>Come posso <strong>conservare il raccolto<\/strong> in modo naturale e duraturo?<\/li>\r\n \t<li>In che modo posso <strong>produrre energia rinnovabile<\/strong> a casa mia?<\/li>\r\n \t<li>Come posso vivere in <strong>armonia con la natura<\/strong> e promuovere la <strong>sostenibilit\u00e0<\/strong>?<\/li>\r\n<\/ul>\r\n<h2><strong>Questo libro \u00e8 dedicato a<\/strong>:<\/h2>\r\n<ul>\r\n \t<li>Lettori appassionati di <strong>giardinaggio<\/strong>, <strong>agricoltura biologica<\/strong> e vita rurale.<\/li>\r\n \t<li>Chiunque desideri adottare uno <strong>stile di vita sostenibile<\/strong> e autosufficiente.<\/li>\r\n \t<li><strong>Famiglie eco-consapevoli<\/strong> che vogliono ridurre il proprio impatto ambientale.<\/li>\r\n \t<li><strong>Amanti della natura<\/strong> e sostenitori delle <strong>energie rinnovabili<\/strong>.<\/li>\r\n<\/ul>\r\n<h2><strong>Contenuti chiave <em>\"Il Grande Libro dell\u2019Autosufficienza\"<\/em><\/strong>:<\/h2>\r\n<em>Il Grande Libro dell\u2019Autosufficienza<\/em> offre una panoramica completa di tutte le tecniche per vivere in modo <strong>autonomo<\/strong> e <strong>sostenibile<\/strong>. Attraverso 10 capitoli, il libro esplora vari aspetti dell\u2019autosufficienza, dalla coltivazione di ortaggi e frutti alla produzione di cibo dagli animali, fino alla gestione dell'energia e dei rifiuti. La guida si focalizza sul valore delle <strong>tradizioni agricole<\/strong>, sulla cura dell\u2019ambiente e sul benessere che deriva dal vivere in sintonia con la natura.\r\n\r\n ",
|
||||||
|
"link": "https:\/\/www.fioredellavita.it\/grande-libro-dellautosufficienza-50-anni\/?attribute_pa_versione=nuovo",
|
||||||
|
"image_link": "https:\/\/www.fioredellavita.it\/wp-content\/uploads\/2024\/09\/il-grande-libro-dell-autosufficienza-speciale-50-anni-copertina-web.jpg",
|
||||||
|
"price": "39,00",
|
||||||
|
"sale_price": "37,05",
|
||||||
|
"categories": "Informazione Libera",
|
||||||
|
"isbn": "",
|
||||||
|
"Autore": "John,Seymour",
|
||||||
|
"Editore": "Macro Edizioni",
|
||||||
|
"Tipologia": "Libri",
|
||||||
|
"Collezione": "Libri Informazione Libera,Informazione Libera",
|
||||||
|
"Quantita": "1821",
|
||||||
|
"Lunghezza": "",
|
||||||
|
"Stato": "publish",
|
||||||
|
"Pagine": "",
|
||||||
|
"Edizione": "",
|
||||||
|
"Traduzione": "",
|
||||||
|
"Versione": "Nuovo",
|
||||||
|
"StockStatus": "instock",
|
||||||
|
"downloadable": "no",
|
||||||
|
"img1": "https:\/\/www.fioredellavita.it\/wp-content\/uploads\/2024\/09\/quarta_nuovo_grande_libro_dell_autosufficienza_2024_17038.jpg",
|
||||||
|
"img2": "",
|
||||||
|
"img3": "",
|
||||||
|
"formato": "Cartonato",
|
||||||
|
"preOrderDate": "2025-02-25",
|
||||||
|
"short_descr": null,
|
||||||
|
"availability": "in stock",
|
||||||
|
"checkout_link": "https:\/\/www.fioredellavita.it\/carrello\/?productId=70606",
|
||||||
|
"seo_descr": "Versione: Nuovo",
|
||||||
|
"preord": "no",
|
||||||
|
"addtocart_link": "https:\/\/www.fioredellavita.it\/grande-libro-dellautosufficienza-50-anni\/?attribute_pa_versione=nuovo&variation_id=70606&add-to-cart=70606",
|
||||||
|
"eta": "",
|
||||||
|
"misure": "cm 22x28",
|
||||||
|
"sku": "22464"
|
||||||
|
},
|
||||||
@@ -1,839 +0,0 @@
|
|||||||
require('./config/config');
|
|
||||||
require('./config/config');
|
|
||||||
|
|
||||||
// console.log(" lodash");
|
|
||||||
|
|
||||||
console.log(process.versions);
|
|
||||||
|
|
||||||
const _ = require('lodash');
|
|
||||||
// console.log(" cors");
|
|
||||||
const cors = require('cors');
|
|
||||||
|
|
||||||
// console.log(" 2) fs");
|
|
||||||
const fs = require('fs');
|
|
||||||
|
|
||||||
var https = require('https');
|
|
||||||
|
|
||||||
const NUOVO_METODO_TEST = true;
|
|
||||||
|
|
||||||
const server_constants = require('./tools/server_constants');
|
|
||||||
|
|
||||||
//const throttle = require('express-throttle-bandwidth');
|
|
||||||
// app.use(throttle(1024 * 128)) // throttling bandwidth
|
|
||||||
|
|
||||||
const port = process.env.PORT;
|
|
||||||
|
|
||||||
// var cookieParser = require('cookie-parser')
|
|
||||||
// var csrf = require('csurf')
|
|
||||||
const express = require('express');
|
|
||||||
const bodyParser = require('body-parser');
|
|
||||||
const path = require('path');
|
|
||||||
|
|
||||||
const cron = require('node-cron');
|
|
||||||
console.log('Starting mongoose...');
|
|
||||||
|
|
||||||
const tls = require('tls');
|
|
||||||
|
|
||||||
require('./db/mongoose');
|
|
||||||
|
|
||||||
// console.log('Starting pem...');
|
|
||||||
|
|
||||||
// const pem = require('pem')
|
|
||||||
|
|
||||||
const { Settings } = require('./models/settings');
|
|
||||||
|
|
||||||
const Site = require('./models/site');
|
|
||||||
|
|
||||||
// test
|
|
||||||
|
|
||||||
const i18n = require('i18n');
|
|
||||||
|
|
||||||
let credentials = null;
|
|
||||||
|
|
||||||
// OBTAIN
|
|
||||||
// https://www.psclistens.com/insight/blog/enabling-a-nodejs-ssl-webserver-using-let-s-encrypt-pem-certificates/
|
|
||||||
|
|
||||||
|
|
||||||
if ((process.env.NODE_ENV === 'production')) {
|
|
||||||
console.log('*** AMBIENTE DI PRODUZIONE (Aprile 2024) !!!!')
|
|
||||||
} else if (process.env.NODE_ENV === 'test') {
|
|
||||||
console.log('*** ### AMBIENTE DI TEST ')
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
console.log('DB: ' + process.env.DATABASE);
|
|
||||||
// console.log("PORT: " + port);
|
|
||||||
// console.log("MONGODB_URI: " + process.env.MONGODB_URI);
|
|
||||||
|
|
||||||
var app = express();
|
|
||||||
|
|
||||||
|
|
||||||
let telegrambot = null;
|
|
||||||
|
|
||||||
const tools = require('./tools/general');
|
|
||||||
|
|
||||||
const shared_consts = require('./tools/shared_nodejs');
|
|
||||||
|
|
||||||
var mongoose = require('mongoose').set('debug', false);
|
|
||||||
|
|
||||||
mongoose.set('debug', false);
|
|
||||||
|
|
||||||
const { CfgServer } = require('./models/cfgserver');
|
|
||||||
const { ObjectId } = require('mongodb');
|
|
||||||
|
|
||||||
const populate = require('./populate/populate');
|
|
||||||
const { Circuit } = require('./models/circuit');
|
|
||||||
|
|
||||||
const printf = require('util').format;
|
|
||||||
|
|
||||||
myLoad().then(ris => {
|
|
||||||
|
|
||||||
const { User } = require('./models/user');
|
|
||||||
|
|
||||||
require('./models/todo');
|
|
||||||
require('./models/project');
|
|
||||||
require('./models/subscribers');
|
|
||||||
require('./models/booking');
|
|
||||||
require('./models/sendmsg');
|
|
||||||
require('./models/sendnotif');
|
|
||||||
require('./models/mailinglist');
|
|
||||||
require('./models/newstosent');
|
|
||||||
require('./models/mypage');
|
|
||||||
require('./models/myelem');
|
|
||||||
require('./models/bot');
|
|
||||||
require('./models/calzoom');
|
|
||||||
const mysql_func = require('./mysql/mysql_func');
|
|
||||||
|
|
||||||
const index_router = require('./router/index_router');
|
|
||||||
const push_router = require('./router/push_router');
|
|
||||||
const newsletter_router = require('./router/newsletter_router');
|
|
||||||
const booking_router = require('./router/booking_router');
|
|
||||||
const dashboard_router = require('./router/dashboard_router');
|
|
||||||
const myevent_router = require('./router/myevent_router');
|
|
||||||
const subscribe_router = require('./router/subscribe_router');
|
|
||||||
const sendmsg_router = require('./router/sendmsg_router');
|
|
||||||
const sendnotif_router = require('./router/sendnotif_router');
|
|
||||||
const email_router = require('./router/email_router');
|
|
||||||
const todos_router = require('./router/todos_router');
|
|
||||||
const test_router = require('./router/test_router');
|
|
||||||
const projects_router = require('./router/projects_router');
|
|
||||||
const report_router = require('./router/report_router');
|
|
||||||
const users_router = require('./router/users_router');
|
|
||||||
const reactions_router = require('./router/reactions_router');
|
|
||||||
const mygroups_router = require('./router/mygroups_router');
|
|
||||||
const circuits_router = require('./router/circuits_router');
|
|
||||||
const accounts_router = require('./router/accounts_router');
|
|
||||||
const iscrittiConacreis_router = require('./router/iscrittiConacreis_router');
|
|
||||||
const iscrittiArcadei_router = require('./router/iscrittiArcadei_router');
|
|
||||||
const site_router = require('./router/site_router');
|
|
||||||
const admin_router = require('./router/admin_router');
|
|
||||||
const products_router = require('./router/products_router');
|
|
||||||
const cart_router = require('./router/cart_router');
|
|
||||||
const orders_router = require('./router/orders_router');
|
|
||||||
const city_router = require('./router/city_router');
|
|
||||||
const myskills_router = require('./router/myskills_router');
|
|
||||||
const mygoods_router = require('./router/mygoods_router');
|
|
||||||
const mygen_router = require('./router/mygen_router');
|
|
||||||
const aitools_router = require('./router/aitools_router');
|
|
||||||
|
|
||||||
const { MyEvent } = require('./models/myevent');
|
|
||||||
|
|
||||||
app.use(bodyParser.json({ limit: '50mb' }));
|
|
||||||
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
|
|
||||||
|
|
||||||
app.use(express.static('views'));
|
|
||||||
|
|
||||||
// app.use(express.static(path.join(__dirname, 'client')));
|
|
||||||
|
|
||||||
app.use(bodyParser.json());
|
|
||||||
|
|
||||||
// app.set('view engine', 'pug');
|
|
||||||
|
|
||||||
// Set static folder
|
|
||||||
// app.use(express.static(path.join(__dirname, 'public')));
|
|
||||||
|
|
||||||
i18n.configure({
|
|
||||||
locales: ['it', 'enUs', 'es', 'fr', 'pt', 'si'],
|
|
||||||
defaultLocale: 'it',
|
|
||||||
// cookie: 'cook',
|
|
||||||
directory: __dirname + '/locales',
|
|
||||||
api: {
|
|
||||||
'__': 'translate',
|
|
||||||
'__n': 'translateN'
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
app.use(cors({
|
|
||||||
exposedHeaders: ['x-auth', 'x-refrtok'],
|
|
||||||
}));
|
|
||||||
|
|
||||||
app.use(bodyParser.json());
|
|
||||||
|
|
||||||
// app.use(express.cookieParser());
|
|
||||||
app.use(i18n.init);
|
|
||||||
|
|
||||||
console.log('Use Routes \...');
|
|
||||||
|
|
||||||
|
|
||||||
// Use Routes
|
|
||||||
app.use('/', index_router);
|
|
||||||
app.use('/subscribe', subscribe_router);
|
|
||||||
app.use('/sendmsg', sendmsg_router);
|
|
||||||
app.use('/sendnotif', sendnotif_router);
|
|
||||||
app.use('/push', push_router);
|
|
||||||
app.use('/news', newsletter_router);
|
|
||||||
app.use('/booking', booking_router);
|
|
||||||
app.use('/dashboard', dashboard_router);
|
|
||||||
app.use('/event', myevent_router);
|
|
||||||
app.use('/email', email_router);
|
|
||||||
app.use('/todos', todos_router);
|
|
||||||
app.use('/test', test_router);
|
|
||||||
app.use('/projects', projects_router);
|
|
||||||
app.use('/users', users_router);
|
|
||||||
app.use('/reactions', reactions_router);
|
|
||||||
app.use('/mygroup', mygroups_router);
|
|
||||||
app.use('/circuit', circuits_router);
|
|
||||||
app.use('/account', accounts_router);
|
|
||||||
app.use('/iscritti_conacreis', iscrittiConacreis_router);
|
|
||||||
app.use('/iscritti_arcadei', iscrittiArcadei_router);
|
|
||||||
app.use('/report', report_router);
|
|
||||||
app.use('/site', site_router);
|
|
||||||
app.use('/admin', admin_router);
|
|
||||||
app.use('/products', products_router);
|
|
||||||
app.use('/cart', cart_router);
|
|
||||||
app.use('/orders', orders_router);
|
|
||||||
app.use('/city', city_router);
|
|
||||||
app.use('/myskills', myskills_router);
|
|
||||||
app.use('/mygoods', mygoods_router);
|
|
||||||
app.use('/mygen', mygen_router);
|
|
||||||
app.use('/aitools', aitools_router);
|
|
||||||
|
|
||||||
// catch 404 and forward to error handler
|
|
||||||
// app.use(function (req, res, next) {
|
|
||||||
// var err = new Error('Not Found');
|
|
||||||
// err.status = 404;
|
|
||||||
// next(err);
|
|
||||||
// });
|
|
||||||
|
|
||||||
// app.set('views', path.join(__dirname, 'views'));
|
|
||||||
// app.set('view engine', 'pug');
|
|
||||||
|
|
||||||
// development error handler
|
|
||||||
// will print stacktrace
|
|
||||||
if (app.get('env') === 'development') {
|
|
||||||
|
|
||||||
app.use(function (err, req, res, next) {
|
|
||||||
console.log('Server Error: ', err.message);
|
|
||||||
// console.trace();
|
|
||||||
res.status(err.status || 500).send({ error: err.message });
|
|
||||||
// res.render('error', {
|
|
||||||
// message: err.message,
|
|
||||||
// error: err
|
|
||||||
// });
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// require('./telegram/telegrambot');
|
|
||||||
|
|
||||||
// *** DB CONNECTIONS ***
|
|
||||||
// mysql_func.mySqlConn_Shen.connect((err) => {
|
|
||||||
// if (!err)
|
|
||||||
// console.log('DB connection to Shen Database succeded.');
|
|
||||||
// else
|
|
||||||
// console.log('DB connection to Shen Database FAILED \n Error: ' + JSON.stringify(err, undefined, 2));
|
|
||||||
// });
|
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'production') {
|
|
||||||
console.log('*** PRODUCTION! ');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((process.env.NODE_ENV === 'production') ||
|
|
||||||
(process.env.NODE_ENV === 'test')) {
|
|
||||||
|
|
||||||
const keyStream = path.resolve(`./${process.env.PATH_CERT_KEY}`);
|
|
||||||
const certificateStream = path.resolve(`./${process.env.PATH_SERVER_CRT}`);
|
|
||||||
|
|
||||||
let privateKey = fs.readFileSync(keyStream, "utf8");
|
|
||||||
let certificate = fs.readFileSync(certificateStream, "utf8");
|
|
||||||
|
|
||||||
let credentials = null;
|
|
||||||
|
|
||||||
|
|
||||||
// arrSecureContext = ['piuchebuono.app', 'gruppomacro.app'];
|
|
||||||
arrSecureContext = ['freeplanet.app', 'riso.app', 'comunitanuovomondo.app'];
|
|
||||||
|
|
||||||
let secureContext = {};
|
|
||||||
|
|
||||||
for (let i = 0; i < arrSecureContext.length; i++) {
|
|
||||||
try {
|
|
||||||
secureContext = {
|
|
||||||
...secureContext,
|
|
||||||
[arrSecureContext[i]]: tls.createSecureContext({
|
|
||||||
key: fs.readFileSync('/etc/letsencrypt/live/' + arrSecureContext[i] + '/privkey.pem'),
|
|
||||||
cert: fs.readFileSync('/etc/letsencrypt/live/' + arrSecureContext[i] + '/fullchain.pem')
|
|
||||||
// ca: fs.readFileSync('../path_to_certificate_authority_bundle.ca-bundle1', 'utf8'), // this ca property is optional
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
credentials = {
|
|
||||||
SNICallback: function (domain, cb) {
|
|
||||||
if (secureContext) {
|
|
||||||
if (cb) {
|
|
||||||
cb(null, secureContext);
|
|
||||||
} else {
|
|
||||||
// compatibility for older versions of node
|
|
||||||
return secureContext;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
console.log('Error: ' + err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
let secureContext = {
|
|
||||||
'piuchebuono.app': tls.createSecureContext({
|
|
||||||
key: fs.readFileSync('/etc/letsencrypt/live/piuchebuono.app/privkey.pem'),
|
|
||||||
cert: fs.readFileSync('/etc/letsencrypt/live/piuchebuono.app/fullchain.pem')
|
|
||||||
// ca: fs.readFileSync('../path_to_certificate_authority_bundle.ca-bundle1', 'utf8'), // this ca property is optional
|
|
||||||
}),
|
|
||||||
'gruppomacro.app': tls.createSecureContext({
|
|
||||||
key: fs.readFileSync('/etc/letsencrypt/live/gruppomacro.app/privkey.pem'),
|
|
||||||
cert: fs.readFileSync('/etc/letsencrypt/live/gruppomacro.app/fullchain.pem')
|
|
||||||
// ca: fs.readFileSync('../path_to_certificate_authority_bundle.ca-bundle1', 'utf8'), // this ca property is optional
|
|
||||||
}),
|
|
||||||
}*/
|
|
||||||
|
|
||||||
console.log('secureContext', secureContext);
|
|
||||||
|
|
||||||
if (NUOVO_METODO_TEST) {
|
|
||||||
credentials = {
|
|
||||||
SNICallback: function (domain, cb) {
|
|
||||||
if (secureContext[domain]) {
|
|
||||||
if (cb) {
|
|
||||||
cb(null, secureContext[domain]);
|
|
||||||
} else {
|
|
||||||
// compatibility for older versions of node
|
|
||||||
return secureContext[domain];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new Error('No keys/certificates for domain requested');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// must list a default key and cert because required by tls.createServer()
|
|
||||||
key: privateKey,
|
|
||||||
cert: certificate,
|
|
||||||
}
|
|
||||||
|
|
||||||
/*} else {
|
|
||||||
// NON USATO !
|
|
||||||
credentials = {
|
|
||||||
key: privateKey,
|
|
||||||
cert: certificate,
|
|
||||||
ca: [
|
|
||||||
fs.readFileSync(process.env.PATH_SSL_ROOT_PEM, 'utf8'),
|
|
||||||
fs.readFileSync(process.env.PATH_SSL_CHAIN_PEM, 'utf8'),
|
|
||||||
],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/*} else {
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.env.HTTPS_LOCALHOST === "true") {
|
|
||||||
privateKey = fs.readFileSync(process.env.PATH_CERT_KEY, 'utf8');
|
|
||||||
certificate = fs.readFileSync(process.env.PATH_SERVER_CRT, 'utf8');
|
|
||||||
credentials = {
|
|
||||||
key: privateKey,
|
|
||||||
cert: certificate,
|
|
||||||
ciphers: 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES256-SHA384',
|
|
||||||
honorCipherOrder: true,
|
|
||||||
secureProtocol: 'TLSv1_2_method',
|
|
||||||
};
|
|
||||||
|
|
||||||
} else {
|
|
||||||
var http = require('http');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((process.env.NODE_ENV === 'production') ||
|
|
||||||
(process.env.NODE_ENV === 'test') || process.env.HTTPS_LOCALHOST === "true") {
|
|
||||||
|
|
||||||
const httpsServer = https.createServer(credentials, app);
|
|
||||||
|
|
||||||
console.log('httpsServer: port ', port);
|
|
||||||
httpsServer.listen(port);
|
|
||||||
} else {
|
|
||||||
console.log('httpServer: port ', port);
|
|
||||||
const httpServer = http.createServer(app);
|
|
||||||
httpServer.listen(port);
|
|
||||||
}
|
|
||||||
|
|
||||||
mystart();
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// app.use(throttle(1024 * 128)); // throttling bandwidth
|
|
||||||
|
|
||||||
// app.use((req, res, next) => {
|
|
||||||
// res.header('Access-Control-Allow-Origin', '*')
|
|
||||||
// res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept')
|
|
||||||
// next()
|
|
||||||
// });
|
|
||||||
|
|
||||||
async function myLoad() {
|
|
||||||
|
|
||||||
return tools.loadApps();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function mystart() {
|
|
||||||
|
|
||||||
// await estraiTutteLeImmagini();
|
|
||||||
|
|
||||||
await tools.getApps();
|
|
||||||
|
|
||||||
if (process.env.PROD !== 1) {
|
|
||||||
|
|
||||||
testmsgwebpush();
|
|
||||||
|
|
||||||
// tools.sendNotifToAdmin('Riparti', 'Riparti');
|
|
||||||
|
|
||||||
let miapass = '';
|
|
||||||
|
|
||||||
if (miapass !== '') {
|
|
||||||
let crypt = tools.cryptdata(miapass);
|
|
||||||
let decrypt = tools.decryptdata(crypt);
|
|
||||||
|
|
||||||
console.log('crypted:', crypt);
|
|
||||||
console.log('decrypted:', decrypt);
|
|
||||||
}
|
|
||||||
|
|
||||||
mycron();
|
|
||||||
if (!process.env.VITE_DEBUG) {
|
|
||||||
mycron();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
telegrambot = require('./telegram/telegrambot');
|
|
||||||
|
|
||||||
await inizia();
|
|
||||||
|
|
||||||
await resetProcessingJob();
|
|
||||||
|
|
||||||
populate.popolaTabelleNuove();
|
|
||||||
|
|
||||||
faitest();
|
|
||||||
|
|
||||||
// ----------------- MAILCHIMP -----
|
|
||||||
const querystring = require('querystring');
|
|
||||||
const mailchimpClientId = 'xxxxxxxxxxxxxxxx';
|
|
||||||
|
|
||||||
app.get('/mailchimp/auth/authorize', function (req, res) {
|
|
||||||
res.redirect('https://login.mailchimp.com/oauth2/authorize?' +
|
|
||||||
querystring.stringify({
|
|
||||||
'response_type': 'code',
|
|
||||||
'client_id': mailchimpClientId,
|
|
||||||
'redirect_uri': 'http://127.0.0.1:3000/mailchimp/auth/callback',
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------
|
|
||||||
|
|
||||||
function populateDBadmin() {
|
|
||||||
const cfgserv = [
|
|
||||||
{
|
|
||||||
_id: new ObjectId(),
|
|
||||||
idapp: '9',
|
|
||||||
chiave: 'vers',
|
|
||||||
userId: 'ALL',
|
|
||||||
valore: '0.1.2',
|
|
||||||
}];
|
|
||||||
|
|
||||||
let cfg = new CfgServer(cfgserv[0]).save();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function mycron() {
|
|
||||||
|
|
||||||
try {
|
|
||||||
const sendemail = require('./sendemail');
|
|
||||||
|
|
||||||
const arr = await tools.getApps();
|
|
||||||
|
|
||||||
for (const app of arr) {
|
|
||||||
sendemail.checkifPendingNewsletter(app.idapp);
|
|
||||||
sendemail.checkifSentNewsletter(app.idapp);
|
|
||||||
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.error('Err mycron', e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function mycron_30min() {
|
|
||||||
for (const app of await tools.getApps()) {
|
|
||||||
let enablecrontab = false;
|
|
||||||
|
|
||||||
enablecrontab = await Settings.getValDbSettings(app.idapp,
|
|
||||||
tools.ENABLE_CRONTAB, false);
|
|
||||||
|
|
||||||
if (enablecrontab) {
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function mycron_everyday() {
|
|
||||||
try {
|
|
||||||
|
|
||||||
const { User } = require('./models/user');
|
|
||||||
|
|
||||||
const arrapps = await tools.getApps();
|
|
||||||
for (const app of arrapps) {
|
|
||||||
|
|
||||||
// Azzera le richieste di password:
|
|
||||||
const usersblocked = await User.find({ idapp: app.idapp, retry_pwd: { $exists: true, $gte: 29 } }).lean();
|
|
||||||
for (const user of usersblocked) {
|
|
||||||
await User.findOneAndUpdate({ _id: user._id }, { $set: { retry_pwd: 20 } });
|
|
||||||
let text = `⚠️⚠️⚠️ L\'utente ${user.username} (${user.name} ${user.surname}) viene sbloccato dal numero massimo di tentativi di richiesta password!\nTelerlo d\'occhio !\n@${user.profile.username_telegram}`;
|
|
||||||
await telegrambot.sendMsgTelegramToTheAdminAllSites(text, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Crea un file con all'interno il nome del dominio per ogni app:
|
|
||||||
await tools.createFileWithDomainName();
|
|
||||||
|
|
||||||
} catch (e) {
|
|
||||||
console.error('mycron_everyday: ', e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function testmsgwebpush() {
|
|
||||||
const { User } = require('./models/user');
|
|
||||||
|
|
||||||
// console.log('nomeapp 1: ' , tools.getNomeAppByIdApp(1));
|
|
||||||
// console.log('nomeapp 2: ' , tools.getNomeAppByIdApp(2));
|
|
||||||
|
|
||||||
User.find({ username: 'paoloar77', idapp: '1' }).then(async (arrusers) => {
|
|
||||||
if (arrusers !== null) {
|
|
||||||
for (const user of arrusers) {
|
|
||||||
await tools.sendNotificationToUser(user._id, 'Server',
|
|
||||||
'Il Server è Ripartito', '/', '', 'server', []).then(ris => {
|
|
||||||
if (ris) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// already sent the error on calling sendNotificationToUser
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cron every X minutes
|
|
||||||
cron.schedule('*/1 * * * *', () => {
|
|
||||||
// console.log('Running Cron Job');
|
|
||||||
// if (!process.env.VITE_DEBUG) {
|
|
||||||
mycron();
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
|
|
||||||
// Cron every X minutes
|
|
||||||
cron.schedule('*/60 * * * *', async () => {
|
|
||||||
if (!process.env.VITE_DEBUG) {
|
|
||||||
mycron_30min();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Cron every 21:00 (1 volta al giorno)
|
|
||||||
cron.schedule('0 21 * * *', async () => {
|
|
||||||
mycron_everyday();
|
|
||||||
});
|
|
||||||
|
|
||||||
// mycron_30min();
|
|
||||||
|
|
||||||
// tools.writelogfile('test', 'prova.txt');
|
|
||||||
|
|
||||||
async function resetProcessingJob() {
|
|
||||||
|
|
||||||
const { Newstosent } = require('./models/newstosent');
|
|
||||||
|
|
||||||
arrrec = await Newstosent.find({});
|
|
||||||
|
|
||||||
for (const rec of arrrec) {
|
|
||||||
rec.processing_job = false;
|
|
||||||
await Newstosent.findOneAndUpdate({ _id: rec.id }, { $set: rec }, { new: false }).
|
|
||||||
then((item) => {
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//app.listen(port, () => {
|
|
||||||
// console.log(`Server started at port ${port}`);
|
|
||||||
//});
|
|
||||||
|
|
||||||
async function inizia() {
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (true) {
|
|
||||||
const url = 'https://raw.githubusercontent.com/matteocontrini/comuni-json/master/comuni.json';
|
|
||||||
const outputPath = './comuni_italia_geojson.json';
|
|
||||||
downloadGeoJSON(url, outputPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
mycron_everyday();
|
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'development') {
|
|
||||||
await telegrambot.sendMsgTelegram(tools.FREEPLANET,
|
|
||||||
shared_consts.ADMIN_USER_SERVER,
|
|
||||||
`Ciao ${telegrambot.ADMIN_USER_NAME_SERVER}!`);
|
|
||||||
|
|
||||||
await telegrambot.sendMsgTelegramByIdTelegram(tools.FREEPLANET,
|
|
||||||
telegrambot.ADMIN_IDTELEGRAM_SERVER,
|
|
||||||
`Ciao ${telegrambot.ADMIN_USER_NAME_SERVER}\n` +
|
|
||||||
`🔅 Il Server ${process.env.DATABASE} è appena ripartito!`);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
await telegrambot.sendMsgTelegramToTheAdminAllSites(`Ciao Admin\n` + `🔅🔅🔅 Il Server col BOT di {appname} è appena ripartito!`, false);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
await Site.createFirstUserAdmin();
|
|
||||||
|
|
||||||
/*const {Circuit} = require('./models/circuit');
|
|
||||||
|
|
||||||
await Circuit.setDeperimentoOff();
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} catch (e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
// telegrambot.sendMsgTelegramToTheManagers('7', 'PROVAAA!');
|
|
||||||
|
|
||||||
// if (process.env.PROD !== 1) {
|
|
||||||
// const reg = require('./reg/registration');
|
|
||||||
// const link = reg.getlinkregByEmail('7', 'tomasihelen@dasdasgmail.comAAAA' , 'HelenTomasidasdasd');
|
|
||||||
// const link2 = reg.getlinkregByEmail('7', 'tomasihelen@gmail.com' , 'HelenTomasi');
|
|
||||||
// //const link2 = reg.getlinkregByEmail('7', 'elenaliubicich@gmail.com' , 'Elenaliu');
|
|
||||||
//
|
|
||||||
// console.log(link);
|
|
||||||
// console.log(link2);
|
|
||||||
// }
|
|
||||||
|
|
||||||
async function estraiImmagini(table) {
|
|
||||||
const { User } = require('./models/user');
|
|
||||||
|
|
||||||
let idapp = '13';
|
|
||||||
|
|
||||||
let arrlist;
|
|
||||||
|
|
||||||
const globalTables = require('./tools/globalTables');
|
|
||||||
|
|
||||||
|
|
||||||
const mytable = globalTables.getTableByTableName(table);
|
|
||||||
if (!mytable)
|
|
||||||
return;
|
|
||||||
|
|
||||||
console.log('INIZIO - estraiImmagini', table);
|
|
||||||
|
|
||||||
arrlist = await mytable.find({ idapp }).lean();
|
|
||||||
|
|
||||||
let file = '';
|
|
||||||
let filetocheck = '';
|
|
||||||
let dirmain = '';
|
|
||||||
let filefrom = '';
|
|
||||||
let filefrom2 = '';
|
|
||||||
let dir = tools.getdirByIdApp(idapp) + dirmain + '/upload/';
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (!tools.sulServer()) {
|
|
||||||
dirmain = '/public';
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const rec of arrlist) {
|
|
||||||
const myuser = await User.findOne({ idapp, _id: rec.userId }).lean();
|
|
||||||
if (myuser) {
|
|
||||||
const myphotos = rec.photos;
|
|
||||||
|
|
||||||
if (myphotos.length > 0) {
|
|
||||||
let folderprof = dir + 'profile/' + myuser.username;
|
|
||||||
|
|
||||||
try {
|
|
||||||
// console.log('checkdir', folderprof);
|
|
||||||
if (!fs.existsSync(folderprof)) {
|
|
||||||
console.log('*** Creadir', folderprof);
|
|
||||||
fs.mkdirSync(folderprof);
|
|
||||||
}
|
|
||||||
|
|
||||||
folderprof = dir + 'profile/' + myuser.username + '/' + table;
|
|
||||||
// console.log('checkdir', folderprof);
|
|
||||||
if (!fs.existsSync(folderprof)) {
|
|
||||||
console.log('creadir', folderprof);
|
|
||||||
fs.mkdirSync(folderprof);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const photo of myphotos) {
|
|
||||||
|
|
||||||
if (photo.imagefile) {
|
|
||||||
file = dir + 'profile/' + myuser.username + '/' + table + '/' +
|
|
||||||
photo.imagefile;
|
|
||||||
filefrom = dir + 'profile/undefined/' + table + '/' + photo.imagefile;
|
|
||||||
filefrom2 = dir + 'profile/' + myuser.username + '/' + photo.imagefile;
|
|
||||||
|
|
||||||
// console.log('file', file);
|
|
||||||
// console.log('filefrom', filefrom);
|
|
||||||
|
|
||||||
if (!tools.isFileExists(file)) {
|
|
||||||
// non esiste
|
|
||||||
console.log('non esiste', file);
|
|
||||||
console.log(' filefrom', filefrom);
|
|
||||||
console.log(' filefrom2', filefrom2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tools.isFileExists(file) && tools.isFileExists(filefrom)) {
|
|
||||||
console.log('@@@@@@ copia file:', filefrom, 'a', file);
|
|
||||||
tools.copy(filefrom, file);
|
|
||||||
}
|
|
||||||
if (!tools.isFileExists(file) && tools.isFileExists(filefrom2)) {
|
|
||||||
console.log('@@@@@@ copia file 2:', filefrom2, 'a', file);
|
|
||||||
tools.copy(filefrom2, file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
console.log('FINE - estraiImmagini', table);
|
|
||||||
} catch (e) {
|
|
||||||
console.error('e', e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function estraiTutteLeImmagini() {
|
|
||||||
|
|
||||||
await estraiImmagini('myskills');
|
|
||||||
await estraiImmagini('mygoods');
|
|
||||||
await estraiImmagini('mybachecas');
|
|
||||||
}
|
|
||||||
|
|
||||||
async function faitest() {
|
|
||||||
// console.log('Fai Test:')
|
|
||||||
|
|
||||||
const testfind = false;
|
|
||||||
|
|
||||||
// const $vers = tools.getVersionint('1.92.45');
|
|
||||||
|
|
||||||
if (true) {
|
|
||||||
// tools.execScript("ls -la");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false) {
|
|
||||||
prova = tools.removeAtChar('@prova');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false) {
|
|
||||||
const prova = tools.getConfSiteOptionEnabledByIdApp('13', shared_consts.ConfSite.Notif_Reg_Push_Admin);
|
|
||||||
console.log('prova', prova);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (testfind) {
|
|
||||||
const { City } = require('./models/city');
|
|
||||||
|
|
||||||
let miacity = 'roma';
|
|
||||||
const ris = await City.findByCity(miacity);
|
|
||||||
|
|
||||||
console.log('ris', ris);
|
|
||||||
}
|
|
||||||
|
|
||||||
const { User } = require('./models/user');
|
|
||||||
|
|
||||||
if (false) {
|
|
||||||
let myuser = await User.findOne({
|
|
||||||
idapp: '1',
|
|
||||||
username: 'paoloar77',
|
|
||||||
});
|
|
||||||
const langdest = 'it';
|
|
||||||
|
|
||||||
telegrambot.askConfirmationUser(myuser.idapp, shared_consts.CallFunz.REGISTRATION, myuser);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false) {
|
|
||||||
|
|
||||||
const user = await User.findOne({
|
|
||||||
idapp: 12,
|
|
||||||
username: 'paolotest1',
|
|
||||||
});
|
|
||||||
|
|
||||||
await sendemail.sendEmail_Registration('it', 'paolo@arcodiluce.it', user,
|
|
||||||
'12', '');
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false) {
|
|
||||||
|
|
||||||
const { User } = require('./models/user');
|
|
||||||
|
|
||||||
const idapp = tools.FREEPLANET;
|
|
||||||
const idreg = 0;
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
const user = await User.findOne({
|
|
||||||
idapp,
|
|
||||||
username: 'paoloar773',
|
|
||||||
});
|
|
||||||
|
|
||||||
user.aportador_solidario = 'paoloar77';
|
|
||||||
|
|
||||||
let mylocalsconf = {
|
|
||||||
idapp,
|
|
||||||
dataemail: null,
|
|
||||||
locale: user.lang,
|
|
||||||
nomeapp: tools.getNomeAppByIdApp(idapp),
|
|
||||||
strlinksito: tools.getHostByIdApp(idapp),
|
|
||||||
strlinkreg: '',
|
|
||||||
username: user.username,
|
|
||||||
name: user.name,
|
|
||||||
surname: user.surname,
|
|
||||||
forgetpwd: tools.getHostByIdApp(idapp) + '/requestresetpwd',
|
|
||||||
emailto: '',
|
|
||||||
user,
|
|
||||||
};
|
|
||||||
|
|
||||||
await telegrambot.notifyToTelegram(telegrambot.phase.REGISTRATION,
|
|
||||||
mylocalsconf);
|
|
||||||
} catch (e) {
|
|
||||||
console.log('error ' + e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = { app };
|
|
||||||
|
|
||||||
@@ -1 +1,12 @@
|
|||||||
<div class="row align-start" style="gap:0px;flex-direction:column;flex:1;display:flex;justify-content:space-between;"><!-- Parte superiore --><div class="justify-start" style="flex-grow:0"><span style="font-size:calc(12 * var(--scalecatalog) * 1px)" class="book-author">{autore}</span><div style="font-size:calc(16 * var(--scalecatalog) * 1px);font-weight:bold;" class="book-title">{titolo}</div><span class="book-descr">{descrizione}</span></div><!-- Parte inferiore (book-details e barcode) --><div style="margin-top:auto;width:100%"><div class="justify-end book-details" style="flex-grow:0;font-size:calc(10 * var(--scalecatalog) * 1px);">Pagine: <b>{pagine}</b><br />Formato: <b>{misure}</b><br />Prezzo: <b>{prezzo} €</b><br /></div></div></div>
|
<div class="row align-start" style="gap:0px;flex-direction:column;flex:1;display:flex;justify-content:space-between;">
|
||||||
|
<!-- Parte superiore -->
|
||||||
|
<div class="justify-start" style="flex-grow:0"><span style="font-size:calc(12 * var(--scalecatalogx) * 1px)"
|
||||||
|
class="book-author">{autore}</span>
|
||||||
|
<div style="font-size:calc(16 * var(--scalecatalogx) * 1px);font-weight:bold;" class="book-title">{titolo}</div>
|
||||||
|
<span class="book-descr">{descrizione}</span>
|
||||||
|
</div><!-- Parte inferiore (book-details e barcode) -->
|
||||||
|
<div style="margin-top:auto;width:100%">
|
||||||
|
<div class="justify-end book-details" style="flex-grow:0;font-size:calc(10 * var(--scalecatalog) * 1px);">
|
||||||
|
Pagine: <b>{pagine}</b><br />Formato: <b>{misure}</b><br />Prezzo: <b>{prezzo} €</b><br /></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -4,7 +4,6 @@ module.exports = {
|
|||||||
name: "FreePlanetServerSide",
|
name: "FreePlanetServerSide",
|
||||||
script: "./src/server/server.js",
|
script: "./src/server/server.js",
|
||||||
ignore_watch : ["node_modules"],
|
ignore_watch : ["node_modules"],
|
||||||
interpreter: "/root/.nvm/versions/node/v16.19.0/bin/node",
|
|
||||||
watch: false,
|
watch: false,
|
||||||
//autorestart: true,
|
//autorestart: true,
|
||||||
instances: 1,
|
instances: 1,
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
apps: [
|
apps: [
|
||||||
{
|
{
|
||||||
name: "PRODUZIONE PiuCheBuono_ServerSide",
|
name: "PiuCheBuono (Prod)",
|
||||||
script: "/var/www/nodejs_piuchebuono_server/src/server/server.js",
|
script: "/var/www/nodejs_piuchebuono_server/src/server/server.js",
|
||||||
ignore_watch: ["node_modules", "logs"],
|
ignore_watch: ["node_modules", "logs"],
|
||||||
interpreter: "/root/.nvm/versions/node/v16.19.0/bin/node",
|
interpreter: "/root/.nvm/versions/node/v22.13.1/bin/node",
|
||||||
//autorestart: true,
|
//autorestart: true,
|
||||||
instances: 1,
|
instances: 1,
|
||||||
watch: false,
|
watch: false,
|
||||||
env: {
|
env: {
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
apps: [
|
apps: [
|
||||||
{
|
{
|
||||||
name: "TEST PiuCheBuono_ServerSide",
|
name: "PiuCheBuono (TEST)",
|
||||||
script: "/var/www/nodejs_test.piuchebuono_server/src/server/server.js",
|
script: "/var/www/nodejs_test.piuchebuono_server/src/server/server.js",
|
||||||
ignore_watch: ["node_modules", "logs"],
|
ignore_watch: ["node_modules", "logs"],
|
||||||
interpreter: "/root/.nvm/versions/node/v16.19.0/bin/node",
|
interpreter: "/root/.nvm/versions/node/v22.13.1/bin/node",
|
||||||
//autorestart: true,
|
|
||||||
instances: 1,
|
instances: 1,
|
||||||
watch: false,
|
watch: false,
|
||||||
env: {
|
env: {
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
apps: [
|
apps: [
|
||||||
{
|
{
|
||||||
name: "PRODUZIONE RISO - FREEPLANET",
|
name: "RISO (Prod)",
|
||||||
script: "/var/www/nodejs_riso_server/src/server/server.js",
|
script: "/var/www/nodejs_riso_server/src/server/server.js",
|
||||||
ignore_watch: ["node_modules", "logs"],
|
ignore_watch: ["node_modules", "logs"],
|
||||||
interpreter: "/root/.nvm/versions/node/v16.19.0/bin/node",
|
interpreter: "/root/.nvm/versions/node/v22.13.1/bin/node",
|
||||||
//autorestart: true,
|
//autorestart: true,
|
||||||
instances: 1,
|
instances: 1,
|
||||||
watch: false,
|
watch: false,
|
||||||
@@ -1,12 +1,11 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
apps: [
|
apps: [
|
||||||
{
|
{
|
||||||
name: "TESTRISO2 FreePlanetServerSide",
|
name: "RISO (TEST)",
|
||||||
script: "./src/server/server.js",
|
script: "./src/server/server.js",
|
||||||
ignore_watch: ["node_modules", "logs"],
|
ignore_watch: ["node_modules", "logs"],
|
||||||
interpreter: "/root/.nvm/versions/node/v16.19.0/bin/node",
|
interpreter: "/root/.nvm/versions/node/v22.13.1/bin/node",
|
||||||
watch: false,
|
watch: false,
|
||||||
//autorestart: true,
|
|
||||||
instances: 1,
|
instances: 1,
|
||||||
env_test: {
|
env_test: {
|
||||||
"PORT": 3001,
|
"PORT": 3001,
|
||||||
BIN
emails/.DS_Store
vendored
BIN
emails/.DS_Store
vendored
Binary file not shown.
@@ -55,8 +55,7 @@ html
|
|||||||
|
|
||||||
|
|
||||||
tr
|
tr
|
||||||
td(class="whitespace", height="10")
|
td
|
||||||
p
|
|
||||||
|
|
||||||
- var totalPrice = orders.totalPrice
|
- var totalPrice = orders.totalPrice
|
||||||
- var note = orders.note
|
- var note = orders.note
|
||||||
@@ -64,6 +63,7 @@ html
|
|||||||
|
|
||||||
each rec in orders.items
|
each rec in orders.items
|
||||||
- var descr = rec.order.product.productInfo.name
|
- var descr = rec.order.product.productInfo.name
|
||||||
|
- var code = rec.order.product.productInfo.code
|
||||||
- var img = dirimg + rec.order.product.productInfo.imagefile
|
- var img = dirimg + rec.order.product.productInfo.imagefile
|
||||||
- var price = rec.order.price
|
- var price = rec.order.price
|
||||||
- var after_price = rec.order.after_price
|
- var after_price = rec.order.after_price
|
||||||
@@ -104,6 +104,9 @@ html
|
|||||||
tr
|
tr
|
||||||
td(class="sectionContentTitle boldhigh", valign="top")
|
td(class="sectionContentTitle boldhigh", valign="top")
|
||||||
p #{descr}
|
p #{descr}
|
||||||
|
tr
|
||||||
|
td(class="sectionContent", valign="top")
|
||||||
|
p Codice: #{code}
|
||||||
tr
|
tr
|
||||||
td(class="sectionContent", valign="top")
|
td(class="sectionContent", valign="top")
|
||||||
p Prezzo: #{price} € #{after_price}
|
p Prezzo: #{price} € #{after_price}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ html
|
|||||||
if (miordconfirmed)
|
if (miordconfirmed)
|
||||||
p!= miordconfirmed
|
p!= miordconfirmed
|
||||||
else
|
else
|
||||||
p Puoi pertanto venire a ritirarli direttamente in sede, negli orari che ti sono stati indicati.
|
p Puoi venire a ritirarli direttamente in sede, negli orari che ti sono stati indicati.
|
||||||
|
|
||||||
p
|
p
|
||||||
|
|
||||||
@@ -62,6 +62,7 @@ html
|
|||||||
|
|
||||||
each rec in orders.items
|
each rec in orders.items
|
||||||
- var descr = rec.order.product.productInfo.name
|
- var descr = rec.order.product.productInfo.name
|
||||||
|
- var code = rec.order.product.productInfo.code
|
||||||
- var img = dirimg + rec.order.product.productInfo.imagefile
|
- var img = dirimg + rec.order.product.productInfo.imagefile
|
||||||
- var price = rec.order.product.price
|
- var price = rec.order.product.price
|
||||||
- var after_price = rec.order.product.after_price
|
- var after_price = rec.order.product.after_price
|
||||||
@@ -101,6 +102,9 @@ html
|
|||||||
tr
|
tr
|
||||||
td(class="sectionContentTitle boldhigh", valign="top")
|
td(class="sectionContentTitle boldhigh", valign="top")
|
||||||
p #{descr}
|
p #{descr}
|
||||||
|
tr
|
||||||
|
td(class="sectionContent", valign="top")
|
||||||
|
p Codice: #{code}
|
||||||
tr
|
tr
|
||||||
td(class="sectionContent", valign="top")
|
td(class="sectionContent", valign="top")
|
||||||
p Prezzo: #{price} € #{after_price}
|
p Prezzo: #{price} € #{after_price}
|
||||||
|
|||||||
@@ -18,232 +18,267 @@
|
|||||||
- var baseimg = baseurl + '/'
|
- var baseimg = baseurl + '/'
|
||||||
doctype html
|
doctype html
|
||||||
html
|
html
|
||||||
- if (dataemail.title)
|
head
|
||||||
head
|
meta(charset="utf-8")
|
||||||
title dataemail.subject
|
meta(name="viewport", content="width=device-width, initial-scale=1")
|
||||||
|
title= dataemail.title || "Email"
|
||||||
|
style.
|
||||||
|
/* embedded CSS */
|
||||||
|
body { margin:0; padding:0; background:#E9F2F9; font-family:Tahoma, Geneva, sans-serif; color:#5b656e; }
|
||||||
|
a { color:#09c; text-decoration:none; }
|
||||||
|
table, td { border-collapse:collapse; }
|
||||||
|
h1,h2,h3,p { margin:0; padding:0; }
|
||||||
|
|
||||||
//- import css/scss stylesheets
|
.logoContainer { text-align:center; padding:20px 0; }
|
||||||
//- these file names will be replace by gulp with proper css file paths
|
.logoContainer img { max-width:200px; }
|
||||||
link(rel="stylesheet", href="../sass/basic.scss")
|
|
||||||
link(rel="stylesheet", href="../sass/one/styles.scss")
|
|
||||||
|
|
||||||
//- embdedded css allowed, but not sass
|
.testomail { padding:10px; font-size:0.75rem; line-height:1.4; }
|
||||||
style.
|
|
||||||
.red {
|
|
||||||
background-color: #E84C50;
|
|
||||||
}
|
|
||||||
|
|
||||||
.full-width {
|
.clpromo {
|
||||||
width: 100%;
|
background-color:orange;
|
||||||
}
|
text-align:center;
|
||||||
|
font-size:1rem;
|
||||||
|
padding:10px;
|
||||||
|
color:#fff;
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.emailContainer {
|
||||||
|
background:#fff;
|
||||||
|
border-radius:10px;
|
||||||
|
padding:20px;
|
||||||
|
margin:20px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sectionArticleImage img {
|
||||||
|
max-width:150px;
|
||||||
|
border:1px solid #ccc;
|
||||||
|
display:block;
|
||||||
|
margin-bottom:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.teacher {
|
||||||
|
font-style:italic;
|
||||||
|
font-size:0.75rem;
|
||||||
|
color:#555;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contrib {
|
||||||
|
font-size:0.75rem;
|
||||||
|
font-weight:bold;
|
||||||
|
color:#333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button a {
|
||||||
|
display:inline-block;
|
||||||
|
padding:10px 20px;
|
||||||
|
background:#f75666;
|
||||||
|
color:#fff !important;
|
||||||
|
text-decoration:none;
|
||||||
|
border-radius:10px;
|
||||||
|
font-size:13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button2 a {
|
||||||
|
display:block;
|
||||||
|
padding:12px 20px;
|
||||||
|
background:#0000ff;
|
||||||
|
color:#fff !important;
|
||||||
|
text-decoration:none;
|
||||||
|
border-radius:10px;
|
||||||
|
font-size:1.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center_img img {
|
||||||
|
display:block;
|
||||||
|
margin:0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discContainer {
|
||||||
|
background:#fff;
|
||||||
|
border-radius:10px;
|
||||||
|
padding:20px;
|
||||||
|
margin:20px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.LinkDisc a {
|
||||||
|
text-decoration:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pDisc:hover {
|
||||||
|
background:#5c8ef4 !important;
|
||||||
|
color:#fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pDisc {
|
||||||
|
padding:5px 10px;
|
||||||
|
border-radius:10px;
|
||||||
|
display:inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.socialMedia {
|
||||||
|
background:#8bafcb;
|
||||||
|
text-align:center;
|
||||||
|
padding:10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.socialMedia img {
|
||||||
|
width:29px;
|
||||||
|
height:auto;
|
||||||
|
border:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.firma-container {
|
||||||
|
background:#ffffff;
|
||||||
|
padding:15px;
|
||||||
|
text-align:center;
|
||||||
|
border-top:1px solid #e0e0e0;
|
||||||
|
font-size:0.85rem;
|
||||||
|
color:#313a42;
|
||||||
|
}
|
||||||
|
|
||||||
|
.disclaimer-container {
|
||||||
|
background:#f9f9f9;
|
||||||
|
padding:15px;
|
||||||
|
text-align:center;
|
||||||
|
font-size:0.75rem;
|
||||||
|
color:#666;
|
||||||
|
border-top:1px solid #eee;
|
||||||
|
border-bottom:1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom-container {
|
||||||
|
background:#e9f2f9;
|
||||||
|
padding:15px;
|
||||||
|
text-align:center;
|
||||||
|
font-size:0.7rem;
|
||||||
|
color:#999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.whitespace {
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width:480px) {
|
||||||
|
.button a, .button2 a {
|
||||||
|
font-size:1rem !important;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
.sectionArticleImage,
|
||||||
|
.column {
|
||||||
|
width:100% !important;
|
||||||
|
display:block !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
body(yahoofix)
|
body(yahoofix)
|
||||||
span(id='body_style', style='display:block')
|
span#body_style(style='display:block')
|
||||||
table(class="topHeader", cellpadding="0", cellspacing="0", width="100%")
|
// Header
|
||||||
- if (dataemail.height_logo)
|
table(width="100%", cellpadding="0", cellspacing="0", align="center")
|
||||||
tr
|
|
||||||
td
|
|
||||||
table(cellpadding="0", cellspacing="0", align="center", summary="")
|
|
||||||
tr
|
|
||||||
td.logoContainer
|
|
||||||
a(href=baseurl, title='logo')
|
|
||||||
img.logo(src=baseurl+"/images/logo.png", height=dataemail.height_logo)
|
|
||||||
|
|
||||||
tr
|
tr
|
||||||
td.testomail
|
td.logoContainer
|
||||||
p!= dataemail.templ.testoheadermail_out
|
a(href=baseurl)
|
||||||
|
img.logo(src=baseurl+"/public/images/logo.png", alt="Logo")
|
||||||
|
|
||||||
- if (dataemail.templ.options.includes('SHOW_PROMO'))
|
if dataemail.templ.testoheadermail_out
|
||||||
|
tr
|
||||||
|
td.testomail
|
||||||
|
p!= dataemail.templ.testoheadermail_out
|
||||||
|
|
||||||
|
if dataemail.templ.options.includes('SHOW_PROMO')
|
||||||
tr
|
tr
|
||||||
td.clpromo
|
td.clpromo
|
||||||
p!= dataemail.textpromo
|
p!= dataemail.textpromo
|
||||||
|
|
||||||
- if (dataemail.templ.content)
|
// Main Content
|
||||||
table(cellpadding="0", cellspacing="0", width="95%", align="center")
|
if dataemail.templ.content
|
||||||
|
tr
|
||||||
|
td.emailContainer
|
||||||
|
p!=dataemail.templ.content
|
||||||
|
if dataemail.templ.img
|
||||||
|
img(src=baseimg + dataemail.templ.img, class="center_img")
|
||||||
|
if dataemail.templ.content2
|
||||||
|
p!=dataemail.templ.content2
|
||||||
|
if dataemail.templ.img2
|
||||||
|
img(src=baseimg + dataemail.templ.img2, class="center_img")
|
||||||
|
|
||||||
|
// Events
|
||||||
|
if dataemail.templ.options.includes('SHOW_EVENTS')
|
||||||
|
each event in arrevents
|
||||||
tr
|
tr
|
||||||
td(class="textIniContainer", valign="top")
|
td.emailContainer
|
||||||
p!=dataemail.templ.content
|
table(width="100%", cellpadding="0", cellspacing="0")
|
||||||
- if (dataemail.templ.img)
|
|
||||||
img(src=baseimg + dataemail.templ.img, alt="", class="myimg")
|
|
||||||
- if (dataemail.templ.content2)
|
|
||||||
p!=dataemail.templ.content2
|
|
||||||
- if (dataemail.templ.img2)
|
|
||||||
img(src=baseimg + dataemail.templ.img2, alt="", class="myimg")
|
|
||||||
|
|
||||||
table(cellpadding="0", cellspacing="0", width="640", align="center")
|
|
||||||
- if (dataemail.templ.options.includes('SHOW_EVENTS'))
|
|
||||||
tr
|
|
||||||
td(class="whitespace", height="10")
|
|
||||||
p
|
|
||||||
tr
|
|
||||||
td(class="emailContainer", valign="top")
|
|
||||||
|
|
||||||
each event in arrevents
|
|
||||||
- var urlevent = baseurl + '/event/' + event.typol + '?eventid=' + event._id
|
|
||||||
- var imgev = event.img_small
|
|
||||||
- var mydate = prettyDate(event.dateTimeStart)
|
|
||||||
unless (imgev)
|
|
||||||
- imgev = event.img
|
|
||||||
- var teacher1 = ''
|
|
||||||
- var teacher2 = ''
|
|
||||||
- var teacher3 = ''
|
|
||||||
- var teacher4 = ''
|
|
||||||
- var contrib = ''
|
|
||||||
- var myclteach = 'q-chip'
|
|
||||||
- if (event.op1[0] && event.op1[0].username !== 'nessuno')
|
|
||||||
- teacher1 = event.op1[0].name + ' ' + event.op1[0].surname
|
|
||||||
- if ((event.op2[0] && event.op2[0].username !== 'nessuno'))
|
|
||||||
- teacher2 = event.op2[0].name + ' ' + event.op2[0].surname
|
|
||||||
- myclteach = 'q-chip2'
|
|
||||||
- if (event.op3[0] && event.op3[0].username !== 'nessuno')
|
|
||||||
- teacher3 = "<br>" . event.op3[0].name + ' ' + event.op3[0].surname
|
|
||||||
- if (event.op4[0] && event.op4[0].username !== 'nessuno')
|
|
||||||
- teacher4 = "<br>" . event.op4[0].name + ' ' + event.op4[0].surname
|
|
||||||
|
|
||||||
- if (event.contrib[0])
|
|
||||||
- contrib = event.contrib[0].label
|
|
||||||
- if (event.contrib[0].showprice)
|
|
||||||
- contrib += ' ' + event.price + ' €'
|
|
||||||
|
|
||||||
|
|
||||||
table(cellpadding="0", cellspacing="0", width="100%", summary="", border="0", align="center")
|
|
||||||
tr
|
tr
|
||||||
td(class="column sectionArticleImage", valign="top")
|
td.column.sectionArticleImage(width="150")
|
||||||
table(cellpadding="0", cellspacing="0", summary="", border="0")
|
if event.news
|
||||||
- if (event.news)
|
p.q-chip.bg-red.text-white Novità
|
||||||
tr
|
img(src=baseimg + (event.img_small || event.img), alt=event.title)
|
||||||
td
|
p.teacher= event.op1[0].name + ' ' + event.op1[0].surname
|
||||||
p(class="q-chip row inline no-wrap items-center cltexth5 chipnews shadow-5 glossy text-right bg-red text-white") Novità
|
td.column
|
||||||
|
h2.sectionContentTitle= event.title
|
||||||
|
p.sectionContentSubTitle= prettyDate(event.dateTimeStart)
|
||||||
|
p.sectionContent!= event.details
|
||||||
|
if event.contrib.length
|
||||||
|
p.contrib= event.contrib[0].label + (event.contrib[0].showprice ? ' ' + event.price + ' €' : '')
|
||||||
|
table.buttonContainer
|
||||||
tr
|
tr
|
||||||
td
|
td.button
|
||||||
img(src=baseimg + imgev, alt="", width="150")
|
a(href=baseurl + '/event/' + event.typol + '?eventid=' + event._id, target="_blank") Apri l'Evento
|
||||||
p(class="teacher") #{teacher1} <br> #{teacher2} #{teacher3} #{teacher4}
|
|
||||||
td(class="column", valign="top")
|
|
||||||
|
|
||||||
table(cellpadding="0", cellspacing="0", summary="", border="0")
|
tr
|
||||||
tr
|
td.center_img
|
||||||
td(class="sectionContentTitle boldhigh", valign="top")
|
a.button2(href=urlcal, target="_blank") Calendario Eventi
|
||||||
p #{event.title}
|
|
||||||
tr
|
|
||||||
td(class="sectionContentSubTitle", valign="top")
|
|
||||||
p(class="q-chip row inline no-wrap items-center cltexth5 chipnews shadow-5 glossy text-right bg-blue text-white") #{mydate}
|
|
||||||
tr
|
|
||||||
td(class="sectionContent", valign="top")
|
|
||||||
p!= event.details
|
|
||||||
p.contrib= contrib
|
|
||||||
tr
|
|
||||||
td(class="buttonContainer")
|
|
||||||
table(width="50%", cellpadding="0", cellspacing="0", summary="", border="0")
|
|
||||||
tr
|
|
||||||
td(class="button hoverLink")
|
|
||||||
a(href=urlevent, title='Evento', target='_blank') Apri l'Evento
|
|
||||||
|
|
||||||
|
// Disciplines
|
||||||
|
if dataemail.templ.options.includes('SHOW_DISC')
|
||||||
|
tr
|
||||||
|
td.center
|
||||||
|
h2.cltitle_disc= dataemail.disc_title
|
||||||
|
each disc in dataemail.arrdiscipline
|
||||||
tr
|
tr
|
||||||
table(cellpadding="0", cellspacing="0", summary="", border="0", align="center", class="")
|
td.discContainer
|
||||||
tr
|
table(width="100%", cellpadding="0", cellspacing="0")
|
||||||
td(class="whitespace", height="10")
|
|
||||||
p
|
|
||||||
tr
|
|
||||||
td.center_img(class="button2 hoverLink")
|
|
||||||
a(href=urlcal, title='Calendario Eventi', target='_blank') Calendario Eventi
|
|
||||||
tr
|
|
||||||
td(class="whitespace", height="10")
|
|
||||||
p
|
|
||||||
|
|
||||||
- if (dataemail.templ.options.includes('SHOW_DISC'))
|
|
||||||
tr
|
|
||||||
td(class="whitespace bg-white", height="20")
|
|
||||||
p(class="bg-white")
|
|
||||||
tr
|
|
||||||
td(class="center")
|
|
||||||
p(class="cltitle_disc") #{dataemail.disc_title}
|
|
||||||
tr
|
|
||||||
td(class="discContainer", valign="top")
|
|
||||||
|
|
||||||
each disc in dataemail.arrdiscipline
|
|
||||||
- var urldisc = baseurl + disc.linkpage
|
|
||||||
- var imgdisc = disc.img_small
|
|
||||||
unless (imgdisc)
|
|
||||||
- imgdisc = disc.img
|
|
||||||
|
|
||||||
table(cellpadding="0", cellspacing="0", width="100%", summary="", border="0", align="center")
|
|
||||||
tr
|
tr
|
||||||
td(class="column sectionArticleImage", valign="top")
|
td.column.sectionArticleImage(width="150")
|
||||||
table(cellpadding="0", cellspacing="0", summary="", border="0")
|
img(src=baseimg + (disc.img_small || disc.img), alt=disc.label)
|
||||||
tr
|
td.column
|
||||||
td
|
p.LinkDisc
|
||||||
img(src=baseimg + imgdisc, alt="", width="150")
|
a(href=baseurl + disc.linkpage, target="_blank")
|
||||||
td(class="column", valign="top")
|
span.pDisc(style=`background-color:`+disc.color)= disc.label
|
||||||
|
p.sectionContent!= disc.description
|
||||||
|
|
||||||
table(cellpadding="0", cellspacing="0", summary="", border="0")
|
// Additional Content
|
||||||
tr
|
if dataemail.content_after_events
|
||||||
td(class="sectionContentTitle boldhigh center LinkDisc", valign="top")
|
|
||||||
a(href=urldisc, title='Disciplina', target='_blank')
|
|
||||||
p(class="q-chip row inline no-wrap items-center cltexth4 chipnews shadow-5 glossy text-right text-white pDisc", style=`background-color: `+disc.color) #{disc.label}
|
|
||||||
tr
|
|
||||||
td(class="sectionContent", valign="top")
|
|
||||||
p!= disc.description
|
|
||||||
|
|
||||||
tr
|
|
||||||
td(class="whitespace", height="20")
|
|
||||||
p
|
|
||||||
|
|
||||||
- if (dataemail.content_after_events)
|
|
||||||
tr
|
tr
|
||||||
table(cellpadding="0", cellspacing="0", summary="", border="0")
|
td.testomail
|
||||||
tr
|
p!=dataemail.content_after_events
|
||||||
td.testomail
|
|
||||||
p!=dataemail.content_after_events
|
|
||||||
tr
|
|
||||||
td(class="whitespace", height="20")
|
|
||||||
p
|
|
||||||
|
|
||||||
// Social Media
|
// Social Media
|
||||||
table.socialMedia(cellpadding="0", cellspacing="0", width="100%", summary="", border="0", align="center")
|
tr
|
||||||
tr
|
td.socialMedia
|
||||||
td(class="whitespace", height="5")
|
table(width="120", align="center", cellpadding="0", cellspacing="0")
|
||||||
p
|
if dataemail.urlinstagram
|
||||||
tr
|
td
|
||||||
td
|
a(href=dataemail.urlinstagram)
|
||||||
table(width="120", cellpadding="0", cellspacing="0", summary="", border="0", align="center")
|
img(src=imginstagram, alt="Instagram")
|
||||||
tr
|
if dataemail.urltwitter
|
||||||
- if (dataemail.urlinstagram)
|
td
|
||||||
td(width="32", align="center")
|
a(href=dataemail.urltwitter)
|
||||||
a(href=dataemail.urlinstagram, title='Instagram')
|
img(src=imgtwitter, alt="Twitter")
|
||||||
img(src=imginstagram, alt="Instagram", width="29")
|
if dataemail.urlfb
|
||||||
- if (dataemail.urltwitter)
|
td
|
||||||
td(width="32", align="center")
|
a(href=dataemail.urlfb)
|
||||||
a(href=dataemail.urltwitter, title='Twitter')
|
img(src=imgfb, alt="Facebook")
|
||||||
img(src=imgtwitter, alt="Twitter", width="29")
|
if dataemail.urlyoutube
|
||||||
- if (dataemail.urlfb)
|
td
|
||||||
td(width="32", align="center")
|
a(href=dataemail.urlyoutube)
|
||||||
a(href=dataemail.urlfb, title='Facebook')
|
img(src=imgyoutube, alt="YouTube")
|
||||||
img(src=imgfb, alt="Facebook", width="29")
|
|
||||||
- if (dataemail.urlyoutube)
|
|
||||||
td(width="32", align="center")
|
|
||||||
a(href=dataemail.urlyoutube, title='YouTube')
|
|
||||||
img(src=imgyoutube, alt="YouTube", width="29")
|
|
||||||
|
|
||||||
tr
|
|
||||||
td(class="whitespace", height="5")
|
|
||||||
p
|
|
||||||
|
|
||||||
// Footer
|
// Footer
|
||||||
table.footer(cellpadding="0", cellspacing="0", width="100%", summary="", border="0", align="center")
|
tr
|
||||||
tr
|
td.firma-container
|
||||||
td(class="whitespace", height="10")
|
p!= dataemail.firma
|
||||||
p
|
tr
|
||||||
tr
|
td.disclaimer-container
|
||||||
td.firma
|
p!= dataemail.disclaimer_out
|
||||||
p!= dataemail.firma
|
tr
|
||||||
|
td.bottom-container
|
||||||
tr
|
p!= dataemail.disc_bottom_out
|
||||||
td.disclaimer
|
|
||||||
p!= dataemail.disclaimer_out
|
|
||||||
|
|
||||||
tr
|
|
||||||
td.bottom
|
|
||||||
p!= dataemail.disc_bottom_out
|
|
||||||
|
|
||||||
tr
|
|
||||||
td(class="whitespace", height="10")
|
|
||||||
p
|
|
||||||
8
filelog.txt
Normal file
8
filelog.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
Dom 02/03 ORE 16:32: USER [surya1977]: ciao
|
||||||
|
|
||||||
|
Lun 10/03 ORE 15:52: USER [surya1977]: ciao
|
||||||
|
|
||||||
|
Lun 10/03 ORE 15:56: USER [surya1977]: ciao
|
||||||
|
|
||||||
|
Lun 07/07 ORE 10:45: USER [surya1977]: ciao
|
||||||
1
localhost-key.pem
Symbolic link
1
localhost-key.pem
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/Users/suryapaolo/certs/localhost-key.pem
|
||||||
1
localhost.pem
Symbolic link
1
localhost.pem
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/Users/suryapaolo/certs/localhost.pem
|
||||||
@@ -836,3 +836,5 @@ In attesa di riscontri, salutiamo! 🍚💚
|
|||||||
Il gruppo dei Facilitatori Territoriali RISO
|
Il gruppo dei Facilitatori Territoriali RISO
|
||||||
Mer 24/04 ORE 22:02: 🤖: Da Sùrya (Paolo) (paoloar77):
|
Mer 24/04 ORE 22:02: 🤖: Da Sùrya (Paolo) (paoloar77):
|
||||||
✅ la regolarizzazione può avv
|
✅ la regolarizzazione può avv
|
||||||
|
Lun 07/07 ORE 10:50: 🤖: Da Sùrya undefined (surya1977):
|
||||||
|
✅ provatest7 è stato Ammesso correttamente (da surya1977)!
|
||||||
65
logtrans.txt
65
logtrans.txt
@@ -419,3 +419,68 @@ Gio 09/01 ORE 17:04: [<b>Circuito RIS TerraNFT</b>]: Inviate Monete da terranft
|
|||||||
Saldi:
|
Saldi:
|
||||||
terranft (paoloar77): -30.00 RIS]
|
terranft (paoloar77): -30.00 RIS]
|
||||||
SuryaArena: 30.00 RIS]
|
SuryaArena: 30.00 RIS]
|
||||||
|
Ven 28/02 ORE 19:40: [<b>Circuito RIS Bologna</b>]: Inviate Monete da surya1977 a SuryaSecondo 2 RIS [causale: aaa]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 33.90 RIS]
|
||||||
|
SuryaSecondo: 2.10 RIS]
|
||||||
|
Lun 03/03 ORE 00:38: [<b>Circuito RIS Bologna</b>]: Inviate Monete da surya1977 a SuryaSecondo 3 RIS [causale: ]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 30.90 RIS]
|
||||||
|
SuryaSecondo: 5.10 RIS]
|
||||||
|
Lun 03/03 ORE 00:40: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a Giovannifruttadisicilia 5.4 RIS [causale: aranceee !!]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 62.55 RIS]
|
||||||
|
Giovannifruttadisicilia: 362.40 RIS]
|
||||||
|
Lun 03/03 ORE 01:06: [<b>Circuito RIS Arezzo</b>]: Inviate Monete da surya1977 a Andro 1 RIS [causale: test]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: -1.10 RIS]
|
||||||
|
Andro: 1.00 RIS]
|
||||||
|
Mer 12/03 ORE 21:30: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a Giovannifruttadisicilia 60 RIS [causale: prova]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 34.20 RIS]
|
||||||
|
Giovannifruttadisicilia: 458.50 RIS]
|
||||||
|
Gio 13/03 ORE 17:44: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a PiuCheBuono(GaseBottega) 1 RIS [causale: AAA]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 33.20 RIS]
|
||||||
|
PiuCheBuono(GaseBottega): -65.50 RIS]
|
||||||
|
Gio 13/03 ORE 17:45: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a PiuCheBuono(GaseBottega) 3.2 RIS [causale: GGG]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 30.00 RIS]
|
||||||
|
PiuCheBuono(GaseBottega): -62.30 RIS]
|
||||||
|
Gio 13/03 ORE 18:17: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a pontiUmani 2 RIS [causale: bbb]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 28.00 RIS]
|
||||||
|
pontiUmani: 2.00 RIS]
|
||||||
|
Gio 13/03 ORE 18:18: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a GruppoYurta 2 RIS [causale: ggg]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 26.00 RIS]
|
||||||
|
GruppoYurta: 2.00 RIS]
|
||||||
|
Gio 13/03 ORE 18:48: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a GruppoYurta 11 RIS [causale: ]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 15.00 RIS]
|
||||||
|
GruppoYurta: 13.00 RIS]
|
||||||
|
Gio 13/03 ORE 18:53: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a GruppoYurta 3 RIS [causale: ]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 12.00 RIS]
|
||||||
|
GruppoYurta: 16.00 RIS]
|
||||||
|
Gio 13/03 ORE 18:57: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a GruppoYurta 1 RIS [causale: ]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 11.00 RIS]
|
||||||
|
GruppoYurta: 17.00 RIS]
|
||||||
|
Dom 23/03 ORE 22:24: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a GruppoYurta 1 RIS [causale: ]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 88.20 RIS]
|
||||||
|
GruppoYurta: 6.00 RIS]
|
||||||
95
package.json
95
package.json
@@ -13,78 +13,79 @@
|
|||||||
"starttest": "NODE_ENV=test node src/server/server.js",
|
"starttest": "NODE_ENV=test node src/server/server.js",
|
||||||
"test-watch": "nodemon --exec 'npm test'"
|
"test-watch": "nodemon --exec 'npm test'"
|
||||||
},
|
},
|
||||||
"engines": {
|
|
||||||
"node": "^18.19.0"
|
|
||||||
},
|
|
||||||
"author": "Surya",
|
"author": "Surya",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"basic-ftp": "^5.0.2",
|
"basic-ftp": "^5.0.5",
|
||||||
"bcryptjs": "^2.4.3",
|
"bcryptjs": "^3.0.2",
|
||||||
"bluebird": "^3.7.2",
|
"bluebird": "^3.7.2",
|
||||||
"body-parser": "^1.20.0",
|
"body-parser": "^1.20.3",
|
||||||
"cookie-parser": "^1.4.6",
|
"cheerio": "^1.0.0",
|
||||||
|
"compress-pdf": "^0.5.3",
|
||||||
|
"cookie-parser": "^1.4.7",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"country-codes-list": "^1.6.8",
|
"country-codes-list": "^2.0.0",
|
||||||
"crypto-js": "^4.1.1",
|
"crypto-js": "^4.2.0",
|
||||||
"csurf": "^1.11.0",
|
"csurf": "^1.11.0",
|
||||||
"dotenv": "^16.4.7",
|
"dotenv": "^16.4.7",
|
||||||
"ejs": "^3.1.8",
|
"ejs": "^3.1.10",
|
||||||
"email-templates": "^10.0.1",
|
"email-templates": "^12.0.2",
|
||||||
"express": "^4.18.1",
|
"express": "^4.21.2",
|
||||||
"formidable": "^2.0.1",
|
"formidable": "^3.5.2",
|
||||||
"ghostscript4js": "^3.2.3",
|
"ghostscript4js": "^3.2.3",
|
||||||
"i18n": "^0.15.0",
|
"i18n": "^0.15.1",
|
||||||
"image-downloader": "^4.3.0",
|
"image-downloader": "^4.3.0",
|
||||||
"internet-available": "^1.0.0",
|
"internet-available": "^1.0.0",
|
||||||
"jade": "^1.9.2",
|
"jade": "^1.11.0",
|
||||||
"jsdom": "^24.0.0",
|
"jsdom": "^26.0.0",
|
||||||
"jsonwebtoken": "^9.0.1",
|
"jsonwebtoken": "^9.0.2",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"mongodb": "^4.4.1",
|
"mongodb": "^6.14.2",
|
||||||
"mongoose": "^5.13.15",
|
"mongoose": "^8.12.1",
|
||||||
"multer": "^1.4.5-lts.1",
|
"multer": "^1.4.5-lts.2",
|
||||||
"mysql": "^2.18.1",
|
"mysql": "^2.18.1",
|
||||||
"node-cron": "^3.0.2",
|
"node-cron": "^3.0.3",
|
||||||
"node-emoji": "^1.11.0",
|
"node-emoji": "^2.2.0",
|
||||||
"node-image-resizer": "^1.0.0",
|
"node-image-resizer": "^1.0.0",
|
||||||
"node-pre-gyp": "^0.14.0",
|
"node-pre-gyp": "^0.17.0",
|
||||||
"node-pty": "^1.0.0",
|
"node-pty": "^1.0.0",
|
||||||
"node-telegram-bot-api": "^0.65.1",
|
"node-telegram-bot-api": "^0.66.0",
|
||||||
"nodemailer": "^6.7.8",
|
"nodemailer": "^6.10.0",
|
||||||
"npm-check-updates": "^16.14.18",
|
"npm-check-updates": "^17.1.15",
|
||||||
"openai": "^4.83.0",
|
"openai": "^4.86.2",
|
||||||
"pdf-lib": "^1.17.1",
|
"pdf-lib": "^1.17.1",
|
||||||
"pdf-parse": "^1.1.1",
|
"pdf-parse": "^1.1.1",
|
||||||
"pem": "^1.14.6",
|
"pem": "^1.14.8",
|
||||||
"preview-email": "^3.0.7",
|
"preview-email": "^3.1.0",
|
||||||
"pug": "^3.0.2",
|
"pug": "^3.0.3",
|
||||||
"rate-limiter-flexible": "^2.3.9",
|
"puppeteer": "^24.9.0",
|
||||||
"request": "^2.34",
|
"rate-limiter-flexible": "^5.0.5",
|
||||||
"sanitize-html": "^2.13.0",
|
"request": "^2.88",
|
||||||
"save": "^2.5.0",
|
"sanitize-html": "^2.14.0",
|
||||||
"sharp": "^0.30.7",
|
"save": "^2.9.0",
|
||||||
"superagent": "^8.0.0",
|
"sharp": "^0.33.5",
|
||||||
|
"superagent": "^10.1.1",
|
||||||
"tedious": "^18.6.1",
|
"tedious": "^18.6.1",
|
||||||
"url-parse": "^1.5.10",
|
"url-parse": "^1.5.10",
|
||||||
"validator": "^13.7.0",
|
"validator": "^13.12.0",
|
||||||
"vhost": "^3.0.2",
|
"vhost": "^3.0.2",
|
||||||
"web-push": "^3.6.7",
|
"web-push": "^3.6.7",
|
||||||
|
"xlsx": "^0.18.5",
|
||||||
"xml2js": "^0.6.2",
|
"xml2js": "^0.6.2",
|
||||||
"xoauth2": "^1.2.0"
|
"xoauth2": "^1.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"browser-sync": "^2.27.10",
|
"browser-sync": "^3.0.3",
|
||||||
"expect": "^29.0.2",
|
"expect": "^29.7.0",
|
||||||
"gulp": "^3.9.1",
|
"gulp": "^5.0.0",
|
||||||
"gulp-inline-css": "^2.0.0",
|
"gulp-inline-css": "^4.0.0",
|
||||||
"gulp-pug": "^5.0.0",
|
"gulp-pug": "^5.0.0",
|
||||||
"gulp-rename": "^2.0.0",
|
"gulp-rename": "^2.0.0",
|
||||||
"gulp-replace": "^1.1.3",
|
"gulp-replace": "^1.1.4",
|
||||||
"gulp-sass": "^5.1.0",
|
"gulp-sass": "^6.0.1",
|
||||||
"jest": "^29.0.2",
|
"jest": "^29.7.0",
|
||||||
"mocha": "^10.0.0",
|
"mocha": "^11.1.0",
|
||||||
"nodemon": "^3.0.1",
|
"nodemon": "^3.1.9",
|
||||||
"supertest": "^6.2.4"
|
"supertest": "^7.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
53
scripts/esporta_dati.sh
Normal file
53
scripts/esporta_dati.sh
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Definizione delle costanti
|
||||||
|
targetDB="FreePlanet"
|
||||||
|
MYDOCKER="mongodb_riso"
|
||||||
|
|
||||||
|
# Percorso del file da Esportare (specificare il percorso completo)
|
||||||
|
myCollection="$1"
|
||||||
|
fileToImport="$1.json"
|
||||||
|
|
||||||
|
# Leggi il nome della collezione come primo argomento
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Errore: Devi specificare il nome della collezione come argomento."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Leggi le credenziali dal file di configurazione
|
||||||
|
source ~/batch/.my_cfg.ini
|
||||||
|
|
||||||
|
# Verifica che le variabili siano state impostate correttamente
|
||||||
|
if [ -z "$PWDDB" ]; then
|
||||||
|
echo "Errore: La password del database non è stata trovata in .my_cfg.ini."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Messaggio di conferma
|
||||||
|
echo "Stai per Esportare i dati da '$fileToImport' nella collezione '$myCollection' del database '$targetDB'."
|
||||||
|
read -p "Sei sicuro di voler procedere? (Y/N): " risposta
|
||||||
|
|
||||||
|
# Controllo della risposta dell'utente
|
||||||
|
if [[ "$risposta" != "Y" && "$risposta" != "y" ]]; then
|
||||||
|
echo "Operazione annullata."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Esegui il comando mongoimport dentro il container Docker
|
||||||
|
docker exec $MYDOCKER mongoexport \
|
||||||
|
--username admin \
|
||||||
|
--password "$PWDDB" \
|
||||||
|
--authenticationDatabase admin \
|
||||||
|
--db "$targetDB" \
|
||||||
|
--collection "$myCollection" \
|
||||||
|
--out "$fileToImport" \
|
||||||
|
|
||||||
|
|
||||||
|
# Verifica lo stato dell'operazione
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Esportazione completata con successo! $fileToImport"
|
||||||
|
else
|
||||||
|
echo "Errore durante l'esportazione."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
53
scripts/importa_dati.sh
Normal file
53
scripts/importa_dati.sh
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Definizione delle costanti
|
||||||
|
targetDB="FreePlanet"
|
||||||
|
MYDOCKER="mongodb_riso"
|
||||||
|
|
||||||
|
# Percorso del file da importare (specificare il percorso completo)
|
||||||
|
myCollection="$1"
|
||||||
|
fileToImport="$1.json"
|
||||||
|
|
||||||
|
# Leggi il nome della collezione come primo argomento
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Errore: Devi specificare il nome della collezione come argomento."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Leggi le credenziali dal file di configurazione
|
||||||
|
source ~/batch/.my_cfg.ini
|
||||||
|
|
||||||
|
# Verifica che le variabili siano state impostate correttamente
|
||||||
|
if [ -z "$PWDDB" ]; then
|
||||||
|
echo "Errore: La password del database non è stata trovata in .my_cfg.ini."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Messaggio di conferma
|
||||||
|
echo "Stai per importare i dati da '$fileToImport' nella collezione '$myCollection' del database '$targetDB'."
|
||||||
|
read -p "Sei sicuro di voler procedere? (Y/N): " risposta
|
||||||
|
|
||||||
|
# Controllo della risposta dell'utente
|
||||||
|
if [[ "$risposta" != "Y" && "$risposta" != "y" ]]; then
|
||||||
|
echo "Operazione annullata."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Esegui il comando mongoimport dentro il container Docker
|
||||||
|
docker exec $MYDOCKER mongoimport \
|
||||||
|
--username admin \
|
||||||
|
--password "$PWDDB" \
|
||||||
|
--authenticationDatabase admin \
|
||||||
|
--db "$targetDB" \
|
||||||
|
--collection "$myCollection" \
|
||||||
|
--file "$fileToImport" \
|
||||||
|
--jsonArray
|
||||||
|
|
||||||
|
# Verifica lo stato dell'operazione
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Importazione completata con successo!"
|
||||||
|
else
|
||||||
|
echo "Errore durante l'importazione."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"folders": [
|
|
||||||
{
|
|
||||||
"path": "../.."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "../../../newfreeplanet"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "../../../cnm"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"settings": {
|
|
||||||
"search.useIgnoreFiles": false,
|
|
||||||
"search.useParentIgnoreFiles": false,
|
|
||||||
"files.exclude": {
|
|
||||||
"": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,12 +1,28 @@
|
|||||||
const tools = require('../tools/general');
|
const tools = require('../tools/general');
|
||||||
|
|
||||||
|
console.log('__');
|
||||||
|
console.log('__');
|
||||||
|
console.log('__');
|
||||||
|
console.log('__');
|
||||||
|
console.log('****************************************************');
|
||||||
|
console.log('*** AVVIO DEL SERVER NODE.JS ***');
|
||||||
|
console.log('****************************************************');
|
||||||
|
console.log('__');
|
||||||
|
|
||||||
|
if ((process.env.NODE_ENV === 'production')) {
|
||||||
|
console.log(' *** AMBIENTE DI PRODUZIONE !!!!')
|
||||||
|
} else if (process.env.NODE_ENV === 'test') {
|
||||||
|
console.log(' *** ### AMBIENTE DI TEST ')
|
||||||
|
} else if (process.env.NODE_ENV === 'development') {
|
||||||
|
console.log(' *** ### AMBIENTE DI SVILUPPO (LOCALE) ')
|
||||||
|
}
|
||||||
|
console.log('__');
|
||||||
|
|
||||||
// still in app.js
|
// still in app.js
|
||||||
const node_env = process.env.NODE_ENV || 'production';
|
const node_env = process.env.NODE_ENV || 'production';
|
||||||
console.log('node_env=', node_env);
|
|
||||||
|
|
||||||
var file = `.env.${node_env}`;
|
var file = `.env.${node_env}`;
|
||||||
|
|
||||||
|
|
||||||
// GLOBALI (Uguali per TUTTI)
|
// GLOBALI (Uguali per TUTTI)
|
||||||
process.env.LINKVERIF_REG = '/vreg';
|
process.env.LINKVERIF_REG = '/vreg';
|
||||||
process.env.LINK_REQUEST_NEWPASSWORD = '/requestnewpwd';
|
process.env.LINK_REQUEST_NEWPASSWORD = '/requestnewpwd';
|
||||||
@@ -22,466 +38,18 @@ require('dotenv').config({ path: file });
|
|||||||
process.env.DATABASE = process.env.DATABASE || 'FreePlanet';
|
process.env.DATABASE = process.env.DATABASE || 'FreePlanet';
|
||||||
|
|
||||||
console.log('process.env.DOMAIN:', process.env.DOMAIN);
|
console.log('process.env.DOMAIN:', process.env.DOMAIN);
|
||||||
process.env.MONGODB_URI = process.env.DOMAIN + process.env.DATABASE;
|
const domain = process.env.DOMAIN;
|
||||||
console.log('process.env.MONGODB_URI:', process.env.MONGODB_URI);
|
const username = encodeURIComponent(process.env.MONGODB_USER);
|
||||||
|
const password = encodeURIComponent(process.env.MONGODB_PWD);
|
||||||
|
const database = process.env.DATABASE || "test"; // Nome del database, default a 'test'
|
||||||
|
|
||||||
|
if (process.env.AUTH_DB_PASSING === "1") {
|
||||||
|
// replace username and password in the process.env.DOMAIN
|
||||||
/*
|
process.env.MONGODB_URI = process.env.DOMAIN_AUTH.replace('{username}', username).replace('{password}', password) + database;
|
||||||
if (process.env.NODE_ENV === 'production') {
|
process.env.MONGODB_URI_NOPWD = process.env.DOMAIN_AUTH.replace('{username}', username) + database;
|
||||||
// ---------------- AMBIENTE DI PRODUZIONE !!!!!!!!!! --------------------
|
|
||||||
MYAPPS = [
|
|
||||||
{
|
|
||||||
idapp: '1',
|
|
||||||
name: 'FreePlanet',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'paolo.arena77@gmail.com',
|
|
||||||
host: 'https://freeplanet.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/www.freeplanet.app',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '2',
|
|
||||||
name: 'Associazione Shen',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: 'info@associazioneshen.it',
|
|
||||||
replyTo: 'info@associazioneshen.it',
|
|
||||||
host: 'https://www.associazioneshen.it',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/associazioneshen.it',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '3',
|
|
||||||
name: 'Brigitte MG Dumont',
|
|
||||||
adminemail: '',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'http://brigittemgdumont.com',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '4',
|
|
||||||
name: 'Mandala Solidale',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'https://mandala.freeplanet.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/mandala.freeplanet.app',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '6',
|
|
||||||
name: 'Mandala per l\'Anima',
|
|
||||||
adminemail: '',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'http://mandalaperlanima.eu',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '8',
|
|
||||||
name: 'CentrOlistico Rimini',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'info@arcodiluce.it',
|
|
||||||
host: 'https://www.centrolisticorimini.it',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/centrolisticorimini.it',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '9',
|
|
||||||
name: 'SalviamoIlPianeta',
|
|
||||||
adminemail: 'salviamoilpianeta2020@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'https://salviamoilpianeta.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/salviamoilpianeta.app',
|
|
||||||
email_from: 'salviamoilpianeta2020@gmail.com',
|
|
||||||
email_pwd: 'c6f63e7aba9393c73f56e338a7fe5283a73949363662d26bd375dd05b6f6f37ebkw4vINQ0O/4d8JN71aNH3UsyndeFRgyyMvJMVl4iOk=',
|
|
||||||
telegram_key:'1202788747:AAErwzIsD7k-3Yj5AX6ci3p7ELMuyASq4vA',
|
|
||||||
telegram_bot_name: 'SalviamoIlPianeta_bot',
|
|
||||||
pathreg_add:'_sip',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '10',
|
|
||||||
name: 'Comunità Nuovo Mondo',
|
|
||||||
adminemail: 'cnmrimini@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'https://comunitanuovomondo.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/comunitanuovomondo.app',
|
|
||||||
// email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
// email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
email_from: 'cnmrimini@gmail.com',
|
|
||||||
email_pwd: '9693e200ae56f1119185a29d34079656a628f2663dc108f7d106496ac0042815F+mvJF79KcQcUnF0twoyIg==',
|
|
||||||
telegram_key:'1646348227:AAF2qgpHB4KprhB0HPefazGLyoVGW_i4jTA',
|
|
||||||
telegram_bot_name: 'cnm_mybot',
|
|
||||||
pathreg_add:'_cnm',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '11',
|
|
||||||
name: 'ArtEnergetica',
|
|
||||||
adminemail: '',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'https://www.artenergetica.org',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
} else if (process.env.NODE_ENV === 'test') {
|
|
||||||
// ---------------- AMBIENTE DI TEST --------------------
|
|
||||||
MYAPPS = [
|
|
||||||
{
|
|
||||||
idapp: '1',
|
|
||||||
name: 'FreePlanet',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'paolo.arena77@gmail.com',
|
|
||||||
host: 'https://test.freeplanet.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/www.freeplanet.app',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '2',
|
|
||||||
name: 'Associazione Shen',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'info@associazioneshen.it',
|
|
||||||
host: 'http://test.associazioneshen.it',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/associazioneshen.it',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '3',
|
|
||||||
name: 'Brigitte MG Dumont',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://test.brigittemgdumont.com',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '4',
|
|
||||||
name: 'Mandala Solidale',
|
|
||||||
adminemail: '',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'https://mandala.freeplanet.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/mandalatest.freeplanet.app',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '6',
|
|
||||||
name: 'Mandala per l\'Anima',
|
|
||||||
adminemail: '',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://test.mandalaperlanima.eu',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '8',
|
|
||||||
name: 'CentrOlistico Rimini',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'info@arcodiluce.it',
|
|
||||||
host: 'https://www.centrolisticorimini.it',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/centrolisticorimini.it',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '9',
|
|
||||||
name: 'SalviamoIlPianeta (Server Test)',
|
|
||||||
adminemail: 'info.pianetalibero@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'https://test.salviamoilpianeta.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/test.salviamoilpianeta.app',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'_sip',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '10',
|
|
||||||
name: 'Comunità Nuovo Mondo (Server Test)',
|
|
||||||
adminemail: 'info.pianetalibero@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'https://test.comunitanuovomondo.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/test.comunitanuovomondo.app',
|
|
||||||
// email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
// email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'_cnm',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '3',
|
|
||||||
name: 'Brigitte MG Dumont',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://test.brigittemgdumont.com',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '11',
|
|
||||||
name: 'ArtEnergetica',
|
|
||||||
adminemail: '',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'https://www.artenergetica.org',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/artenergetica.org',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
} else {
|
} else {
|
||||||
// ---------------- AMBIENTE IN L O C A L E --------------------
|
process.env.MONGODB_URI = domain + database;
|
||||||
MYAPPS = [
|
process.env.MONGODB_URI_NOPWD = domain + database;
|
||||||
{
|
|
||||||
idapp: '1',
|
|
||||||
name: 'FreePlanet',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'paolo.arena77@gmail.com',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8080',
|
|
||||||
dir: '/home/paolo/myproject/freeplanet/dist/spa',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '2',
|
|
||||||
name: 'Associazione Shen',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'info@associazioneshen.it',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8081',
|
|
||||||
dir: '/home/paolo/myproject/associazioneShen/dist/spa',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '3',
|
|
||||||
name: 'Brigitte',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8082',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '4',
|
|
||||||
name: 'Mandala Solidale',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8084',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '6',
|
|
||||||
name: 'Mandala per l\'Anima',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8083',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '8',
|
|
||||||
name: 'CentrOlistico Rimini',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'info@arcodiluce.it',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8086',
|
|
||||||
dir: '/home/paolo/myproject/centrolisticorimini.it/dist/spa',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '9',
|
|
||||||
name: 'SalviamoIlPianeta',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8087',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
telegram_key: '',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
|
|
||||||
// telegram_key:'1049833543:AAE1RhGUJVdm0N_vrj0ijHZ04GCkKjl8TuQ',
|
|
||||||
// telegram_bot_name: 'TestSalviamoIlPianeta_bot',
|
|
||||||
pathreg_add:'_sip',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '10',
|
|
||||||
name: 'Comunità Nuovo Mondo',
|
|
||||||
adminemail: 'cnmrimini@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8090',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'cnmrimini@gmail.com',
|
|
||||||
email_pwd: 'bc61ab32a09d22e3a5097aa6668d3c724854c5856de9c713c427017bb89cdb0ctIESmuHr3FCNTLlRAK6d5Q',
|
|
||||||
telegram_key: '',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'_cnm',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '11',
|
|
||||||
name: 'ArtEnergetica',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8091',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*/
|
console.log('process.env.MONGODB_URI:', process.env.MONGODB_URI_NOPWD);
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,75 +1,84 @@
|
|||||||
var mongoose = require('mongoose').set('debug', false)
|
var mongoose = require('mongoose').set('debug', process.env.VITE_DEBUG);
|
||||||
|
|
||||||
|
// Configurazione globale di Mongoose
|
||||||
mongoose.Promise = global.Promise;
|
mongoose.Promise = global.Promise;
|
||||||
|
|
||||||
mongoose.level = "";
|
mongoose.level = "";
|
||||||
|
|
||||||
|
|
||||||
mongoose.plugin(schema => {
|
|
||||||
schema.options.usePushEach = true
|
|
||||||
});
|
|
||||||
|
|
||||||
mongoose.set('debug', false);
|
mongoose.set('debug', false);
|
||||||
|
mongoose.set('strictQuery', false);
|
||||||
|
|
||||||
|
// Opzioni di connessione
|
||||||
let options = {
|
let options = {
|
||||||
// user: process.env.UDB,
|
maxPoolSize: 5,
|
||||||
// pass: process.env.PDB,
|
// useNewUrlParser: true,
|
||||||
// useMongoClient: true,
|
// useUnifiedTopology: true,
|
||||||
// useMongoClient: false,
|
serverSelectionTimeoutMS: 20000, // Timeout di 30 secondi per la selezione del server
|
||||||
useNewUrlParser: true,
|
|
||||||
// useFindAndModify: true,
|
|
||||||
useFindAndModify: false,
|
|
||||||
// useCreateIndex: true,
|
|
||||||
useUnifiedTopology: true,
|
|
||||||
|
|
||||||
promiseLibrary: require('bluebird'),
|
|
||||||
|
|
||||||
// autoIndex: false, // Don't build indexes
|
|
||||||
// reconnectTries: Number.MAX_VALUE, // Never stop trying to reconnect
|
|
||||||
// reconnectInterval: 500, // Reconnect every 500ms
|
|
||||||
// poolSize: 10, // Maintain up to 10 socket connections
|
|
||||||
// // If not connected, return errors immediately rather than waiting for reconnect
|
|
||||||
// bufferMaxEntries: 0,
|
|
||||||
// connectTimeoutMS: 10000, // Give up initial connection after 10 seconds
|
|
||||||
// socketTimeoutMS: 45000, // Close sockets after 45 seconds of inactivity
|
|
||||||
// family: 4 // Use IPv4, skip trying IPv6
|
|
||||||
|
|
||||||
// keepAlive: true, // keepAlive is true by default since mongoose 5.2.0
|
|
||||||
// keepAliveInitialDelay: 300000 // keepAliveInitialDelay is the number of milliseconds to wait before initiating keepAlive on the socket.
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Controllo dell'autenticazione
|
||||||
console.log('process.env.AUTH_MONGODB', process.env.AUTH_MONGODB);
|
console.log('process.env.AUTH_MONGODB', process.env.AUTH_MONGODB);
|
||||||
|
|
||||||
|
const username = encodeURIComponent(process.env.MONGODB_USER);
|
||||||
|
const password = encodeURIComponent(process.env.MONGODB_PWD);
|
||||||
|
|
||||||
|
|
||||||
if (process.env.AUTH_MONGODB === '1') {
|
if (process.env.AUTH_MONGODB === '1') {
|
||||||
options.auth = {
|
options.auth = {
|
||||||
authSource: "admin",
|
authSource: "admin",
|
||||||
poolSize: 10,
|
username,
|
||||||
user: process.env.MONGODB_USER,
|
password
|
||||||
password: process.env.MONGODB_PWD,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.auth && options.auth.user) {
|
if (options.auth && options.auth.username) {
|
||||||
console.log('MongoDb con Authenticazione:', options.auth.user, '******');
|
console.log('MongoDb con Authenticazione:', options.auth.username, '******');
|
||||||
} else {
|
} else {
|
||||||
console.log('### MongoDb SENZA Authenticazione !!! ');
|
console.log('### MongoDb SENZA Authenticazione !!! ');
|
||||||
}
|
}
|
||||||
|
|
||||||
const db = mongoose.connection;
|
// Stampa delle informazioni di sistema
|
||||||
|
|
||||||
console.log('Node Version ' + process.version);
|
console.log('Node Version ' + process.version);
|
||||||
console.log('Mongoose Version ' + mongoose.version);
|
console.log('Mongoose Version ' + mongoose.version);
|
||||||
|
|
||||||
connectionUrl = process.env.MONGODB_URI;
|
// URL di connessione
|
||||||
|
const connectionUrl = process.env.MONGODB_URI;
|
||||||
|
console.log('Connessione a ' + process.env.MONGODB_URI_NOPWD + ' in corso...');
|
||||||
|
|
||||||
console.log('Connessione a ' + connectionUrl + ' in corso...');
|
// Funzione per connettersi al database con retry
|
||||||
mongoose.connect(connectionUrl, options);
|
async function connectToDatabase(uri, opts) {
|
||||||
|
let isConnected = false;
|
||||||
|
|
||||||
db.on('error', console.error.bind(console, 'connection error:'));
|
while (!isConnected) {
|
||||||
db.once('open', function () {
|
try {
|
||||||
// we're connected!
|
console.log("Sto provando a connettermi al database...");
|
||||||
console.log('*** CONNESSIONE EFFETTUATA ! ' + connectionUrl + ' db: ' + process.env.DATABASE)
|
await mongoose.connect(uri);
|
||||||
|
|
||||||
});
|
console.log(' *** CONNESSIONE EFFETTUATA ! ' + ' db: ' + process.env.DATABASE);
|
||||||
|
|
||||||
module.exports = { mongoose };
|
console.log(' Database corrente:', mongoose.connection.name);
|
||||||
|
|
||||||
|
// Ottieni l'URL completo della connessione
|
||||||
|
// console.log(' URL di connessione:', mongoose.connection.client.s.url);
|
||||||
|
|
||||||
|
const db = mongoose.connection;
|
||||||
|
const serverInfo = await db.db.admin().serverStatus(); // Ottieni lo stato del server
|
||||||
|
console.log(` Versione di MongoDB: ${serverInfo.version}`); // Stampa la versione
|
||||||
|
|
||||||
|
isConnected = true; // Imposta la flag di connessione a true
|
||||||
|
} catch (error) {
|
||||||
|
console.error(" Errore durante la connessione al database:", error.message);
|
||||||
|
|
||||||
|
// if (error.name === 'MongooseServerSelectionError' || error.name === 'MongoServerError') {
|
||||||
|
console.log(" Ritento la connessione tra 1 minuto...");
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 60000)); // Attendi 1 minuto prima di ritentare
|
||||||
|
/*} else {
|
||||||
|
console.error(" Errore irreversibile. Arresto il processo.");
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 10000)); // Attendi 1 minuto prima di ritentare
|
||||||
|
process.exit(1); // Termina il processo in caso di errore irreversibile
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Esporta Mongoose
|
||||||
|
module.exports = { mongoose, connectToDatabase, connectionUrl, options };
|
||||||
@@ -104,8 +104,8 @@
|
|||||||
"ID_CIRCUIT_COINS_ACCEPTED_TO_ME": "🔄 Hai inviato <strong>%s %s</strong> a %s sul '%s'.",
|
"ID_CIRCUIT_COINS_ACCEPTED_TO_ME": "🔄 Hai inviato <strong>%s %s</strong> a %s sul '%s'.",
|
||||||
"ID_CIRCUIT_COINS_REFUSED": "%s %s rifiutati da %s sul '%s'.",
|
"ID_CIRCUIT_COINS_REFUSED": "%s %s rifiutati da %s sul '%s'.",
|
||||||
"ID_CIRCUIT_COINS_REFUSED_TO_ME": "%s %s rifiutati da %s sul '%s'.",
|
"ID_CIRCUIT_COINS_REFUSED_TO_ME": "%s %s rifiutati da %s sul '%s'.",
|
||||||
"CIRCUIT_AMOUNT_EXCEED_FIDO": "L'importo supera la quantità massima concessa per %s",
|
"CIRCUIT_AMOUNT_EXCEED_FIDO": "⚠️ L'importo supera la quantità massima concessa per %s",
|
||||||
"CIRCUIT_AMOUNT_EXCEED_QTAMAX": "L'importo supera la quantità massima che il destinatario (%s) può accumulare",
|
"CIRCUIT_AMOUNT_EXCEED_QTAMAX": "⚠️ L'importo supera la quantità massima che il destinatario (%s) può accumulare",
|
||||||
"CIRCUIT_COINS_ALREADY_PROCESSED": "La richiesta è stata già processata. Stato %s",
|
"CIRCUIT_COINS_ALREADY_PROCESSED": "La richiesta è stata già processata. Stato %s",
|
||||||
"STATUS_SENT": "Inviato",
|
"STATUS_SENT": "Inviato",
|
||||||
"STATUS_REFUSED": "Rifiutato",
|
"STATUS_REFUSED": "Rifiutato",
|
||||||
@@ -127,6 +127,9 @@
|
|||||||
"🚫 Ti è stato rifiutato l'accesso. Probabilmente l'username con cui ti sei registrato non ti conosce. (%s) !<br>Contatta l'Assistenza Tecnica.": "🚫 Ti è stato rifiutato l'accesso. Probabilmente l'username con cui ti sei registrato non ti conosce. (%s) !<br>Contatta l'Assistenza Tecnica.",
|
"🚫 Ti è stato rifiutato l'accesso. Probabilmente l'username con cui ti sei registrato non ti conosce. (%s) !<br>Contatta l'Assistenza Tecnica.": "🚫 Ti è stato rifiutato l'accesso. Probabilmente l'username con cui ti sei registrato non ti conosce. (%s) !<br>Contatta l'Assistenza Tecnica.",
|
||||||
"🚫 %s ha rifiutato l'accesso alla App a %s !": "🚫 %s ha rifiutato l'accesso alla App a %s !",
|
"🚫 %s ha rifiutato l'accesso alla App a %s !": "🚫 %s ha rifiutato l'accesso alla App a %s !",
|
||||||
"✅ Hai Ammesso l'accesso alla App a %s !": "✅ Hai Ammesso l'accesso alla App a %s !",
|
"✅ Hai Ammesso l'accesso alla App a %s !": "✅ Hai Ammesso l'accesso alla App a %s !",
|
||||||
|
"EXCEED_FIDO": "⚠️ L'importo supera la Fiducia concessa per %s",
|
||||||
|
"EXCEED_QTAMAX": "⚠️ Attenzione! %s sta tentando di inviarti %s RIS, ma il tuo conto ha raggiunto il limite massimo di accumulo sul %s. \nPer poter ricevere il pagamento, devi prima spendere alcuni RIS cercando quello che ti serve, in modo da liberare spazio nel tuo conto. 🙏🏻",
|
||||||
|
"EXCEED_QTAMAX_MITTENTE": "⚠️ Attenzione! %s ha raggiunto la quota massima accumulabile in RIS, pertanto non puoi inviarglieli. Dovrebbe prima cercare di spendere i RIS cercando quello che gli serve, in modo da liberare spazio nel suo conto. 🙏🏻",
|
||||||
"Good: %": "Good: %",
|
"Good: %": "Good: %",
|
||||||
"Service: %": "Service: %"
|
"Service: %": "Service: %"
|
||||||
}
|
}
|
||||||
@@ -11,103 +11,59 @@ const auth_default = (req, res, next) => {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const authenticate = (req, res, next) => {
|
const authenticateMiddleware = async (req, res, next, withUser = false, lean = false, noError = false) => {
|
||||||
const token = req.header('x-auth');
|
|
||||||
//const refreshToken = req.header('x-refrtok');
|
|
||||||
|
|
||||||
// console.log('authenticate... ');
|
|
||||||
|
|
||||||
let noaut = false;
|
|
||||||
|
|
||||||
if (req.body.hasOwnProperty('noaut')) {
|
|
||||||
noaut = req.body.noaut;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (noaut) {
|
|
||||||
next();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const access = 'auth';
|
|
||||||
|
|
||||||
return User.findByToken(token, access, true).then((ris) => {
|
|
||||||
|
|
||||||
if (ris && ris.user && !!ris.user.deleted) {
|
|
||||||
if (ris.user.deleted)
|
|
||||||
ris.user = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ris.code === server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
|
||||||
return Promise.reject(server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ris.user) {
|
|
||||||
return Promise.reject(server_constants.RIS_CODE_HTTP_INVALID_TOKEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!!ris.user) {
|
|
||||||
// Save last time online
|
|
||||||
ris.user.lasttimeonline = new Date();
|
|
||||||
ris.user.retry_pwd = 0
|
|
||||||
ris.user.useragent = req.get('User-Agent');
|
|
||||||
|
|
||||||
return ris.user.save().then(() => {
|
|
||||||
req.user = ris.user;
|
|
||||||
req.token = token;
|
|
||||||
// req.refreshToken = refreshToken;
|
|
||||||
req.access = access;
|
|
||||||
next(); // Esegui il codice successivo
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// tools.mylog('userid', user._id);
|
|
||||||
|
|
||||||
}).catch((e) => {
|
|
||||||
if (e === server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
|
||||||
return res.status(server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED).send();
|
|
||||||
}
|
|
||||||
tools.mylog("ERR authenticate invalid Token =", e);
|
|
||||||
res.status(server_constants.RIS_CODE_HTTP_INVALID_TOKEN).send();
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const authenticate_noerror = (req, res, next) => {
|
|
||||||
try {
|
try {
|
||||||
const token = req.header('x-auth');
|
const token = req.header('x-auth');
|
||||||
const refreshToken = req.header('x-refrtok');
|
const refreshToken = req.header('x-refrtok');
|
||||||
|
const logPrefix = noError ? (withUser ? (lean ? 'WITHUSERLEAN' : 'WITHUSER') : 'NOERROR') : 'AUTH';
|
||||||
|
|
||||||
const access = 'auth';
|
if (!token) {
|
||||||
|
|
||||||
return User.findByToken(token, access, false).then((ris) => {
|
|
||||||
if (ris.code !== server_constants.RIS_CODE_OK) {
|
|
||||||
req.user = null;
|
|
||||||
req.token = null;
|
|
||||||
req.access = null;
|
|
||||||
req.code = ris.code;
|
|
||||||
} else {
|
|
||||||
req.user = ris.user;
|
|
||||||
req.token = token;
|
|
||||||
req.refreshToken = refreshToken;
|
|
||||||
req.access = access;
|
|
||||||
req.code = ris.code;
|
|
||||||
}
|
|
||||||
if (ris.code === server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
|
||||||
return res.status(server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED).send();
|
|
||||||
} else {
|
|
||||||
// Vai avanti ad eseguire il codice, in ogni modo !
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
}).catch((e) => {
|
|
||||||
req.user = null;
|
req.user = null;
|
||||||
req.token = null;
|
req.token = null;
|
||||||
req.access = null;
|
req.code = server_constants.RIS_CODE_HTTP_INVALID_TOKEN;
|
||||||
req.code = 0;
|
if (!noError)
|
||||||
|
console.log(` ## ${logPrefix}_TOKEN INVALIDO ❌ ...`);
|
||||||
|
return noError ? next() : res.status(req.code).send();
|
||||||
|
}
|
||||||
|
|
||||||
// Continua comunque !
|
const user = await User.findByToken(token, 'auth', false, withUser, lean);
|
||||||
next();
|
|
||||||
});
|
if (user.code !== server_constants.RIS_CODE_OK) {
|
||||||
|
req.user = null;
|
||||||
|
req.token = null;
|
||||||
|
req.code = user.code;
|
||||||
|
} else {
|
||||||
|
req.user = user.user;
|
||||||
|
req.token = token;
|
||||||
|
req.refreshToken = refreshToken;
|
||||||
|
req.code = user.code;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user.code === server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
||||||
|
console.log(` TOKEN SCADUTO ! `);
|
||||||
|
if (noError) {
|
||||||
|
return next()
|
||||||
|
} else {
|
||||||
|
return res.status(server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED).send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log(` ## ${logPrefix} NEXT ! AVANTI...`);
|
||||||
|
next();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Err', e);
|
console.error('Errore nel middleware di autenticazione:', e);
|
||||||
|
req.user = null;
|
||||||
|
req.token = null;
|
||||||
|
req.code = server_constants.RIS_CODE_HTTP_INVALID_TOKEN;
|
||||||
|
noError ? next() : res.status(req.code).send();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = { authenticate, authenticate_noerror, auth_default };
|
const authenticate = (req, res, next) => authenticateMiddleware(req, res, next);
|
||||||
|
const authenticate_withUser = (req, res, next) => authenticateMiddleware(req, res, next, true);
|
||||||
|
const authenticate_withUserLean = (req, res, next) => authenticateMiddleware(req, res, next, true, true);
|
||||||
|
const authenticate_noerror = (req, res, next) => authenticateMiddleware(req, res, next, false, false, true);
|
||||||
|
const authenticate_noerror_WithUser = (req, res, next) => authenticateMiddleware(req, res, next, true, false, true);
|
||||||
|
const authenticate_noerror_WithUserLean = (req, res, next) => authenticateMiddleware(req, res, next, true, true, true);
|
||||||
|
|
||||||
|
module.exports = { authenticate, authenticate_noerror, auth_default, authenticate_withUser, authenticate_noerror_WithUser, authenticate_noerror_WithUserLean };
|
||||||
|
|||||||
128
src/server/models/JobsInProgress.js
Executable file
128
src/server/models/JobsInProgress.js
Executable file
@@ -0,0 +1,128 @@
|
|||||||
|
const mongoose = require('mongoose').set('debug', false)
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const tools = require('../tools/general');
|
||||||
|
|
||||||
|
mongoose.Promise = global.Promise;
|
||||||
|
mongoose.level = "F";
|
||||||
|
|
||||||
|
const shared_consts = require('../tools/shared_nodejs');
|
||||||
|
|
||||||
|
// Resolving error Unknown modifier: $pushAll
|
||||||
|
mongoose.plugin(schema => {
|
||||||
|
schema.options.usePushEach = true
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const JobsInProgressSchema = new Schema({
|
||||||
|
idapp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
descr: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
nomeFunzioneDbOp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
terminatedWhy: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
comment: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
date_created: {
|
||||||
|
type: Date,
|
||||||
|
default: Date.now
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
JobsInProgressSchema.statics.chechifExistJobWorking = async function (jobData, terminateiftoolong) {
|
||||||
|
|
||||||
|
// controlla se esiste un altro job, non ancora terminato !STATUS_JOB.FINISH
|
||||||
|
// se esiste già allora ritorna false
|
||||||
|
const existingJob = await this.findOne({ idapp: jobData.idapp, nomeFunzioneDbOp: jobData.nomeFunzioneDbOp, status: { $ne: shared_consts.STATUS_JOB.FINISH } });
|
||||||
|
if (existingJob) {
|
||||||
|
// se il Job trovato è passato troppo tempo (oltre 3 ore date_created), allora fai finta che abbia già terminato
|
||||||
|
// (in questo caso, non ritorna false, ma ritorna il job trovato, per permettere di gestire il caso in cui si vuole forzare il job a terminare)
|
||||||
|
if (Math.abs(Date.now() - existingJob.date_created.getTime()) > 180 * 60 * 1000) {
|
||||||
|
if (terminateiftoolong) {
|
||||||
|
existingJob.status = shared_consts.STATUS_JOB.FINISH;
|
||||||
|
existingJob.terminatedWhy = shared_consts.TERMINATED_WHY.TOOLONGTIME;
|
||||||
|
await existingJob.save();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return true; // E' in FUNZIONE il JOB
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
JobsInProgressSchema.statics.addNewJob = async function (jobData) {
|
||||||
|
if (!jobData || typeof jobData !== 'object') {
|
||||||
|
console.error('ERRORE: ❌ jobData deve essere un oggetto valido');
|
||||||
|
}
|
||||||
|
|
||||||
|
const esistegia = await this.chechifExistJobWorking(jobData, true);
|
||||||
|
|
||||||
|
if (esistegia) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const newJob = await this.create(jobData);
|
||||||
|
return newJob;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Errore nell\'aggiungere un nuovo record: ', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
JobsInProgressSchema.methods.terminateJob = async function (witherror) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
this.status = shared_consts.STATUS_JOB.FINISH;
|
||||||
|
this.terminatedWhy = witherror ? shared_consts.TERMINATED_WHY.END_WITHERROR : shared_consts.TERMINATED_WHY.END_NORMALLY;
|
||||||
|
await this.save();
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Errore durante la terminazione del job: ', err);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
JobsInProgressSchema.statics.getFieldsForSearch = function () {
|
||||||
|
return [{ field: 'descr', type: tools.FieldType.string }]
|
||||||
|
};
|
||||||
|
|
||||||
|
JobsInProgressSchema.statics.executeQueryTable = function (idapp, params, user) {
|
||||||
|
params.fieldsearch = this.getFieldsForSearch();
|
||||||
|
return tools.executeQueryTable(this, idapp, params, user);
|
||||||
|
};
|
||||||
|
|
||||||
|
JobsInProgressSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
|
const JobsInProgress = this;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return await JobsInProgress.find({ idapp }).then((arrrec) => {
|
||||||
|
return arrrec;
|
||||||
|
});
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Errore: ', err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const JobsInProgress = mongoose.model('JobsInProgress', JobsInProgressSchema);
|
||||||
|
|
||||||
|
JobsInProgress.createIndexes()
|
||||||
|
.then(() => { })
|
||||||
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = { JobsInProgress };
|
||||||
27
src/server/models/PageView.js
Executable file
27
src/server/models/PageView.js
Executable file
@@ -0,0 +1,27 @@
|
|||||||
|
// /backend/models/PageView.js
|
||||||
|
|
||||||
|
const mongoose = require('mongoose');
|
||||||
|
|
||||||
|
const PageViewSchema = new mongoose.Schema({
|
||||||
|
url: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
idapp: String,
|
||||||
|
ip: {
|
||||||
|
type: String,
|
||||||
|
default: 'unknown'
|
||||||
|
},
|
||||||
|
userId: String,
|
||||||
|
username: String,
|
||||||
|
userAgent: {
|
||||||
|
type: String
|
||||||
|
},
|
||||||
|
referrer: String,
|
||||||
|
timestamp: {
|
||||||
|
type: Date,
|
||||||
|
default: Date.now
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = mongoose.model('PageView', PageViewSchema);
|
||||||
@@ -98,9 +98,7 @@ AccountSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp, deleted: false };
|
const myfind = { idapp, deleted: false };
|
||||||
|
|
||||||
return await Account.find(myfind, (err, arrrec) => {
|
return await Account.find(myfind).lean();
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
AccountSchema.pre('save', async function (next) {
|
AccountSchema.pre('save', async function (next) {
|
||||||
@@ -659,7 +657,7 @@ AccountSchema.statics.updateQtaMax = async function (idapp, username, groupname,
|
|||||||
else
|
else
|
||||||
risult = await Account.updateOne({ idapp, username, circuitId }, { $set: paramstoupdate });
|
risult = await Account.updateOne({ idapp, username, circuitId }, { $set: paramstoupdate });
|
||||||
|
|
||||||
return risult && risult.nModified > 0;
|
return risult && risult.modifiedCount > 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
AccountSchema.statics.getAccountsCircuitiNazionali = async function (idapp) {
|
AccountSchema.statics.getAccountsCircuitiNazionali = async function (idapp) {
|
||||||
@@ -764,8 +762,8 @@ AccountSchema.statics.updateSaldoAndTransato_AllAccounts = async function (idapp
|
|||||||
|
|
||||||
const Account = mongoose.model('Account', AccountSchema);
|
const Account = mongoose.model('Account', AccountSchema);
|
||||||
|
|
||||||
Account.createIndexes((err) => {
|
Account.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
module.exports = { Account };
|
module.exports = { Account };
|
||||||
|
|||||||
@@ -42,13 +42,7 @@ AdTypeSchema.pre('save', async function (next) {
|
|||||||
AdTypeSchema.statics.findAllIdApp = async function(idapp) {
|
AdTypeSchema.statics.findAllIdApp = async function(idapp) {
|
||||||
const AdType = this;
|
const AdType = this;
|
||||||
|
|
||||||
const query = [
|
return AdType.find({}).sort({_id: 1}).lean();
|
||||||
{$sort: {_id: 1}},
|
|
||||||
];
|
|
||||||
|
|
||||||
return await AdType.aggregate(query).then((arrrec) => {
|
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -64,8 +58,9 @@ AdTypeSchema.statics.executeQueryTable = function(idapp, params) {
|
|||||||
|
|
||||||
const AdType = mongoose.model('AdType', AdTypeSchema);
|
const AdType = mongoose.model('AdType', AdTypeSchema);
|
||||||
|
|
||||||
AdType.createIndexes((err) => {
|
AdType.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = {AdType};
|
module.exports = {AdType};
|
||||||
|
|||||||
@@ -64,8 +64,9 @@ AdTypeGoodSchema.statics.executeQueryTable = function(idapp, params) {
|
|||||||
|
|
||||||
const AdTypeGood = mongoose.model('AdTypeGood', AdTypeGoodSchema);
|
const AdTypeGood = mongoose.model('AdTypeGood', AdTypeGoodSchema);
|
||||||
|
|
||||||
AdTypeGood.createIndexes((err) => {
|
AdTypeGood.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = {AdTypeGood};
|
module.exports = {AdTypeGood};
|
||||||
|
|||||||
@@ -134,7 +134,6 @@ const AttivitaSchema = new Schema(
|
|||||||
...tools.getFieldsForAnnunci()
|
...tools.getFieldsForAnnunci()
|
||||||
}, { strict: false });
|
}, { strict: false });
|
||||||
|
|
||||||
AttivitaSchema.index({ 'idapp': 1 });
|
|
||||||
|
|
||||||
|
|
||||||
AttivitaSchema.pre('save', async function (next) {
|
AttivitaSchema.pre('save', async function (next) {
|
||||||
@@ -390,8 +389,9 @@ AttivitaSchema.statics.getCompleteRecord = function (idapp, id) {
|
|||||||
|
|
||||||
const Attivita = mongoose.model('Attivita', AttivitaSchema);
|
const Attivita = mongoose.model('Attivita', AttivitaSchema);
|
||||||
|
|
||||||
Attivita.createIndexes((err) => {
|
Attivita.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Attivita };
|
module.exports = { Attivita };
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
mongoose = require('mongoose').set('debug', false)
|
mongoose = require('mongoose').set('debug', false);
|
||||||
const Schema = mongoose.Schema;
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
const tools = require('../tools/general');
|
const tools = require('../tools/general');
|
||||||
|
|
||||||
mongoose.Promise = global.Promise;
|
mongoose.Promise = global.Promise;
|
||||||
mongoose.level = "F";
|
mongoose.level = 'F';
|
||||||
|
|
||||||
// Resolving error Unknown modifier: $pushAll
|
// Resolving error Unknown modifier: $pushAll
|
||||||
mongoose.plugin(schema => {
|
mongoose.plugin((schema) => {
|
||||||
schema.options.usePushEach = true
|
schema.options.usePushEach = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
const AuthorSchema = new Schema({
|
const AuthorSchema = new Schema({
|
||||||
@@ -29,13 +29,13 @@ const AuthorSchema = new Schema({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var Author = module.exports = mongoose.model('Author', AuthorSchema);
|
var Author = (module.exports = mongoose.model('Author', AuthorSchema));
|
||||||
|
|
||||||
module.exports.getFieldsForSearch = function () {
|
module.exports.getFieldsForSearch = function () {
|
||||||
return [
|
return [
|
||||||
{ field: 'name', type: tools.FieldType.string },
|
{ field: 'name', type: tools.FieldType.string },
|
||||||
{ field: 'surname', type: tools.FieldType.string },
|
{ field: 'surname', type: tools.FieldType.string },
|
||||||
]
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.executeQueryTable = function (idapp, params) {
|
module.exports.executeQueryTable = function (idapp, params) {
|
||||||
@@ -46,9 +46,12 @@ module.exports.executeQueryTable = function (idapp, params) {
|
|||||||
module.exports.findAllIdApp = async function (idapp) {
|
module.exports.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Author.find(myfind).sort({name: 1, surname: 1});
|
return await Author.find(myfind).sort({ name: 1, surname: 1 }).select({ idapp: 0 }).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports
|
||||||
if (err) throw err;
|
.createIndexes()
|
||||||
});
|
.then(() => {})
|
||||||
|
.catch((err) => {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
|||||||
@@ -68,10 +68,7 @@ bookingSchema.statics.findAllByUserIdAndIdApp = function (userId, idapp, sall) {
|
|||||||
else
|
else
|
||||||
myfind = { userId, idapp, booked: true };
|
myfind = { userId, idapp, booked: true };
|
||||||
|
|
||||||
return Booking.find(myfind, (err, arrbooked) => {
|
return Booking.find(myfind).lean();
|
||||||
// console.log('ris Booking:', arrbooked);
|
|
||||||
return arrbooked
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -94,7 +91,7 @@ function getUsersByBooking(idapp) {
|
|||||||
$Lookup: {
|
$Lookup: {
|
||||||
from: "users",
|
from: "users",
|
||||||
localField: "userId", // field in my collection
|
localField: "userId", // field in my collection
|
||||||
foreignField: "ObjectId(_id)", // field in the 'from' collection
|
foreignField: "new ObjectId(_id)", // field in the 'from' collection
|
||||||
as: "fromItems"
|
as: "fromItems"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -122,8 +119,9 @@ bookingSchema.statics.findAllDistinctByBooking = function (idapp) {
|
|||||||
|
|
||||||
const Booking = mongoose.model('Booking', bookingSchema);
|
const Booking = mongoose.model('Booking', bookingSchema);
|
||||||
|
|
||||||
Booking.createIndexes((err) => {
|
Booking.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Booking };
|
module.exports = { Booking };
|
||||||
|
|||||||
@@ -205,8 +205,9 @@ BotSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const MyBot = mongoose.model('Bot', BotSchema);
|
const MyBot = mongoose.model('Bot', BotSchema);
|
||||||
|
|
||||||
MyBot.createIndexes((err) => {
|
MyBot.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MyBot };
|
module.exports = { MyBot };
|
||||||
|
|||||||
@@ -76,8 +76,9 @@ CalZoomSchema.statics.getNextZoom = async function (idapp) {
|
|||||||
|
|
||||||
const CalZoom = mongoose.model('CalZoom', CalZoomSchema);
|
const CalZoom = mongoose.model('CalZoom', CalZoomSchema);
|
||||||
|
|
||||||
CalZoom.createIndexes((err) => {
|
CalZoom.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { CalZoom };
|
module.exports = { CalZoom };
|
||||||
|
|||||||
@@ -2,14 +2,13 @@ const mongoose = require('mongoose').set('debug', false);
|
|||||||
const Schema = mongoose.Schema;
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
mongoose.Promise = global.Promise;
|
mongoose.Promise = global.Promise;
|
||||||
mongoose.level = "F";
|
mongoose.level = 'F';
|
||||||
|
|
||||||
// Resolving error Unknown modifier: $pushAll
|
// Resolving error Unknown modifier: $pushAll
|
||||||
mongoose.plugin(schema => {
|
mongoose.plugin((schema) => {
|
||||||
schema.options.usePushEach = true
|
schema.options.usePushEach = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
const CartSchema = new Schema({
|
const CartSchema = new Schema({
|
||||||
idapp: {
|
idapp: {
|
||||||
type: String,
|
type: String,
|
||||||
@@ -18,18 +17,25 @@ const CartSchema = new Schema({
|
|||||||
totalQty: { type: Number, default: 0 },
|
totalQty: { type: Number, default: 0 },
|
||||||
totalPrice: { type: Number, default: 0 },
|
totalPrice: { type: Number, default: 0 },
|
||||||
totalPriceCalc: { type: Number, default: 0 },
|
totalPriceCalc: { type: Number, default: 0 },
|
||||||
|
totalPriceIntero: { type: Number, default: 0 },
|
||||||
department: {
|
department: {
|
||||||
type: String, ref: 'Department',
|
type: String,
|
||||||
|
ref: 'Department',
|
||||||
},
|
},
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
order:
|
order: { type: Schema.Types.ObjectId, ref: 'Order' },
|
||||||
{ type: Schema.Types.ObjectId, ref: 'Order' },
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
note: {
|
note: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
|
codice_sconto: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
descr_sconto: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
note_ordine_gas: {
|
note_ordine_gas: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
@@ -38,7 +44,7 @@ const CartSchema = new Schema({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var Cart = module.exports = mongoose.model('Cart', CartSchema);
|
var Cart = (module.exports = mongoose.model('Cart', CartSchema));
|
||||||
|
|
||||||
module.exports.findAllIdApp = async function (idapp, userId) {
|
module.exports.findAllIdApp = async function (idapp, userId) {
|
||||||
const myfind = { idapp, userId };
|
const myfind = { idapp, userId };
|
||||||
@@ -48,73 +54,113 @@ module.exports.findAllIdApp = async function (idapp, userId) {
|
|||||||
|
|
||||||
module.exports.getCartByUserId = async function (uid, idapp) {
|
module.exports.getCartByUserId = async function (uid, idapp) {
|
||||||
try {
|
try {
|
||||||
const Order = require('../models/order');
|
const mycart = await getCart(uid, idapp);
|
||||||
|
if (!mycart) return null;
|
||||||
|
|
||||||
let query = { userId: uid, idapp };
|
await updateOrderDetails(mycart.items);
|
||||||
const mycart = await Cart.findOne(query).lean();
|
filterValidItems(mycart);
|
||||||
|
|
||||||
if (!!mycart) {
|
return mycart;
|
||||||
for (const idkey in mycart.items) {
|
|
||||||
try {
|
|
||||||
let idorder = mycart.items[idkey]._id.toString();
|
|
||||||
let myorder = mycart.items[idkey].order;
|
|
||||||
if (!!myorder) {
|
|
||||||
idorder = mycart.items[idkey].order._id.toString();
|
|
||||||
}
|
|
||||||
if (idorder) {
|
|
||||||
let myord = await Order.getTotalOrderById(idorder);
|
|
||||||
if (myord.length > 0) {
|
|
||||||
mycart.items[idkey].order = myord[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.log('err', e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mycart.newitems = []
|
|
||||||
for (let item of mycart.items) {
|
|
||||||
if (item.order && item.order.hasOwnProperty('idapp') && (item.order.quantity > 0 || item.order.quantitypreordered > 0))
|
|
||||||
mycart.newitems.push(item)
|
|
||||||
}
|
|
||||||
mycart.items = [...mycart.newitems]
|
|
||||||
mycart.newitems = []
|
|
||||||
|
|
||||||
return mycart;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('getCartByUserId err', e);
|
console.log('getCartByUserId err', e);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.updateCartByUserId = function (userId, newCart, callback) {
|
module.exports.getCartCompletoByCartId = async function (id_cart, idapp) {
|
||||||
let query = { userId: userId };
|
try {
|
||||||
Cart.find(query, function (err, c) {
|
const mycart = await getCartById(id_cart, idapp);
|
||||||
if (err) throw err;
|
if (!mycart) return null;
|
||||||
|
|
||||||
//exist cart in databse
|
await updateOrderDetails(mycart.items);
|
||||||
if (c.length > 0) {
|
filterValidItems(mycart);
|
||||||
Cart.findOneAndUpdate(
|
|
||||||
{ userId: userId },
|
return mycart;
|
||||||
|
} catch (e) {
|
||||||
|
console.log('getCartByUserId err', e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Recupera il carrello per l'utente e l'app
|
||||||
|
async function getCart(uid, idapp) {
|
||||||
|
const query = { userId: uid, idapp };
|
||||||
|
return await Cart.findOne(query).lean();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getCartById(id_cart, idapp) {
|
||||||
|
return await Cart.findOne({_id: id_cart}).lean();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggiorna i dettagli dell'ordine per ogni articolo nel carrello
|
||||||
|
async function updateOrderDetails(items) {
|
||||||
|
const Order = require('../models/order');
|
||||||
|
|
||||||
|
for (const item of items) {
|
||||||
|
try {
|
||||||
|
const idorder = item.order ? item.order._id.toString() : item._id.toString();
|
||||||
|
const myord = await Order.getTotalOrderById(idorder);
|
||||||
|
|
||||||
|
if (myord.length > 0) {
|
||||||
|
item.order = myord[0];
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.log('err', e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filtra solo gli articoli validi (con quantità > 0 o pre-ordinati)
|
||||||
|
function filterValidItems(mycart) {
|
||||||
|
mycart.newitems = [];
|
||||||
|
for (let item of mycart.items) {
|
||||||
|
if (
|
||||||
|
item.order &&
|
||||||
|
item.order.hasOwnProperty('idapp') &&
|
||||||
|
(item.order.quantity > 0 || item.order.quantitypreordered > 0)
|
||||||
|
) {
|
||||||
|
mycart.newitems.push(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mycart.items = [...mycart.newitems];
|
||||||
|
mycart.newitems = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.updateCartByUserId = async function (userId, newCart) {
|
||||||
|
const query = { userId: userId };
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Cerca il carrello esistente nel database
|
||||||
|
const existingCart = await Cart.findOne(query);
|
||||||
|
|
||||||
|
if (existingCart) {
|
||||||
|
// Se il carrello esiste, aggiorna i dati
|
||||||
|
const updatedCart = await Cart.findOneAndUpdate(
|
||||||
|
query,
|
||||||
{
|
{
|
||||||
$set: {
|
$set: {
|
||||||
items: newCart.items,
|
items: newCart.items,
|
||||||
totalQty: newCart.totalQty,
|
totalQty: newCart.totalQty,
|
||||||
totalPrice: newCart.totalPrice,
|
totalPrice: newCart.totalPrice,
|
||||||
|
totalPriceIntero: newCart.totalPriceIntero,
|
||||||
totalPriceCalc: newCart.totalPriceCalc,
|
totalPriceCalc: newCart.totalPriceCalc,
|
||||||
userId: userId,
|
userId: userId,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ new: true },
|
{ new: true } // Restituisce il documento aggiornato
|
||||||
callback,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return updatedCart; // Restituisce il carrello aggiornato
|
||||||
} else {
|
} else {
|
||||||
//no cart in database
|
// Se il carrello non esiste, crea un nuovo documento
|
||||||
newCart.save(callback);
|
const createdCart = new Cart(newCart);
|
||||||
|
await createdCart.init();
|
||||||
|
const savedCart = await createdCart.save();
|
||||||
|
return savedCart; // Restituisce il carrello creato
|
||||||
}
|
}
|
||||||
});
|
} catch (err) {
|
||||||
|
// Gestione degli errori
|
||||||
|
console.error("Errore durante l'aggiornamento del carrello:", err);
|
||||||
|
throw err; // Propaga l'errore al chiamante
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.updateCartByCartId = async function (cartId, newCart) {
|
module.exports.updateCartByCartId = async function (cartId, newCart) {
|
||||||
@@ -123,39 +169,52 @@ module.exports.updateCartByCartId = async function (cartId, newCart) {
|
|||||||
const totalQty = newCart.totalQty;
|
const totalQty = newCart.totalQty;
|
||||||
const totalPrice = newCart.totalPrice;
|
const totalPrice = newCart.totalPrice;
|
||||||
const totalPriceCalc = newCart.totalPriceCalc;
|
const totalPriceCalc = newCart.totalPriceCalc;
|
||||||
|
const totalPriceIntero = newCart.totalPriceIntero;
|
||||||
const note = newCart.note;
|
const note = newCart.note;
|
||||||
|
const codice_sconto = newCart.codice_sconto;
|
||||||
|
const descr_sconto = newCart.descr_sconto;
|
||||||
const note_ordine_gas = newCart.note_ordine_gas;
|
const note_ordine_gas = newCart.note_ordine_gas;
|
||||||
|
|
||||||
const modify_at = new Date();
|
const modify_at = new Date();
|
||||||
|
|
||||||
return await Cart.findOneAndUpdate({ _id: cartId }, {
|
return await Cart.findOneAndUpdate(
|
||||||
$set: {
|
{ _id: cartId },
|
||||||
items,
|
{
|
||||||
totalPrice,
|
$set: {
|
||||||
totalPriceCalc,
|
items,
|
||||||
totalQty,
|
totalPrice,
|
||||||
note,
|
totalPriceCalc,
|
||||||
note_ordine_gas,
|
totalPriceIntero,
|
||||||
modify_at: new Date(),
|
totalQty,
|
||||||
|
note,
|
||||||
|
codice_sconto,
|
||||||
|
descr_sconto,
|
||||||
|
note_ordine_gas,
|
||||||
|
modify_at: new Date(),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}, { new: false }).lean().then((ris) => {
|
{ new: false }
|
||||||
return ris;
|
)
|
||||||
}).catch(err => {
|
.lean()
|
||||||
console.log('err', err);
|
.then((ris) => {
|
||||||
return null;
|
return ris;
|
||||||
});
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log('err', err);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.deleteCartByCartId = async function (cartId) {
|
module.exports.deleteCartByCartId = async function (cartId) {
|
||||||
return await Cart.remove({ _id: cartId });
|
return await Cart.deleteOne({ _id: cartId });
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createCart = async function (newCart) {
|
module.exports.createCart = async function (newCart) {
|
||||||
return await newCart.save();
|
return await newCart.save();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Cart.createIndexes()
|
||||||
Cart.createIndexes((err) => {
|
.then(() => {})
|
||||||
if (err) throw err;
|
.catch((err) => {
|
||||||
});
|
throw err;
|
||||||
|
});
|
||||||
|
|||||||
@@ -28,9 +28,10 @@ const CashCategorySchema = new Schema({
|
|||||||
|
|
||||||
var CashCategory = module.exports = mongoose.model('CashCategory', CashCategorySchema);
|
var CashCategory = module.exports = mongoose.model('CashCategory', CashCategorySchema);
|
||||||
|
|
||||||
CashCategory.createIndexes((err) => {
|
CashCategory.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports.getFieldsForSearch = function () {
|
module.exports.getFieldsForSearch = function () {
|
||||||
return []
|
return []
|
||||||
@@ -44,7 +45,7 @@ module.exports.executeQueryTable = function (idapp, params) {
|
|||||||
module.exports.findAllIdApp = async function (idapp) {
|
module.exports.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await CashCategory.find(myfind);
|
return await CashCategory.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.getAllCashCategory = function (query, sort, callback) {
|
module.exports.getAllCashCategory = function (query, sort, callback) {
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ module.exports.executeQueryTable = function (idapp, params) {
|
|||||||
module.exports.findAllIdApp = async function (idapp) {
|
module.exports.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await CashSubCategory.find(myfind);
|
return await CashSubCategory.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.getAllCashSubCategory = function (query, sort, callback) {
|
module.exports.getAllCashSubCategory = function (query, sort, callback) {
|
||||||
@@ -70,6 +70,7 @@ module.exports.createCashSubCategory = async function (CashSubCategory) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -49,13 +49,14 @@ CatAISchema.statics.executeQueryTable = function (idapp, params) {
|
|||||||
CatAISchema.statics.findAllIdApp = async function (idapp) {
|
CatAISchema.statics.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await CatAI.find(myfind).sort({ name: 1 });
|
return await CatAI.find(myfind).sort({ name: 1 }).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
const CatAI = mongoose.model('CatAI', CatAISchema);
|
const CatAI = mongoose.model('CatAI', CatAISchema);
|
||||||
|
|
||||||
CatAI.createIndexes((err) => {
|
CatAI.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = CatAI;
|
module.exports = CatAI;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const mongoose = require('mongoose').set('debug', false)
|
const mongoose = require('mongoose').set('debug', false);
|
||||||
const Schema = mongoose.Schema;
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
const tools = require('../tools/general');
|
const tools = require('../tools/general');
|
||||||
@@ -7,15 +7,13 @@ const { ObjectId } = require('mongodb');
|
|||||||
const { IImg } = require('../models/myscheda');
|
const { IImg } = require('../models/myscheda');
|
||||||
|
|
||||||
mongoose.Promise = global.Promise;
|
mongoose.Promise = global.Promise;
|
||||||
mongoose.level = "F";
|
mongoose.level = 'F';
|
||||||
|
|
||||||
|
|
||||||
// Resolving error Unknown modifier: $pushAll
|
// Resolving error Unknown modifier: $pushAll
|
||||||
mongoose.plugin(schema => {
|
mongoose.plugin((schema) => {
|
||||||
schema.options.usePushEach = true
|
schema.options.usePushEach = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
const CatalogSchema = new Schema({
|
const CatalogSchema = new Schema({
|
||||||
idapp: {
|
idapp: {
|
||||||
type: String,
|
type: String,
|
||||||
@@ -26,27 +24,47 @@ const CatalogSchema = new Schema({
|
|||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
type: String,
|
type: String,
|
||||||
|
index: true,
|
||||||
},
|
},
|
||||||
foto_collana: IImg,
|
foto_collana: IImg,
|
||||||
idCollane: [{
|
|
||||||
|
idCollane: [
|
||||||
|
{
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
idTipoFormato: [
|
||||||
|
{
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
argomenti: [
|
||||||
|
{
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
condition_andor: {
|
||||||
type: Number,
|
type: Number,
|
||||||
}],
|
default: 0,
|
||||||
argomenti: [{
|
},
|
||||||
type: String,
|
|
||||||
}],
|
|
||||||
editore: [{ type: String }],
|
editore: [{ type: String }],
|
||||||
|
editore_escludi: [{ type: String }],
|
||||||
|
|
||||||
descr_introduttiva: {
|
descr_introduttiva: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
idPageAssigned: {
|
idPageAssigned: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
idPageAssigned_stampa: {
|
referenti: [
|
||||||
type: String,
|
{
|
||||||
},
|
type: String,
|
||||||
referenti: [{
|
},
|
||||||
type: String,
|
],
|
||||||
}],
|
|
||||||
|
disattiva_link_immagini: Boolean,
|
||||||
|
|
||||||
img_bordata: IImg,
|
img_bordata: IImg,
|
||||||
img_intro: IImg,
|
img_intro: IImg,
|
||||||
@@ -55,23 +73,59 @@ const CatalogSchema = new Schema({
|
|||||||
pagina_introduttiva_sfondo_nero: {
|
pagina_introduttiva_sfondo_nero: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
},
|
},
|
||||||
|
backcolor: String,
|
||||||
|
|
||||||
pdf_generato: String,
|
pdf_generato: String,
|
||||||
|
pdf_generato_compressed: String,
|
||||||
|
pdf_generato_size: String,
|
||||||
|
pdf_generato_compr_size: String,
|
||||||
|
pdf_generato_stampa: String,
|
||||||
|
pdf_generato_stampa_compressed: String,
|
||||||
|
pdf_generato_stampa_compr_size: String,
|
||||||
|
pdf_generato_stampa_size: String,
|
||||||
data_generato: {
|
data_generato: {
|
||||||
type: Date,
|
type: Date,
|
||||||
},
|
},
|
||||||
|
data_generato_stampa: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
username_lista_generata: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
data_lista_generata: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
data_lista_updated: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
username_lista_updated: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
pdf_online: String,
|
pdf_online: String,
|
||||||
|
pdf_online_size: String,
|
||||||
data_online: {
|
data_online: {
|
||||||
type: Date,
|
type: Date,
|
||||||
},
|
},
|
||||||
|
pdf_online_stampa: String,
|
||||||
|
pdf_online_stampa_size: String,
|
||||||
|
data_online_stampa: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
|
||||||
date_created: {
|
date_created: {
|
||||||
type: Date,
|
type: Date,
|
||||||
default: Date.now
|
default: Date.now,
|
||||||
},
|
},
|
||||||
date_updated: {
|
date_updated: {
|
||||||
type: Date,
|
type: Date,
|
||||||
},
|
},
|
||||||
|
lista_prodotti: [
|
||||||
|
{
|
||||||
|
type: Schema.Types.ObjectId,
|
||||||
|
ref: 'Product',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
isCatalogoGenerale: Boolean,
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -86,7 +140,7 @@ CatalogSchema.pre('save', async function (next) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
CatalogSchema.statics.getFieldsForSearch = function () {
|
CatalogSchema.statics.getFieldsForSearch = function () {
|
||||||
return [{ field: 'title', type: tools.FieldType.string }]
|
return [{ field: 'title', type: tools.FieldType.string }];
|
||||||
};
|
};
|
||||||
|
|
||||||
CatalogSchema.statics.executeQueryTable = function (idapp, params, user) {
|
CatalogSchema.statics.executeQueryTable = function (idapp, params, user) {
|
||||||
@@ -94,7 +148,7 @@ CatalogSchema.statics.executeQueryTable = function (idapp, params, user) {
|
|||||||
return tools.executeQueryTable(this, idapp, params, user);
|
return tools.executeQueryTable(this, idapp, params, user);
|
||||||
};
|
};
|
||||||
|
|
||||||
CatalogSchema.statics.findAllIdApp = async function (idapp) {
|
/*CatalogSchema.statics.OLD_findAllIdApp = async function (idapp) {
|
||||||
const Catalog = this;
|
const Catalog = this;
|
||||||
|
|
||||||
const arrrec = await Catalog.aggregate([
|
const arrrec = await Catalog.aggregate([
|
||||||
@@ -116,13 +170,156 @@ CatalogSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
return arrrec;
|
||||||
|
};*/
|
||||||
|
|
||||||
|
CatalogSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
|
try {
|
||||||
|
const arrrec = await this.aggregate([
|
||||||
|
{ $match: { idapp } },
|
||||||
|
{ $addFields: { num_lista_prodotti: { $size: { $ifNull: ['$lista_prodotti', []] } } } },
|
||||||
|
{ $project: { lista_prodotti: 0 } },
|
||||||
|
{ $sort: { title: 1 } },
|
||||||
|
]);
|
||||||
|
return arrrec;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Errore:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CatalogSchema.statics.getCatalogById = async function (id) {
|
||||||
|
const Catalog = this;
|
||||||
|
|
||||||
|
try {
|
||||||
|
let arrrec = await Catalog.find({ _id: id })
|
||||||
|
.populate({
|
||||||
|
path: 'lista_prodotti', // Popola il campo lista_prodotti
|
||||||
|
populate: {
|
||||||
|
path: 'idProductInfo',
|
||||||
|
model: 'ProductInfo',
|
||||||
|
populate: [
|
||||||
|
{
|
||||||
|
path: 'idCatProds',
|
||||||
|
model: 'CatProd',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'idSubCatProds',
|
||||||
|
model: 'SubCatProd',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'idAuthors',
|
||||||
|
model: 'Author',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.populate({
|
||||||
|
path: 'lista_prodotti',
|
||||||
|
populate: {
|
||||||
|
path: 'idProducer',
|
||||||
|
model: 'Producer',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.populate({
|
||||||
|
path: 'lista_prodotti',
|
||||||
|
populate: {
|
||||||
|
path: 'idProvider',
|
||||||
|
model: 'Provider',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.populate({
|
||||||
|
path: 'lista_prodotti',
|
||||||
|
populate: {
|
||||||
|
path: 'idStorehouses',
|
||||||
|
model: 'Storehouse',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.populate({
|
||||||
|
path: 'lista_prodotti',
|
||||||
|
populate: {
|
||||||
|
path: 'idScontisticas',
|
||||||
|
model: 'Scontistica',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.populate({
|
||||||
|
path: 'lista_prodotti',
|
||||||
|
populate: {
|
||||||
|
path: 'idGasordine',
|
||||||
|
model: 'Gasordine',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// controlla prima se nella lista ci sono dei product che non esistono piu allora li devi rimuovere !
|
||||||
|
for (const catalog of arrrec) {
|
||||||
|
const originalLength = catalog.lista_prodotti.length;
|
||||||
|
catalog.lista_prodotti = catalog.lista_prodotti.filter(
|
||||||
|
(product) =>
|
||||||
|
product.idProductInfo &&
|
||||||
|
product.idProductInfo.code &&
|
||||||
|
product.idProductInfo.code !== '' &&
|
||||||
|
product.idProductInfo.imagefile &&
|
||||||
|
product.idProductInfo.imagefile !== 'noimg.jpg' &&
|
||||||
|
!product.delete
|
||||||
|
);
|
||||||
|
if (catalog.lista_prodotti.length !== originalLength) {
|
||||||
|
await catalog.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const transformedArrRec = arrrec.map((catalog) => ({
|
||||||
|
...catalog.toObject(), // Converte il documento Mongoose in un oggetto JavaScript puro
|
||||||
|
lista_prodotti: catalog.lista_prodotti.map((product) => ({
|
||||||
|
...product.toObject(),
|
||||||
|
productInfo: {
|
||||||
|
...product.idProductInfo.toObject(), // Copia tutti i campi di idProductInfo
|
||||||
|
catprods: product.idProductInfo.idCatProds, // Rinomina idCatProds in catprods
|
||||||
|
subcatprods: product.idProductInfo.idSubCatProds,
|
||||||
|
collana: product.idProductInfo.idCollana,
|
||||||
|
authors: product.idProductInfo.idAuthors,
|
||||||
|
},
|
||||||
|
producer: product.idProducer,
|
||||||
|
storehouse: product.idStorehouses,
|
||||||
|
scontisticas: product.idScontisticas,
|
||||||
|
gasordine: product.idGasordine,
|
||||||
|
idProductInfo: product.idProductInfo._id, // CHECK
|
||||||
|
})),
|
||||||
|
}));
|
||||||
|
|
||||||
|
return transformedArrRec && transformedArrRec.length > 0 ? transformedArrRec[0] : null;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Errore: ', err);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CatalogSchema.statics.executeQueryPickup = async function (idapp, params) {
|
||||||
|
const strfind = params.search;
|
||||||
|
|
||||||
|
if (strfind === '') {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cerca title
|
||||||
|
const reg = new RegExp(strfind, 'i');
|
||||||
|
const arrrec = await this.find({
|
||||||
|
idapp,
|
||||||
|
title: reg,
|
||||||
|
})
|
||||||
|
.sort({ title: 1 })
|
||||||
|
.limit(10)
|
||||||
|
.select('title _id')
|
||||||
|
.lean();
|
||||||
|
|
||||||
return arrrec;
|
return arrrec;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Catalog = mongoose.model('Catalog', CatalogSchema);
|
const Catalog = mongoose.model('Catalog', CatalogSchema);
|
||||||
|
|
||||||
Catalog.createIndexes((err) => {
|
Catalog.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => {})
|
||||||
});
|
.catch((err) => {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
|
||||||
module.exports = { Catalog };
|
module.exports = { Catalog };
|
||||||
|
|||||||
@@ -45,14 +45,15 @@ CategorySchema.statics.executeQueryTable = function (idapp, params) {
|
|||||||
CategorySchema.statics.findAllIdApp = async function (idapp) {
|
CategorySchema.statics.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Category.find(myfind);
|
return await Category.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
const Category = mongoose.model('Category', CategorySchema);
|
const Category = mongoose.model('Category', CategorySchema);
|
||||||
|
|
||||||
Category.createIndexes((err) => {
|
Category.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Category };
|
module.exports = { Category };
|
||||||
|
|||||||
@@ -80,8 +80,9 @@ CatGrpSchema.statics.executeQueryTable = function (idapp, params) {
|
|||||||
|
|
||||||
const CatGrp = mongoose.model('CatGrp', CatGrpSchema);
|
const CatGrp = mongoose.model('CatGrp', CatGrpSchema);
|
||||||
|
|
||||||
CatGrp.createIndexes((err) => {
|
CatGrp.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { CatGrp };
|
module.exports = { CatGrp };
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ const CatProdSchema = new Schema({
|
|||||||
},
|
},
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
|
index: 1,
|
||||||
},
|
},
|
||||||
descr_estesa: {
|
descr_estesa: {
|
||||||
type: String,
|
type: String,
|
||||||
@@ -34,6 +35,9 @@ const CatProdSchema = new Schema({
|
|||||||
color: {
|
color: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
|
quanti: {
|
||||||
|
type: Number,
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
CatProdSchema.statics.getAllCategories = function (callback) {
|
CatProdSchema.statics.getAllCategories = function (callback) {
|
||||||
@@ -55,16 +59,16 @@ CatProdSchema.statics.executeQueryTable = function (idapp, params) {
|
|||||||
CatProdSchema.statics.findAllIdApp = async function (idapp) {
|
CatProdSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await CatProd.find(myfind).sort({ name: 1 });
|
return await CatProd.find(myfind).sort({ name: 1 }).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
CatProdSchema.statics.getCatProdWithTitleCount = async function (idapp) {
|
CatProdSchema.statics.updateCatDeleteEmpty = async function (idapp) {
|
||||||
try {
|
try {
|
||||||
const result = await CatProd.aggregate([
|
const toDelete = await CatProd.aggregate([
|
||||||
{ $match: { idapp } },
|
{ $match: { idapp } },
|
||||||
{
|
{
|
||||||
$lookup: {
|
$lookup: {
|
||||||
from: 'productinfos', // Nome della tua collezione productInfo
|
from: 'productinfos',
|
||||||
localField: '_id',
|
localField: '_id',
|
||||||
foreignField: 'idCatProds',
|
foreignField: 'idCatProds',
|
||||||
as: 'products'
|
as: 'products'
|
||||||
@@ -77,9 +81,86 @@ CatProdSchema.statics.getCatProdWithTitleCount = async function (idapp) {
|
|||||||
quanti: { $size: '$products' } // Conta il numero di prodotti per ciascun CatProd
|
quanti: { $size: '$products' } // Conta il numero di prodotti per ciascun CatProd
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ $sort: { name: 1 } } // Ordina i risultati per nome
|
{ $match: { quanti: 0 } },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
if (toDelete.length > 0) {
|
||||||
|
const ids = toDelete.map(x => x._id);
|
||||||
|
const ris = await CatProd.deleteMany({ _id: { $in: ids } });
|
||||||
|
const deletedRecs = toDelete.map(x => ({ _id: x._id, name: x.name }));
|
||||||
|
if (deletedRecs.length > 0) {
|
||||||
|
return `Lista Argomenti cancellati: ${deletedRecs.map(x => x.name).join(', ')}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "Nessun argomento cancellato";
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error UpdateCatDeleteEmpty:', error);
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
CatProdSchema.statics.getCatProdWithTitleCount = async function (idapp, updatedata) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
const myquery = [
|
||||||
|
{ $match: { idapp } },
|
||||||
|
{
|
||||||
|
$lookup: {
|
||||||
|
from: 'productinfos', // Nome della tua collezione productInfo
|
||||||
|
localField: '_id',
|
||||||
|
foreignField: 'idCatProds',
|
||||||
|
as: 'products'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$addFields: {
|
||||||
|
myproducts: {
|
||||||
|
$filter: {
|
||||||
|
input: "$products",
|
||||||
|
as: "prod",
|
||||||
|
cond: {
|
||||||
|
$in: ["$$prod.idStatoProdotto", [1, 4, 34, 45, 46]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
$project: {
|
||||||
|
_id: 1,
|
||||||
|
name: 1,
|
||||||
|
idArgomento: 1,
|
||||||
|
descr_estesa: 1,
|
||||||
|
img: 1,
|
||||||
|
icon: 1,
|
||||||
|
color: 1,
|
||||||
|
quanti: { $size: '$myproducts' }, // Conta il numero di prodotti per ciascun CatProd
|
||||||
|
/*products: {
|
||||||
|
$map: {
|
||||||
|
input: "$myproducts",
|
||||||
|
as: "prod",
|
||||||
|
in: {
|
||||||
|
name: "$$prod.name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ $sort: { name: 1 } } // Ordina i risultati per nome
|
||||||
|
];
|
||||||
|
|
||||||
|
const result = await CatProd.aggregate(myquery);
|
||||||
|
|
||||||
|
if (updatedata) {
|
||||||
|
for (const record of result) {
|
||||||
|
await CatProd.updateOne(
|
||||||
|
{ _id: record._id },
|
||||||
|
{ $set: { quanti: record.quanti } }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error retrieving CatProd with title count:', error);
|
console.error('Error retrieving CatProd with title count:', error);
|
||||||
@@ -90,9 +171,10 @@ CatProdSchema.statics.getCatProdWithTitleCount = async function (idapp) {
|
|||||||
|
|
||||||
const CatProd = mongoose.model('CatProd', CatProdSchema);
|
const CatProd = mongoose.model('CatProd', CatProdSchema);
|
||||||
|
|
||||||
CatProd.createIndexes((err) => {
|
CatProd.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = CatProd;
|
module.exports = CatProd;
|
||||||
|
|||||||
@@ -43,9 +43,10 @@ CfgServerSchema.statics.findAllIdApp = async function(idapp) {
|
|||||||
|
|
||||||
const CfgServer = mongoose.model('CfgServer', CfgServerSchema);
|
const CfgServer = mongoose.model('CfgServer', CfgServerSchema);
|
||||||
|
|
||||||
CfgServer.createIndexes((err) => {
|
CfgServer.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = {CfgServer};
|
module.exports = {CfgServer};
|
||||||
|
|
||||||
|
|||||||
@@ -270,7 +270,7 @@ CircuitSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const whatToShow = this.getWhatToShow(idapp, '');
|
const whatToShow = this.getWhatToShow(idapp, '');
|
||||||
|
|
||||||
return await Circuit.find(myfind, whatToShow).lean().sort({ name: 1 });
|
return await Circuit.find(myfind, whatToShow).sort({ name: 1 }).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
CircuitSchema.statics.isCircuitAdmin = async function (idrec, username) {
|
CircuitSchema.statics.isCircuitAdmin = async function (idrec, username) {
|
||||||
@@ -607,7 +607,7 @@ CircuitSchema.statics.getCircuitById = async function (circuitId) {
|
|||||||
|
|
||||||
CircuitSchema.statics.deleteCircuit = async function (idapp, usernameOrig, name) {
|
CircuitSchema.statics.deleteCircuit = async function (idapp, usernameOrig, name) {
|
||||||
console.log('Circuito ' + name + ' rimosso da ' + usernameOrig);
|
console.log('Circuito ' + name + ' rimosso da ' + usernameOrig);
|
||||||
return await Circuit.findOneAndRemove({ idapp, name });
|
return await Circuit.findOneAndDelete({ idapp, name });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -720,6 +720,7 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig
|
|||||||
let ris = {
|
let ris = {
|
||||||
result: false,
|
result: false,
|
||||||
cansend: true,
|
cansend: true,
|
||||||
|
errorcode: 0,
|
||||||
errormsg: '',
|
errormsg: '',
|
||||||
rec: null,
|
rec: null,
|
||||||
useraccounts: [],
|
useraccounts: [],
|
||||||
@@ -768,11 +769,13 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig
|
|||||||
if (accountorigTable.saldo - myqty < -accountorigTable.fidoConcesso) {
|
if (accountorigTable.saldo - myqty < -accountorigTable.fidoConcesso) {
|
||||||
ris.cansend = false;
|
ris.cansend = false;
|
||||||
ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_FIDO', usernameOrig);
|
ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_FIDO', usernameOrig);
|
||||||
|
ris.errorcode = shared_consts.SENDRIS_CODES.EXCEED_FIDO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (accountdestTable.saldo + myqty > accountdestTable.qta_maxConcessa) {
|
if (accountdestTable.saldo + myqty > accountdestTable.qta_maxConcessa) {
|
||||||
ris.cansend = false;
|
ris.cansend = false;
|
||||||
ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_QTAMAX', extrarec.dest);
|
ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_QTAMAX', extrarec.dest);
|
||||||
|
ris.errorcode = shared_consts.SENDRIS_CODES.EXCEED_QTAMAX;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1338,7 +1341,7 @@ CircuitSchema.statics.setFido = async function (idapp, username, circuitName, gr
|
|||||||
|
|
||||||
const ris = await Account.updateFido(idapp, username, groupname, circuitId, fido);
|
const ris = await Account.updateFido(idapp, username, groupname, circuitId, fido);
|
||||||
if (ris) {
|
if (ris) {
|
||||||
return { qta_maxConcessa: qtamax, fidoConcesso: fido, changed: variato || (ris && ris.nModified > 0) };
|
return { qta_maxConcessa: qtamax, fidoConcesso: fido, changed: variato || (ris && ris.modifiedCount > 0) };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1796,8 +1799,9 @@ CircuitSchema.statics.addMovementByOrdersCart = async function (ordersCart, user
|
|||||||
|
|
||||||
const Circuit = mongoose.model('Circuit', CircuitSchema);
|
const Circuit = mongoose.model('Circuit', CircuitSchema);
|
||||||
|
|
||||||
Circuit.createIndexes((err) => {
|
Circuit.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Circuit };
|
module.exports = { Circuit };
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ CitySchema.statics.executeQueryPickup = async function (idapp, params) {
|
|||||||
CitySchema.statics.findAllIdApp = async function (idapp) {
|
CitySchema.statics.findAllIdApp = async function (idapp) {
|
||||||
const myfind = {};
|
const myfind = {};
|
||||||
|
|
||||||
return await City.find(myfind);
|
return await City.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
CitySchema.statics.getGeoJsonByProvince = async function (prov) {
|
CitySchema.statics.getGeoJsonByProvince = async function (prov) {
|
||||||
@@ -256,7 +256,7 @@ CitySchema.statics.insertGeojsonToMongoDB = async function (nomefilejson) {
|
|||||||
|
|
||||||
if (reccity) {
|
if (reccity) {
|
||||||
const ris = await City.updateOne({ _id: reccity._id }, { $set: { geojson: citta } });
|
const ris = await City.updateOne({ _id: reccity._id }, { $set: { geojson: citta } });
|
||||||
if (ris.ok === 1) {
|
if (ris.acknowledged) {
|
||||||
inseriti++;
|
inseriti++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -274,8 +274,9 @@ CitySchema.statics.insertGeojsonToMongoDB = async function (nomefilejson) {
|
|||||||
|
|
||||||
const City = mongoose.model('City', CitySchema);
|
const City = mongoose.model('City', CitySchema);
|
||||||
|
|
||||||
City.createIndexes((err) => {
|
City.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { City };
|
module.exports = { City };
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ const CollanaSchema = new Schema({
|
|||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
type: String,
|
type: String,
|
||||||
|
index: true,
|
||||||
},
|
},
|
||||||
dataOra: {
|
dataOra: {
|
||||||
type: Date,
|
type: Date,
|
||||||
@@ -30,6 +31,9 @@ const CollanaSchema = new Schema({
|
|||||||
enabledAlFresco: {
|
enabledAlFresco: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
},
|
},
|
||||||
|
quanti: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -52,6 +56,74 @@ module.exports.findAllIdApp = async function (idapp) {
|
|||||||
return await Collana.find(myfind).sort({title: 1}).lean();
|
return await Collana.find(myfind).sort({title: 1}).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.getCollaneWithTitleCount = async function (idapp, updatedata) {
|
||||||
if (err) throw err;
|
try {
|
||||||
});
|
|
||||||
|
const myquery = [
|
||||||
|
{ $match: { idapp } },
|
||||||
|
{
|
||||||
|
$lookup: {
|
||||||
|
from: 'productinfos', // Nome della tua collezione productInfo
|
||||||
|
localField: '_id',
|
||||||
|
foreignField: 'idCollana',
|
||||||
|
as: 'products'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$addFields: {
|
||||||
|
myproducts: {
|
||||||
|
$filter: {
|
||||||
|
input: "$products",
|
||||||
|
as: "prod",
|
||||||
|
cond: {
|
||||||
|
$in: ["$$prod.idStatoProdotto", [1, 4, 34, 45, 46]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
$project: {
|
||||||
|
_id: 1,
|
||||||
|
title: 1,
|
||||||
|
idCollana: 1,
|
||||||
|
dataOra: 1,
|
||||||
|
quanti: { $size: '$myproducts' },
|
||||||
|
products: {
|
||||||
|
$map: {
|
||||||
|
input: "$myproducts",
|
||||||
|
as: "prod",
|
||||||
|
in: {
|
||||||
|
name: "$$prod.name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ $match: { quanti: { $gt: 0 } } }, // esclude i record con quanti = 0
|
||||||
|
{ $sort: { title: 1 } } // Ordina i risultati per nome
|
||||||
|
];
|
||||||
|
|
||||||
|
const result = await Collana.aggregate(myquery);
|
||||||
|
|
||||||
|
if (updatedata) {
|
||||||
|
for (const record of result) {
|
||||||
|
await Collana.updateOne(
|
||||||
|
{ _id: record._id },
|
||||||
|
{ $set: { quanti: record.quanti } }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error retrieving idCollana with title count:', error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
module.exports.createIndexes()
|
||||||
|
.then(() => { })
|
||||||
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -47,15 +47,14 @@ ContribtypeSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Contribtype.find(myfind, (err, arrrec) => {
|
return await Contribtype.find(myfind).lean();
|
||||||
return arrrec
|
|
||||||
}).lean();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const Contribtype = mongoose.model('Contribtype', ContribtypeSchema);
|
const Contribtype = mongoose.model('Contribtype', ContribtypeSchema);
|
||||||
|
|
||||||
Contribtype.createIndexes((err) => {
|
Contribtype.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Contribtype };
|
module.exports = { Contribtype };
|
||||||
|
|||||||
176
src/server/models/cron.js
Executable file
176
src/server/models/cron.js
Executable file
@@ -0,0 +1,176 @@
|
|||||||
|
const mongoose = require('mongoose').set('debug', false);
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const tools = require('../tools/general');
|
||||||
|
|
||||||
|
const shared_consts = require('../tools/shared_nodejs');
|
||||||
|
|
||||||
|
mongoose.Promise = global.Promise;
|
||||||
|
mongoose.level = 'F';
|
||||||
|
|
||||||
|
// Resolving error Unknown modifier: $pushAll
|
||||||
|
mongoose.plugin((schema) => {
|
||||||
|
schema.options.usePushEach = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
const CronMod = require('../modules/CronMod');
|
||||||
|
|
||||||
|
const CronSchema = new Schema({
|
||||||
|
idapp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
active: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
descr: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
nomeFunzioneDbOp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
startTime: {
|
||||||
|
// Orario iniziale (es. "08:30")
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
everyXMinutes: {
|
||||||
|
// Esegui ogni X ore
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
quanteVolteEseguito: {
|
||||||
|
type: Number,
|
||||||
|
default: 0,
|
||||||
|
},
|
||||||
|
quanteVolteEseguiAlGG: {
|
||||||
|
type: Number,
|
||||||
|
default: 1,
|
||||||
|
},
|
||||||
|
lastJobStarted: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
lastJobEnd: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
log: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
date_created: {
|
||||||
|
type: Date,
|
||||||
|
default: Date.now,
|
||||||
|
},
|
||||||
|
date_updated: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
CronSchema.statics.getFieldsForSearch = function () {
|
||||||
|
return [{ field: 'descr', type: tools.FieldType.string }];
|
||||||
|
};
|
||||||
|
|
||||||
|
CronSchema.statics.executeQueryTable = function (idapp, params, user) {
|
||||||
|
params.fieldsearch = this.getFieldsForSearch();
|
||||||
|
return tools.executeQueryTable(this, idapp, params, user);
|
||||||
|
};
|
||||||
|
|
||||||
|
CronSchema.statics.startJobCron = async function (idapp) {
|
||||||
|
// Esegui un loop su tutti i cron job che trovi per l'idapp specificato
|
||||||
|
const Cron = this;
|
||||||
|
try {
|
||||||
|
const cronJobs = await Cron.find({ idapp, active: true });
|
||||||
|
|
||||||
|
// console.log('Check startJobCron...', idapp);
|
||||||
|
|
||||||
|
const mycronMod = new CronMod();
|
||||||
|
|
||||||
|
const currentDate = new Date();
|
||||||
|
|
||||||
|
for (const mycron of cronJobs) {
|
||||||
|
const jobTime = new Date();
|
||||||
|
const [hours, minutes] = mycron.startTime.split(':');
|
||||||
|
jobTime.setHours(hours, minutes, 0, 0);
|
||||||
|
|
||||||
|
// Check if jobTime has passed and if 'everyXMinutes' have elapsed since last execution
|
||||||
|
if (!mycron.quanteVolteEseguito) mycron.quanteVolteEseguito = 0;
|
||||||
|
const timesPerDay = mycron.quanteVolteEseguiAlGG || 1;
|
||||||
|
const startDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
|
||||||
|
let lastJobDate = null;
|
||||||
|
if (mycron.lastJobStarted) {
|
||||||
|
lastJobDate = new Date(
|
||||||
|
mycron.lastJobStarted.getFullYear(),
|
||||||
|
mycron.lastJobStarted.getMonth(),
|
||||||
|
mycron.lastJobStarted.getDate()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
let tempooltre = currentDate - mycron.lastJobStarted >= mycron.everyXMinutes * 60 * 1000;
|
||||||
|
const canExecute =
|
||||||
|
(!mycron.lastJobStarted || // se non c'è un ultimo eseguito, esegui
|
||||||
|
tempooltre) && // se è passato il tempo di attesa, esegui
|
||||||
|
(mycron.lastJobStarted && (mycron.quanteVolteEseguito < timesPerDay) || // se non ho ancora raggiunto il numero di esecuzioni al giorno
|
||||||
|
(!lastJobDate || (startDate.getTime() !== lastJobDate.getTime()))); // se non è lo stesso giorno, esegui
|
||||||
|
if (canExecute) {
|
||||||
|
if (currentDate >= jobTime) {
|
||||||
|
// Execute the function at the scheduled time
|
||||||
|
console.log(`Sto eseguendo il Cron Job: ${mycron.nomeFunzioneDbOp} alle ${currentDate.toLocaleTimeString()}`);
|
||||||
|
const status = shared_consts.STATUS_JOB.START;
|
||||||
|
if (!lastJobDate || startDate.getTime() !== lastJobDate.getTime()) {
|
||||||
|
mycron.quanteVolteEseguito = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const quanteVolteEseguito = mycron.quanteVolteEseguito + 1;
|
||||||
|
await Cron.findOneAndUpdate(
|
||||||
|
{ _id: mycron._id },
|
||||||
|
{ $set: { lastJobStarted: currentDate, status, quanteVolteEseguito } },
|
||||||
|
{ new: true }
|
||||||
|
);
|
||||||
|
mycronMod
|
||||||
|
.eseguiDbOp(idapp, { dbop: mycron.nomeFunzioneDbOp }, null, null)
|
||||||
|
.then(async (ris) => {
|
||||||
|
console.log(`${currentDate.toLocaleTimeString()} LOG JOB: ${ris.mystr}`);
|
||||||
|
const myid = mycron._id;
|
||||||
|
const status = shared_consts.STATUS_JOB.FINISH;
|
||||||
|
const risupdate = await Cron.findOneAndUpdate(
|
||||||
|
{ _id: myid },
|
||||||
|
{ $set: { lastJobEnd: new Date(), status } },
|
||||||
|
{ new: true }
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.catch(async (err) => {
|
||||||
|
const log = "Errore durante l'esecuzione del job: " + err.message || err;
|
||||||
|
const status = shared_consts.STATUS_JOB.ERR;
|
||||||
|
await Cron.findOneAndUpdate({ _id: mycron._id }, { $set: { log, status } }, { new: true });
|
||||||
|
console.error(log);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error startJobCron:', e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CronSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
|
const Cron = this;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return await Cron.find({ idapp }).then((arrrec) => {
|
||||||
|
return arrrec;
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Errore: ', err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const Cron = mongoose.model('Cron', CronSchema);
|
||||||
|
|
||||||
|
Cron.createIndexes()
|
||||||
|
.then(() => {})
|
||||||
|
.catch((err) => {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = { Cron };
|
||||||
@@ -26,9 +26,10 @@ const departmentSchema = new Schema({
|
|||||||
|
|
||||||
var Department = module.exports = mongoose.model('Department', departmentSchema);
|
var Department = module.exports = mongoose.model('Department', departmentSchema);
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports.getFieldsForSearch = function () {
|
module.exports.getFieldsForSearch = function () {
|
||||||
return [{ field: 'name', type: tools.FieldType.string },
|
return [{ field: 'name', type: tools.FieldType.string },
|
||||||
@@ -44,6 +45,6 @@ module.exports.executeQueryTable = function (idapp, params) {
|
|||||||
module.exports.findAllIdApp = async function (idapp) {
|
module.exports.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Department.find(myfind);
|
return await Department.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
59
src/server/models/destnewsletter.js
Executable file
59
src/server/models/destnewsletter.js
Executable file
@@ -0,0 +1,59 @@
|
|||||||
|
const mongoose = require('mongoose').set('debug', false)
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const tools = require('../tools/general');
|
||||||
|
|
||||||
|
mongoose.Promise = global.Promise;
|
||||||
|
mongoose.level = "F";
|
||||||
|
|
||||||
|
|
||||||
|
// Resolving error Unknown modifier: $pushAll
|
||||||
|
mongoose.plugin(schema => {
|
||||||
|
schema.options.usePushEach = true
|
||||||
|
});
|
||||||
|
|
||||||
|
const DestNewsletterSchema = new Schema({
|
||||||
|
idapp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
descr: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
tipodest_id: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
DestNewsletterSchema.statics.getFieldsForSearch = function () {
|
||||||
|
return []
|
||||||
|
};
|
||||||
|
|
||||||
|
DestNewsletterSchema.statics.executeQueryTable = function (idapp, params) {
|
||||||
|
params.fieldsearch = this.getFieldsForSearch();
|
||||||
|
return tools.executeQueryTable(this, idapp, params);
|
||||||
|
};
|
||||||
|
|
||||||
|
DestNewsletterSchema.statics.DuplicateAllRecords = async function (idapporig, idappdest) {
|
||||||
|
|
||||||
|
return await tools.DuplicateAllRecords(this, idapporig, idappdest);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
DestNewsletterSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
|
const DestNewsletter = this;
|
||||||
|
|
||||||
|
const myfind = { idapp };
|
||||||
|
|
||||||
|
return await DestNewsletter.find(myfind).lean();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const DestNewsletter = mongoose.model('DestNewsletter', DestNewsletterSchema);
|
||||||
|
|
||||||
|
DestNewsletter.createIndexes()
|
||||||
|
.then(() => { })
|
||||||
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = { DestNewsletter };
|
||||||
@@ -106,8 +106,9 @@ DisciplineSchema.statics.DuplicateAllRecords = async function (idapporig, idappd
|
|||||||
|
|
||||||
const Discipline = mongoose.model('Discipline', DisciplineSchema);
|
const Discipline = mongoose.model('Discipline', DisciplineSchema);
|
||||||
|
|
||||||
Discipline.createIndexes((err) => {
|
Discipline.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Discipline };
|
module.exports = { Discipline };
|
||||||
|
|||||||
@@ -228,9 +228,8 @@ ExtraListSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await ExtraList.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(this, myfind);
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ExtraListSchema.statics.DuplicateAllRecords = async function (idapporig, idappdest) {
|
ExtraListSchema.statics.DuplicateAllRecords = async function (idapporig, idappdest) {
|
||||||
@@ -332,9 +331,10 @@ ExtraListSchema.statics.ImportData = async function (locale, idapp, strdata) {
|
|||||||
|
|
||||||
const ExtraList = mongoose.model('ExtraList', ExtraListSchema);
|
const ExtraList = mongoose.model('ExtraList', ExtraListSchema);
|
||||||
|
|
||||||
ExtraList.createIndexes((err) => {
|
ExtraList.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { ExtraList };
|
module.exports = { ExtraList };
|
||||||
|
|
||||||
|
|||||||
@@ -57,15 +57,14 @@ GallerySchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Gallery.find(myfind, (err, arrrec) => {
|
return await Gallery.find(myfind).lean();
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const Gallery = mongoose.model('Gallery', GallerySchema);
|
const Gallery = mongoose.model('Gallery', GallerySchema);
|
||||||
|
|
||||||
Gallery.createIndexes((err) => {
|
Gallery.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Gallery };
|
module.exports = { Gallery };
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ module.exports.getGasordineByID = function (id, callback) {
|
|||||||
Gasordine.findById(id, callback);
|
Gasordine.findById(id, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -80,8 +80,9 @@ GoodSchema.statics.executeQueryTable = function (idapp, params) {
|
|||||||
|
|
||||||
const Good = mongoose.model('Good', GoodSchema);
|
const Good = mongoose.model('Good', GoodSchema);
|
||||||
|
|
||||||
Good.createIndexes((err) => {
|
Good.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Good };
|
module.exports = { Good };
|
||||||
|
|||||||
@@ -312,9 +312,7 @@ GraduatoriaSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Graduatoria.find(myfind, (err, arrrec) => {
|
return await Graduatoria.find(myfind).lean();
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GraduatoriaSchema.statics.isWorking = function (idapp) {
|
GraduatoriaSchema.statics.isWorking = function (idapp) {
|
||||||
@@ -415,8 +413,9 @@ GraduatoriaSchema.statics.getPosizioneInGraduatoria = async function (idapp, ind
|
|||||||
|
|
||||||
const Graduatoria = mongoose.model('Graduatoria', GraduatoriaSchema);
|
const Graduatoria = mongoose.model('Graduatoria', GraduatoriaSchema);
|
||||||
|
|
||||||
Graduatoria.createIndexes((err) => {
|
Graduatoria.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Graduatoria };
|
module.exports = { Graduatoria };
|
||||||
|
|||||||
@@ -44,9 +44,10 @@ module.exports.executeQueryTable = function (idapp, params) {
|
|||||||
module.exports.findAllIdApp = async function (idapp) {
|
module.exports.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Group.find(myfind);
|
return await Group.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ module.exports.calculateHoursTodo = async function (idtodo) {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,10 @@ module.exports.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp, deleted: false };
|
const myfind = { idapp, deleted: false };
|
||||||
|
|
||||||
return await ImportaDescr.find(myfind, (err, arrrec) => {
|
try {
|
||||||
return arrrec;
|
return await ImportaDescr.find(myfind).lean();
|
||||||
});
|
} catch (err) {
|
||||||
|
console.error("Errore in ImportaDescr:", err);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
@@ -57,7 +57,10 @@ module.exports.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp, deleted: false };
|
const myfind = { idapp, deleted: false };
|
||||||
|
|
||||||
return await ImportaIsbn.find(myfind, (err, arrrec) => {
|
try {
|
||||||
return arrrec;
|
return await ImportaIsbn.find(myfind).lean();
|
||||||
});
|
} catch (err) {
|
||||||
|
console.error("Errore in ImportaIsbn:", err);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
@@ -57,7 +57,12 @@ module.exports.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp, deleted: false };
|
const myfind = { idapp, deleted: false };
|
||||||
|
|
||||||
return await ImportaMacro.find(myfind, (err, arrrec) => {
|
|
||||||
return arrrec;
|
try {
|
||||||
});
|
return await ImportaMacro.find(myfind).lean();
|
||||||
|
} catch (err) {
|
||||||
|
console.error("Errore in ImportaMacro:", err);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -53,7 +53,6 @@ module.exports.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp, deleted: false };
|
const myfind = { idapp, deleted: false };
|
||||||
|
|
||||||
return await Inventariogm.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(Inventariogm, myfind);
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
@@ -192,11 +192,10 @@ module.exports.findAllIdApp = async function(idapp) {
|
|||||||
|
|
||||||
const myfind = {idapp};
|
const myfind = {idapp};
|
||||||
|
|
||||||
return await IscrittiArcadei.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(this, myfind);
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -189,14 +189,12 @@ module.exports.findByEmail = function (idapp, email) {
|
|||||||
|
|
||||||
module.exports.findAllIdApp = async function (idapp) {
|
module.exports.findAllIdApp = async function (idapp) {
|
||||||
|
|
||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await IscrittiConacreis.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(this, myfind);
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -55,9 +55,7 @@ LevelSchema.statics.findAllIdApp = async function(idapp) {
|
|||||||
{$sort: {_id: 1}},
|
{$sort: {_id: 1}},
|
||||||
];
|
];
|
||||||
|
|
||||||
return await Level.aggregate(query).then((arrrec) => {
|
return Level.aggregate(query);
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -73,8 +71,9 @@ LevelSchema.statics.executeQueryTable = function(idapp, params) {
|
|||||||
|
|
||||||
const Level = mongoose.model('Level', LevelSchema);
|
const Level = mongoose.model('Level', LevelSchema);
|
||||||
|
|
||||||
Level.createIndexes((err) => {
|
Level.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = {Level};
|
module.exports = {Level};
|
||||||
|
|||||||
@@ -36,9 +36,42 @@ MailingListSchema.statics.findAllIdAppSubscribed = function (idapp) {
|
|||||||
|
|
||||||
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
||||||
|
|
||||||
return User.find(myfind, (err, arrrec) => {
|
return tools.findAllQueryIdApp(User, myfind);
|
||||||
return arrrec
|
};
|
||||||
});
|
|
||||||
|
MailingListSchema.statics.findAllIdAppDiarioSubscr = function (idapp) {
|
||||||
|
|
||||||
|
const myfind = {
|
||||||
|
idapp,
|
||||||
|
diario_on: true,
|
||||||
|
$or: [
|
||||||
|
{ deleted: { $exists: false } },
|
||||||
|
{ deleted: { $exists: true, $eq: false } }],
|
||||||
|
$or: [
|
||||||
|
{ email_errata: { $exists: false } },
|
||||||
|
{ email_errata: { $exists: true, $ne: true } }],
|
||||||
|
};
|
||||||
|
|
||||||
|
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
||||||
|
|
||||||
|
return tools.findAllQueryIdApp(User, myfind);
|
||||||
|
};
|
||||||
|
MailingListSchema.statics.findAllIdAppDiarioSubscr = function (idapp) {
|
||||||
|
|
||||||
|
const myfind = {
|
||||||
|
idapp,
|
||||||
|
test: true,
|
||||||
|
$or: [
|
||||||
|
{ deleted: { $exists: false } },
|
||||||
|
{ deleted: { $exists: true, $eq: false } }],
|
||||||
|
$or: [
|
||||||
|
{ email_errata: { $exists: false } },
|
||||||
|
{ email_errata: { $exists: true, $ne: true } }],
|
||||||
|
};
|
||||||
|
|
||||||
|
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
||||||
|
|
||||||
|
return tools.findAllQueryIdApp(User, myfind);
|
||||||
};
|
};
|
||||||
|
|
||||||
MailingListSchema.statics.getnumSent = async function (idapp, idUser) {
|
MailingListSchema.statics.getnumSent = async function (idapp, idUser) {
|
||||||
@@ -62,12 +95,9 @@ MailingListSchema.statics.isOk = async function (idapp, iduser, idUser) {
|
|||||||
|
|
||||||
MailingListSchema.statics.findAllIdApp = async function (idapp) {
|
MailingListSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
|
|
||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await User.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(User, myfind);
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MailingListSchema.statics.isUnsubscribed = async function (idapp, hash) {
|
MailingListSchema.statics.isUnsubscribed = async function (idapp, hash) {
|
||||||
@@ -84,15 +114,14 @@ MailingListSchema.statics.findByHash = function (idapp, hash) {
|
|||||||
|
|
||||||
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
||||||
|
|
||||||
return User.findOne(myfind, (err, rec) => {
|
return User.findOne(myfind).lean();
|
||||||
return rec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const MailingList = mongoose.model('MailingList', MailingListSchema);
|
const MailingList = mongoose.model('MailingList', MailingListSchema);
|
||||||
|
|
||||||
User.createIndexes((err) => {
|
User.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MailingList };
|
module.exports = { MailingList };
|
||||||
|
|||||||
@@ -72,9 +72,8 @@ MovementSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await MyMovement.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(MyMovement, myfind);
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MovementSchema.pre('save', async function (next) {
|
MovementSchema.pre('save', async function (next) {
|
||||||
@@ -1069,8 +1068,9 @@ MovementSchema.statics.getLastN_Transactions = async function (idapp, numtransaz
|
|||||||
|
|
||||||
const Movement = mongoose.model('Movement', MovementSchema);
|
const Movement = mongoose.model('Movement', MovementSchema);
|
||||||
|
|
||||||
Movement.createIndexes((err) => {
|
Movement.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Movement };
|
module.exports = { Movement };
|
||||||
|
|||||||
@@ -118,15 +118,15 @@ MsgTemplateSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await MsgTemplate.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(this, myfind);
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const MsgTemplate = mongoose.model('MsgTemplate', MsgTemplateSchema);
|
const MsgTemplate = mongoose.model('MsgTemplate', MsgTemplateSchema);
|
||||||
|
|
||||||
MsgTemplate.createIndexes((err) => {
|
MsgTemplate.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MsgTemplate };
|
module.exports = { MsgTemplate };
|
||||||
|
|||||||
@@ -143,9 +143,7 @@ MyBachecaSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
{ $sort: { descr: 1 } },
|
{ $sort: { descr: 1 } },
|
||||||
];
|
];
|
||||||
|
|
||||||
return await MyBacheca.aggregate(query).then((arrrec) => {
|
return await MyBacheca.aggregate(query);
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -383,8 +381,9 @@ MyBachecaSchema.statics.getCompleteRecord = function (idapp, id) {
|
|||||||
|
|
||||||
const MyBacheca = mongoose.model('MyBacheca', MyBachecaSchema);
|
const MyBacheca = mongoose.model('MyBacheca', MyBachecaSchema);
|
||||||
|
|
||||||
MyBacheca.createIndexes((err) => {
|
MyBacheca.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MyBacheca };
|
module.exports = { MyBacheca };
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const mongoose = require('mongoose').set('debug', false)
|
const mongoose = require('mongoose').set('debug', false);
|
||||||
const Schema = mongoose.Schema;
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
const tools = require('../tools/general');
|
const tools = require('../tools/general');
|
||||||
@@ -6,90 +6,91 @@ const { ObjectId } = require('mongodb');
|
|||||||
|
|
||||||
const { MySchedaSchema, IDimensioni, IImg, IText, IAreaDiStampa } = require('../models/myscheda');
|
const { MySchedaSchema, IDimensioni, IImg, IText, IAreaDiStampa } = require('../models/myscheda');
|
||||||
|
|
||||||
|
|
||||||
mongoose.Promise = global.Promise;
|
mongoose.Promise = global.Promise;
|
||||||
mongoose.level = "F";
|
mongoose.level = 'F';
|
||||||
|
|
||||||
|
|
||||||
// Resolving error Unknown modifier: $pushAll
|
// Resolving error Unknown modifier: $pushAll
|
||||||
mongoose.plugin(schema => {
|
mongoose.plugin((schema) => {
|
||||||
schema.options.usePushEach = true
|
schema.options.usePushEach = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
const IElementiPagina = new Schema({
|
const IElementiPagina = new Schema({
|
||||||
|
isTemplate: Boolean,
|
||||||
|
linkIdTemplate: String,
|
||||||
|
name: String,
|
||||||
pagina: IDimensioni,
|
pagina: IDimensioni,
|
||||||
});
|
});
|
||||||
|
|
||||||
const myCard = new Schema(
|
const myCard = new Schema({
|
||||||
{
|
imagefile: String,
|
||||||
imagefile: String,
|
vers_img: Number,
|
||||||
vers_img: Number,
|
alt: String,
|
||||||
alt: String,
|
description: String,
|
||||||
description: String,
|
style: String,
|
||||||
style: String,
|
size: String,
|
||||||
size: String,
|
color: String,
|
||||||
color: String,
|
content: String,
|
||||||
content: String,
|
colorsub: String,
|
||||||
colorsub: String,
|
link: String,
|
||||||
link: String,
|
});
|
||||||
}
|
const animation = new Schema({
|
||||||
)
|
name: String,
|
||||||
const animation = new Schema(
|
clduration: String,
|
||||||
{
|
cldelay: String,
|
||||||
name: String,
|
timingtype: String,
|
||||||
clduration: String,
|
});
|
||||||
cldelay: String,
|
|
||||||
timingtype: String,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const elemText = new Schema(
|
const elemText = new Schema({
|
||||||
{
|
text: String,
|
||||||
text: String,
|
color: String,
|
||||||
color: String,
|
class: String,
|
||||||
class: String,
|
size: String,
|
||||||
size: String,
|
anim: animation,
|
||||||
anim: animation,
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
const catalogo = new Schema({
|
||||||
|
//++AddCATALOGO_FIELDS
|
||||||
|
idCatalogSel: { type: String },
|
||||||
|
productTypes: [{ type: Number }],
|
||||||
|
excludeproductTypes: [{ type: Number }],
|
||||||
|
editore: [{ type: String }],
|
||||||
|
argomenti: [{ type: String }],
|
||||||
|
idCollane: [{ type: String }],
|
||||||
|
idTipologia: [{ type: Number }],
|
||||||
|
idTipoFormato: [{ type: Number }],
|
||||||
|
sort_field: { type: String },
|
||||||
|
sort_dir: { type: Number },
|
||||||
|
pdf: { type: Boolean },
|
||||||
|
pdf_filename: { type: String },
|
||||||
|
printable: { type: Boolean },
|
||||||
|
indebug: { type: Boolean },
|
||||||
|
maxnumlibri: { type: Number },
|
||||||
|
showListaArgomenti: { type: Boolean },
|
||||||
|
showOnlyCatalogoPDF: { type: Boolean },
|
||||||
|
showListaCollane: { type: Boolean },
|
||||||
|
|
||||||
const catalogo = new Schema(
|
first_page: IDimensioni,
|
||||||
{
|
last_page: IDimensioni,
|
||||||
//++AddCATALOGO_FIELDS
|
areadistampa: IAreaDiStampa,
|
||||||
productTypes: [{ type: Number }],
|
|
||||||
excludeproductTypes: [{ type: Number }],
|
|
||||||
editore: [{ type: String }],
|
|
||||||
argomenti: [{ type: String }],
|
|
||||||
idCollane: [{ type: Number }],
|
|
||||||
sort_field: { type: String },
|
|
||||||
sort_dir: { type: Number },
|
|
||||||
pdf: { type: Boolean },
|
|
||||||
pdf_filename: { type: String },
|
|
||||||
printable: { type: Boolean },
|
|
||||||
indebug: { type: Boolean },
|
|
||||||
maxnumlibri: { type: Number },
|
|
||||||
|
|
||||||
first_page: IDimensioni,
|
print_isTemplate: Boolean,
|
||||||
last_page: IDimensioni,
|
print_linkIdTemplate: String,
|
||||||
areadistampa: IAreaDiStampa,
|
|
||||||
|
|
||||||
dimensioni_def: IElementiPagina,
|
dimensioni_def: IElementiPagina,
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
arrSchede: [
|
arrSchede: [
|
||||||
{
|
{
|
||||||
scheda: MySchedaSchema,
|
scheda: MySchedaSchema,
|
||||||
order: { type: Number },
|
order: { type: Number },
|
||||||
numPagineMax: { type: Number },
|
numPagineMax: { type: Number },
|
||||||
/*arrProdToShow: {
|
/*arrProdToShow: {
|
||||||
type: [[mongoose.Schema.Types.Mixed]], // Definizione tipo
|
type: [[mongoose.Schema.Types.Mixed]], // Definizione tipo
|
||||||
select: false // Imposta il campo come non selezionabile
|
select: false // Imposta il campo come non selezionabile
|
||||||
},*/
|
},*/
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
}
|
});
|
||||||
);
|
|
||||||
|
|
||||||
const MyElemSchema = new Schema({
|
const MyElemSchema = new Schema({
|
||||||
idapp: {
|
idapp: {
|
||||||
@@ -98,9 +99,9 @@ const MyElemSchema = new Schema({
|
|||||||
path: {
|
path: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
oldpath: {
|
/*oldpath: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},*/
|
||||||
idPage: { type: String },
|
idPage: { type: String },
|
||||||
type: {
|
type: {
|
||||||
type: Number,
|
type: Number,
|
||||||
@@ -233,25 +234,25 @@ const MyElemSchema = new Schema({
|
|||||||
list: [
|
list: [
|
||||||
{
|
{
|
||||||
imagefile: {
|
imagefile: {
|
||||||
type: String
|
type: String,
|
||||||
},
|
},
|
||||||
vers_img: {
|
vers_img: {
|
||||||
type: Number,
|
type: Number,
|
||||||
},
|
},
|
||||||
order: {
|
order: {
|
||||||
type: Number
|
type: Number,
|
||||||
},
|
},
|
||||||
alt: {
|
alt: {
|
||||||
type: String
|
type: String,
|
||||||
},
|
},
|
||||||
description: {
|
description: {
|
||||||
type: String
|
type: String,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
date_created: {
|
date_created: {
|
||||||
type: Date,
|
type: Date,
|
||||||
default: Date.now
|
default: Date.now,
|
||||||
},
|
},
|
||||||
date_updated: {
|
date_updated: {
|
||||||
type: Date,
|
type: Date,
|
||||||
@@ -267,8 +268,10 @@ MyElemSchema.pre('save', async function (next) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
MyElemSchema.statics.getFieldsForSearch = function () {
|
MyElemSchema.statics.getFieldsForSearch = function () {
|
||||||
return [{ field: 'title', type: tools.FieldType.string },
|
return [
|
||||||
{ field: 'content', type: tools.FieldType.string }]
|
{ field: 'title', type: tools.FieldType.string },
|
||||||
|
{ field: 'content', type: tools.FieldType.string },
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
MyElemSchema.statics.executeQueryTable = function (idapp, params, user) {
|
MyElemSchema.statics.executeQueryTable = function (idapp, params, user) {
|
||||||
@@ -288,7 +291,7 @@ MyElemSchema.statics.SetIdPageInsteadThePah = async function (idapp) {
|
|||||||
|
|
||||||
// Utilizza una mappa per accoppiare i path con i loro Id
|
// Utilizza una mappa per accoppiare i path con i loro Id
|
||||||
const pathToIdMap = {};
|
const pathToIdMap = {};
|
||||||
pages.forEach(page => {
|
pages.forEach((page) => {
|
||||||
pathToIdMap[page.path] = page._id; // Mappa il path all'ID del documento MyPage
|
pathToIdMap[page.path] = page._id; // Mappa il path all'ID del documento MyPage
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -303,7 +306,7 @@ MyElemSchema.statics.SetIdPageInsteadThePah = async function (idapp) {
|
|||||||
idPage: id,
|
idPage: id,
|
||||||
oldpath: path,
|
oldpath: path,
|
||||||
},
|
},
|
||||||
$unset: { path: "" } // Rimuove il campo path
|
$unset: { path: '' }, // Rimuove il campo path
|
||||||
} // Imposta IdPage all'ID del documento corrispondente
|
} // Imposta IdPage all'ID del documento corrispondente
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -312,7 +315,7 @@ MyElemSchema.statics.SetIdPageInsteadThePah = async function (idapp) {
|
|||||||
if (false) {
|
if (false) {
|
||||||
// Utilizza una mappa per accoppiare i path con i loro Id
|
// Utilizza una mappa per accoppiare i path con i loro Id
|
||||||
const pathToIdMap2 = {};
|
const pathToIdMap2 = {};
|
||||||
pages.forEach(page => {
|
pages.forEach((page) => {
|
||||||
pathToIdMap2[page.path] = page._id.toString(); // Mappa il path all'ID del documento MyPage
|
pathToIdMap2[page.path] = page._id.toString(); // Mappa il path all'ID del documento MyPage
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -321,7 +324,7 @@ MyElemSchema.statics.SetIdPageInsteadThePah = async function (idapp) {
|
|||||||
await MyElem.updateMany(
|
await MyElem.updateMany(
|
||||||
{ oldpath: path }, // Condizione per aggiornare dove il path corrisponde
|
{ oldpath: path }, // Condizione per aggiornare dove il path corrisponde
|
||||||
{
|
{
|
||||||
$unset: { idPage: "" } // Rimuove il campo path
|
$unset: { idPage: '' }, // Rimuove il campo path
|
||||||
} // Imposta IdPage all'ID del documento corrispondente
|
} // Imposta IdPage all'ID del documento corrispondente
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -330,14 +333,14 @@ MyElemSchema.statics.SetIdPageInsteadThePah = async function (idapp) {
|
|||||||
await MyElem.updateMany(
|
await MyElem.updateMany(
|
||||||
{ oldpath: oldpath }, // Condizione per aggiornare dove il path corrisponde
|
{ oldpath: oldpath }, // Condizione per aggiornare dove il path corrisponde
|
||||||
{
|
{
|
||||||
$set: { idPage: id }
|
$set: { idPage: id },
|
||||||
} // Imposta IdPage all'ID del documento corrispondente
|
} // Imposta IdPage all'ID del documento corrispondente
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const pathToIdMap2 = {};
|
const pathToIdMap2 = {};
|
||||||
pages.forEach(page => {
|
pages.forEach((page) => {
|
||||||
pathToIdMap2[page.path] = page._id.toString(); // Mappa il path all'ID del documento MyPage
|
pathToIdMap2[page.path] = page._id.toString(); // Mappa il path all'ID del documento MyPage
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -346,26 +349,23 @@ MyElemSchema.statics.SetIdPageInsteadThePah = async function (idapp) {
|
|||||||
{ idapp },
|
{ idapp },
|
||||||
{ oldpath: oldpath }, // Condizione per aggiornare dove il path corrisponde
|
{ oldpath: oldpath }, // Condizione per aggiornare dove il path corrisponde
|
||||||
{
|
{
|
||||||
$set: { idPage: id }
|
$set: { idPage: id },
|
||||||
} // Imposta IdPage all'ID del documento corrispondente
|
} // Imposta IdPage all'ID del documento corrispondente
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
console.log('Aggiornamenti effettuati con successo.');
|
console.log('Aggiornamenti effettuati con successo.');
|
||||||
return 'Aggiornamenti effettuati con successo.';
|
return 'Aggiornamenti effettuati con successo.';
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Errore durante l\'aggiornamento:', error);
|
console.error("Errore durante l'aggiornamento:", error);
|
||||||
return 'Errore durante l\'aggiornamento:', error;
|
return "Errore durante l'aggiornamento:", error;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MyElemSchema.statics.deleteAllFromThisPage = async function (id) {
|
MyElemSchema.statics.deleteAllFromThisPage = async function (id) {
|
||||||
const MyElem = this;
|
const MyElem = this;
|
||||||
|
|
||||||
return MyElem.deleteMany({ idPage: id });
|
return MyElem.deleteMany({ idPage: id });
|
||||||
|
|
||||||
};
|
};
|
||||||
MyElemSchema.statics.findAllIdApp = async function (idapp) {
|
MyElemSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
const MyElem = this;
|
const MyElem = this;
|
||||||
@@ -393,17 +393,16 @@ MyElemSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
async function deleteOldMyElems(idapp) {
|
async function deleteOldMyElems(idapp) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
const { MyPage } = require('../models/mypage');
|
const { MyPage } = require('../models/mypage');
|
||||||
|
|
||||||
// 1. Recupera tutti gli _id dalle pagine
|
// 1. Recupera tutti gli _id dalle pagine
|
||||||
const existingPages = await MyPage.find({idapp}).select('_id').lean();
|
const existingPages = await MyPage.find({ idapp }).select('_id').lean();
|
||||||
const existingPageIds = existingPages.map(page => page._id.toString());
|
const existingPageIds = existingPages.map((page) => page._id.toString());
|
||||||
|
|
||||||
// 2. Trova gli MyElem che hanno idPage non esistenti in MyPage
|
// 2. Trova gli MyElem che hanno idPage non esistenti in MyPage
|
||||||
const elemsToDelete = await MyElem.find({
|
const elemsToDelete = await MyElem.find({
|
||||||
idapp,
|
idapp,
|
||||||
idPage: { $nin: existingPageIds }
|
idPage: { $nin: existingPageIds },
|
||||||
});
|
});
|
||||||
|
|
||||||
if (elemsToDelete.length > 0) {
|
if (elemsToDelete.length > 0) {
|
||||||
@@ -418,28 +417,38 @@ async function deleteOldMyElems(idapp) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trova tutte le schede template associate a pagine di idapp.
|
||||||
|
* Restituisce un array di ogge tti con le seguenti proprietà:
|
||||||
|
* - scheda: l'oggetto scheda, con proprietà come _id, name, isTemplate
|
||||||
|
* - idPageOrig: l'idPage originale associata alla scheda
|
||||||
|
*
|
||||||
|
* Se idapp === '18', stampa i duplicati e i titoli delle pagine
|
||||||
|
* e cancella i documenti di MyElem con idPage non esistenti in MyPage
|
||||||
|
*
|
||||||
|
* @param {string} idapp ID dell'applicazione
|
||||||
|
* @returns {Promise<IMyElemTemplate[]>} Array di oggetti scheda con idPageOrig
|
||||||
|
*/
|
||||||
MyElemSchema.statics.findallSchedeTemplate = async function (idapp) {
|
MyElemSchema.statics.findallSchedeTemplate = async function (idapp) {
|
||||||
const MyElem = this;
|
const MyElem = this;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
const { MyPage } = require('../models/mypage');
|
const { MyPage } = require('../models/mypage');
|
||||||
|
|
||||||
const ris = await MyElem.find({ idapp }).lean();
|
const ris = await MyElem.find({ idapp }).lean();
|
||||||
|
|
||||||
const schedeTemplate = ris.flatMap(elem =>
|
const schedeTemplate = ris.flatMap((elem) =>
|
||||||
elem.catalogo && elem.catalogo.arrSchede ?
|
elem.catalogo && elem.catalogo.arrSchede
|
||||||
elem.catalogo.arrSchede
|
? elem.catalogo.arrSchede
|
||||||
.filter(scheda => scheda.scheda?.isTemplate)
|
.filter((scheda) => scheda.scheda?.isTemplate)
|
||||||
.map(scheda => ({
|
.map((scheda) => ({
|
||||||
...scheda, // mantieni i dati originali della scheda
|
...scheda, // mantieni i dati originali della scheda
|
||||||
idPageOrig: elem.idPage // aggiungi l'idPage
|
idPageOrig: elem.idPage, // aggiungi l'idPage
|
||||||
}))
|
}))
|
||||||
: []
|
: []
|
||||||
);
|
);
|
||||||
|
|
||||||
if (idapp === '18') {
|
if (idapp === '18') {
|
||||||
|
|
||||||
const duplicateIds = schedeTemplate.reduce((acc, scheda) => {
|
const duplicateIds = schedeTemplate.reduce((acc, scheda) => {
|
||||||
const id = scheda.scheda._id; // Ottieni l'ID della scheda
|
const id = scheda.scheda._id; // Ottieni l'ID della scheda
|
||||||
if (!acc[id]) {
|
if (!acc[id]) {
|
||||||
@@ -455,7 +464,7 @@ MyElemSchema.statics.findallSchedeTemplate = async function (idapp) {
|
|||||||
.map(([id, pages]) => ({ id, pages })); // Ottieni ID e pagine corrispondenti
|
.map(([id, pages]) => ({ id, pages })); // Ottieni ID e pagine corrispondenti
|
||||||
|
|
||||||
// Recupera i dettagli delle pagine
|
// Recupera i dettagli delle pagine
|
||||||
const pageIds = duplicates.flatMap(dup => dup.pages); // Estrai tutti gli idPage
|
const pageIds = duplicates.flatMap((dup) => dup.pages); // Estrai tutti gli idPage
|
||||||
const pages = await MyPage.find({ idapp, _id: { $in: pageIds } }).lean();
|
const pages = await MyPage.find({ idapp, _id: { $in: pageIds } }).lean();
|
||||||
|
|
||||||
// Crea una mappatura tra idPage e title
|
// Crea una mappatura tra idPage e title
|
||||||
@@ -465,19 +474,18 @@ MyElemSchema.statics.findallSchedeTemplate = async function (idapp) {
|
|||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
// Associa i titoli delle pagine agli ID duplicati
|
// Associa i titoli delle pagine agli ID duplicati
|
||||||
const resultWithTitles = duplicates.map(dup => ({
|
const resultWithTitles = duplicates.map((dup) => ({
|
||||||
id: dup.id,
|
id: dup.id,
|
||||||
pages: dup.pages.map(_id => ({
|
pages: dup.pages.map((_id) => ({
|
||||||
_id,
|
_id,
|
||||||
title: pageMap[_id] || 'Titolo non trovato' // Usa la mappatura per trovare il titolo
|
title: pageMap[_id] || 'Titolo non trovato', // Usa la mappatura per trovare il titolo
|
||||||
}))
|
})),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if (resultWithTitles.length > 0) {
|
if (resultWithTitles.length > 0) {
|
||||||
console.log('Duplicati e titoli delle pagine:', JSON.stringify(resultWithTitles, null, 2));
|
console.log('Duplicati e titoli delle pagine:', JSON.stringify(resultWithTitles, null, 2));
|
||||||
await deleteOldMyElems(idapp);
|
// await deleteOldMyElems(idapp);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return schedeTemplate;
|
return schedeTemplate;
|
||||||
@@ -486,35 +494,46 @@ MyElemSchema.statics.findallSchedeTemplate = async function (idapp) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Ricerca tra tutte le schede, contenute in catalogo, se esiste un nome di template uguale,
|
/**
|
||||||
// se non lo trova allora è quello giusto per crearne uno nuovo
|
* Ricerca tra tutte le schede, contenute in catalogo, se esiste un nome di template uguale,
|
||||||
|
* se non lo trova allora è quello giusto per crearne uno nuovo
|
||||||
|
*
|
||||||
|
* @param {string} idapp - ID dell'app
|
||||||
|
* @param {string} idPageOrig - ID della pagina originale
|
||||||
|
* @param {string} nomeTemplate - Nome del template
|
||||||
|
*
|
||||||
|
* @returns {string} Il nome del template libero
|
||||||
|
*/
|
||||||
MyElemSchema.statics.getNewFreeNameTemplate = async function (idapp, idPageOrig, nomeTemplate) {
|
MyElemSchema.statics.getNewFreeNameTemplate = async function (idapp, idPageOrig, nomeTemplate) {
|
||||||
const MyElem = this;
|
const MyElem = this;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Trova tutti gli elementi che hanno un template con lo stesso nome
|
||||||
const ris = await MyElem.find(
|
const ris = await MyElem.find(
|
||||||
{
|
{
|
||||||
idapp,
|
idapp,
|
||||||
'catalogo.arrSchede.scheda.isTemplate': true,
|
'catalogo.arrSchede.scheda.isTemplate': true,
|
||||||
'catalogo.arrSchede.scheda.idPage': { $ne: idPageOrig }
|
'catalogo.arrSchede.scheda.idPage': { $ne: idPageOrig },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'catalogo.arrSchede.scheda.name': 1,
|
'catalogo.arrSchede.scheda.name': 1,
|
||||||
'catalogo.arrSchede.scheda.isTemplate': 1,
|
'catalogo.arrSchede.scheda.isTemplate': 1,
|
||||||
'catalogo.arrSchede.scheda.isPagIntro': 1,
|
'catalogo.arrSchede.scheda.isPagIntro': 1,
|
||||||
'catalogo.arrSchede.scheda.idPage': 1
|
'catalogo.arrSchede.scheda.idPage': 1,
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Recupera i nomi dei template già esistenti
|
||||||
const existingNames = new Set(
|
const existingNames = new Set(
|
||||||
ris.flatMap(elem =>
|
ris.flatMap(
|
||||||
elem.catalogo?.arrSchede?.filter(scheda =>
|
(elem) =>
|
||||||
scheda.scheda?.isTemplate &&
|
elem.catalogo?.arrSchede
|
||||||
scheda.scheda?.idPage !== idPageOrig
|
?.filter((scheda) => scheda.scheda?.isTemplate && scheda.scheda?.idPage !== idPageOrig)
|
||||||
)
|
.map((scheda) => scheda.scheda?.name) || []
|
||||||
.map(scheda => scheda.scheda?.name) || []
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Crea un nuovo nome di template univoco
|
||||||
let ind = 2;
|
let ind = 2;
|
||||||
let newNameTemplate;
|
let newNameTemplate;
|
||||||
|
|
||||||
@@ -532,8 +551,10 @@ MyElemSchema.statics.getNewFreeNameTemplate = async function (idapp, idPageOrig,
|
|||||||
|
|
||||||
const MyElem = mongoose.model('MyElem', MyElemSchema);
|
const MyElem = mongoose.model('MyElem', MyElemSchema);
|
||||||
|
|
||||||
MyElem.createIndexes((err) => {
|
MyElem.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => {})
|
||||||
});
|
.catch((err) => {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
|
||||||
module.exports = { MyElem };
|
module.exports = { MyElem };
|
||||||
|
|||||||
@@ -276,8 +276,9 @@ if (tools.INITDB_FIRSTIME) {
|
|||||||
|
|
||||||
const MyEvent = mongoose.model('MyEvent', MyEventSchema);
|
const MyEvent = mongoose.model('MyEvent', MyEventSchema);
|
||||||
|
|
||||||
MyEvent.createIndexes((err) => {
|
MyEvent.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = {MyEvent};
|
module.exports = {MyEvent};
|
||||||
|
|||||||
@@ -367,8 +367,9 @@ MyGoodSchema.statics.getProject = function () {
|
|||||||
|
|
||||||
const MyGood = mongoose.model('MyGood', MyGoodSchema);
|
const MyGood = mongoose.model('MyGood', MyGoodSchema);
|
||||||
|
|
||||||
MyGood.createIndexes((err) => {
|
MyGood.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MyGood };
|
module.exports = { MyGood };
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user