Compare commits
104 Commits
1.1.17
...
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 | ||
|
|
757bf44c68 | ||
|
|
57679fe649 | ||
|
|
f8de205cf6 | ||
|
|
d77f9381e5 | ||
|
|
b643c7cdc3 | ||
|
|
f674791dbc | ||
|
|
3e9ab0af53 | ||
|
|
2f92dfe5b0 | ||
|
|
41d5f562ec | ||
|
|
341b4b8ec7 | ||
|
|
b56e25d1fa | ||
|
|
332b8992a9 | ||
|
|
5ba86e3641 |
16
.env.dev.pcb
16
.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
|
||||||
DEBUG=0
|
VITE_DEBUG=0
|
||||||
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=""
|
||||||
@@ -43,4 +40,7 @@ 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
|
||||||
|
DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7"
|
||||||
|
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
|
||||||
DEBUG=0
|
VITE_DEBUG=0
|
||||||
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
|
||||||
@@ -40,4 +37,5 @@ FTPSERVER_USER=ftpusrsrv_
|
|||||||
FTPSERVER_PWD=ftpmypwd@1A_
|
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"}]
|
||||||
|
DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7"
|
||||||
|
|||||||
@@ -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
|
||||||
DEBUG=0
|
VITE_DEBUG=0
|
||||||
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
|
||||||
@@ -40,4 +37,5 @@ FTPSERVER_USER=ftpusrsrv_
|
|||||||
FTPSERVER_PWD=ftpmypwd@1A_
|
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"}]
|
||||||
|
DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7"
|
||||||
|
|||||||
@@ -8,19 +8,21 @@ 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
|
||||||
DEBUG=0
|
VITE_DEBUG=0
|
||||||
LOCALE=0
|
LOCALE=0
|
||||||
DELAY_SENDEMAIL=1000
|
DELAY_SENDEMAIL=1000
|
||||||
VAPI_KEY_SUBJECT="mailto:paolo@freeplanet.app"
|
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=cert.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=1
|
PROD=1
|
||||||
|
|||||||
@@ -10,22 +10,23 @@ 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
|
||||||
DEBUG=0
|
VITE_DEBUG=0
|
||||||
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="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=cert.pem
|
PATH_SERVER_CRT=fullchain.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
|
||||||
PROD=1
|
PROD=1
|
||||||
PROJECT_DESCR_MAIN='__PROJECTS'
|
PROJECT_DESCR_MAIN='__PROJECTS'
|
||||||
SECRK=iUUb38v23jjDFaosWj92axkBOXCQ
|
SECRK=iUUb38v23jjDFaosWj92axkBOXCQ
|
||||||
@@ -33,8 +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"
|
||||||
|
API_KEY_MSSQL="m68yADSr123MIVIDA@154$DSAGVOK"
|
||||||
@@ -7,22 +7,23 @@ 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
|
||||||
DEBUG=0
|
VITE_DEBUG=0
|
||||||
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=cert.pem
|
PATH_SERVER_CRT=fullchain.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
|
||||||
PROD=1
|
PROD=1
|
||||||
PROJECT_DESCR_MAIN='__PROJECTS'
|
PROJECT_DESCR_MAIN='__PROJECTS'
|
||||||
SECRK=iUUb38v23jjDFaosWj92axkBOXCQ
|
SECRK=iUUb38v23jjDFaosWj92axkBOXCQ
|
||||||
@@ -30,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,19 +11,21 @@ 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
|
||||||
DEBUG=0
|
VITE_DEBUG=0
|
||||||
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="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=cert.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
|
||||||
@@ -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
|
||||||
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=cert.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
|
||||||
|
|||||||
@@ -13,15 +13,15 @@ AUTH_MONGODB=1
|
|||||||
MONGODB_USER=admin
|
MONGODB_USER=admin
|
||||||
MONGODB_PWD=mypwadmin@1A
|
MONGODB_PWD=mypwadmin@1A
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
DEBUG=0
|
VITE_DEBUG=0
|
||||||
LOCALE=0
|
LOCALE=0
|
||||||
DELAY_SENDEMAIL=1000
|
DELAY_SENDEMAIL=1000
|
||||||
VAPI_KEY_SUBJECT="mailto:paolo@freeplanet.app"
|
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=cert.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
|
||||||
|
|||||||
1290
.yarn/releases/yarn-1.22.22.cjs
vendored
1290
.yarn/releases/yarn-1.22.22.cjs
vendored
File diff suppressed because it is too large
Load Diff
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.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.DEBUG) {
|
|
||||||
mycron();
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
|
|
||||||
// Cron every X minutes
|
|
||||||
cron.schedule('*/60 * * * *', async () => {
|
|
||||||
if (!process.env.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
|
|
||||||
170
filelog.txt
170
filelog.txt
@@ -1,170 +1,8 @@
|
|||||||
|
|
||||||
Ven 02/12 ORE 11:16: USER [surya1977]: 💫🍚 progetto riso: 🍚💫
|
Dom 02/03 ORE 16:32: USER [surya1977]: ciao
|
||||||
rete italiana di scambio orizzontale
|
|
||||||
siamo una rete di comunità consapevoli, basata sul sostegno reciproco, la fiducia, la condivisione e l'ascolto.
|
|
||||||
coltiviamo terreno fertile per creare, in armonia con la natura, un mondo di collettività libere e autosufficienti, attraverso un circuito di scambio di esperienze umane, beni e servizi.
|
|
||||||
|
|
||||||
1️⃣ 👉🏻 entra nel canale progetto riso:
|
Lun 10/03 ORE 15:52: USER [surya1977]: ciao
|
||||||
sul post fissato in alto, troverai tutte le info sul progetto e su come entrare nel gruppo della tua provincia.
|
|
||||||
|
|
||||||
2️⃣ 👉🏻 registrati alla app di riso (anche da pc), dove potrai:
|
Lun 10/03 ORE 15:56: USER [surya1977]: ciao
|
||||||
|
|
||||||
✅ inserire i tuoi talenti e ciò che sai fare, offrendo beni, servizi, ospitalità, eventi.
|
Lun 07/07 ORE 10:45: USER [surya1977]: ciao
|
||||||
✅ entrare nel circuito della tua città per condividere e scambiare di persona.
|
|
||||||
✅ utilizzare il ris come strumento di scambio (moneta virtuale) tra i membri della comunità territoriale della tua provincia.
|
|
||||||
|
|
||||||
👉🏻 🔥 clicca qui per registrarti su riso app
|
|
||||||
|
|
||||||
entrando sul bot riso premi su avvia (o start) e segui le istruzioni
|
|
||||||
|
|
||||||
3️⃣ condividi il progetto ai tuoi amici ed aiuta così a far crescere questa rete e crescere insieme 💚 partecipa al cambiamento. riso sei anche tu.
|
|
||||||
se hai bisogno di aiuto chiedi in questa chat: 👉🏻 chat riso help
|
|
||||||
|
|
||||||
Gio 05/01 ORE 19:28: USER [paoloar77]: vai al sito
|
|
||||||
|
|
||||||
Gio 05/01 ORE 19:28: USER [paoloar77]: link da condividere
|
|
||||||
|
|
||||||
Gio 16/02 ORE 18:14: USER [paoloar77]: vai al sito
|
|
||||||
|
|
||||||
Mar 06/06 ORE 19:39: USER [paoloar77]: ciaooooooooooooooooo
|
|
||||||
|
|
||||||
Mar 06/06 ORE 19:54: USER [paoloar77]: dasjdalksjdasdklasjkldasjlkdjasl
|
|
||||||
|
|
||||||
Sab 17/06 ORE 20:03: USER [paoloar77]: pro v adsasdasdaksdas
|
|
||||||
|
|
||||||
Dom 18/06 ORE 19:22: USER [paoloar77]: /start inv
|
|
||||||
|
|
||||||
Dom 18/06 ORE 19:42: USER [paoloar77]: /start inv
|
|
||||||
|
|
||||||
Dom 18/06 ORE 19:58: USER [paoloar77]: /start inv
|
|
||||||
|
|
||||||
Dom 18/06 ORE 19:59: USER [paoloar77]: /start inv
|
|
||||||
|
|
||||||
Dom 18/06 ORE 19:59: USER [paoloar77]: /start inv
|
|
||||||
|
|
||||||
Ven 23/06 ORE 14:08: USER [paoloar77]: link da condividere
|
|
||||||
|
|
||||||
Sab 30/09 ORE 00:21: USER [SuryaArena]: vai al sito
|
|
||||||
|
|
||||||
Sab 30/09 ORE 00:32: USER [SuryaArena]: vai al sito
|
|
||||||
|
|
||||||
Gio 12/10 ORE 11:11: USER [paoloar77]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 11:48: USER [paoloar77]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:07: USER [SuryaArena]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:07: USER [SuryaArena]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:09: USER [SuryaArena]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:10: USER [SuryaArena]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:10: USER [SuryaArena]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:13: USER [SuryaArena]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:14: USER [SuryaArena]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:16: USER [SuryaArena]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:21: USER [SuryaArena]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:33: USER [paoloar77]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:33: USER [SuryaArena]: ciao
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:33: USER [SuryaArena]: prova
|
|
||||||
|
|
||||||
Gio 12/10 ORE 12:45: USER [SuryaArena]: bottone
|
|
||||||
|
|
||||||
Gio 12/10 ORE 14:49: USER [paoloar77]: bottone
|
|
||||||
|
|
||||||
Gio 12/10 ORE 14:49: USER [paoloar77]: bottone
|
|
||||||
|
|
||||||
Gio 12/10 ORE 14:49: USER [paoloar77]: bottone
|
|
||||||
|
|
||||||
Gio 12/10 ORE 14:52: USER [paoloar77]: bottone
|
|
||||||
|
|
||||||
Gio 12/10 ORE 14:57: USER [paoloar77]: bottone
|
|
||||||
|
|
||||||
Gio 12/10 ORE 15:06: USER [paoloar77]: bottone
|
|
||||||
|
|
||||||
Ven 13/10 ORE 11:05: USER [SuryaArena]: bottone
|
|
||||||
|
|
||||||
Ven 13/10 ORE 11:40: USER [SuryaArena]: bottone
|
|
||||||
|
|
||||||
Dom 17/12 ORE 15:38: USER [admin]: prova
|
|
||||||
|
|
||||||
Dom 17/12 ORE 16:18: USER [admin]: vai al sito
|
|
||||||
|
|
||||||
Dom 17/12 ORE 16:19: USER [admin]: vai al sito
|
|
||||||
|
|
||||||
Dom 17/12 ORE 16:19: USER [admin]: il mio profilo
|
|
||||||
|
|
||||||
Dom 17/12 ORE 16:19: USER [admin]: prova
|
|
||||||
|
|
||||||
Dom 17/12 ORE 16:19: USER [admin]: link da condividere
|
|
||||||
|
|
||||||
Sab 30/12 ORE 20:06: USER [admin]: gruppo di acquisto per le arance:
|
|
||||||
|
|
||||||
produttore:
|
|
||||||
🍊sicilia frutta express (catania)
|
|
||||||
|
|
||||||
la piccola azienda a conduzione familiare di giovanni si trova in provincia di catania (sicilia), i frutti vengono prodotti rispettando i principi della biodinamica infatti non viene utilizzato nulla di chimico (niente irrorazioni) e la concimazione avviene tramite concimi naturali (letame).
|
|
||||||
|
|
||||||
⚠️ offerta sconto valida solo fino al 3 gennaio 2024, raggiungendo 100 kg totali di ordini di arance:
|
|
||||||
i prezzi sono compresi di spese di spedizione e di gestione.
|
|
||||||
|
|
||||||
🍊 arance tarocco spremuta: 1,20 € / kg
|
|
||||||
|
|
||||||
🥑 avocado: 7,80 € / kg
|
|
||||||
|
|
||||||
🍋 limoni: 2,40 € / kg
|
|
||||||
|
|
||||||
👉🏻 entra sul gruppo telegram piu che buono
|
|
||||||
|
|
||||||
per le prenotazioni potete registratevi sul nuovo sito:
|
|
||||||
👉🏻 piu che buono - gas e bottega (piuchebuono.app)
|
|
||||||
|
|
||||||
come funziona:
|
|
||||||
- registratevi su piuchebuono.app, verificate la email.
|
|
||||||
- accedete e poi cliccate su "gruppo di acquisto".
|
|
||||||
- cliccate sul carrello verde 🛒 per aggiungere i kg che desiderate.
|
|
||||||
- per finire: cliccare su "procedi all'ordine" e confermate.
|
|
||||||
|
|
||||||
Dom 21/01 ORE 19:00: USER [paoloar77]: 👉🏻 indietro
|
|
||||||
|
|
||||||
Mar 23/04 ORE 22:31: USER [paoloar77]: ciao
|
|
||||||
|
|
||||||
Mer 24/04 ORE 20:45: USER [paoloar77]: invia a paolo
|
|
||||||
|
|
||||||
Mer 24/04 ORE 20:45: USER [paoloar77]: 📨 invia a paolo
|
|
||||||
|
|
||||||
Mer 24/04 ORE 20:58: USER [paoloar77]: grass e prova italic
|
|
||||||
|
|
||||||
Mer 24/04 ORE 21:19: USER [paoloar77]: 👍 si
|
|
||||||
|
|
||||||
Mer 24/04 ORE 22:02: USER [paoloar77]: ✅ la regolarizzazione può avv
|
|
||||||
|
|
||||||
Mer 24/04 ORE 22:15: USER [paoloar77]: ❗️importante❗️
|
|
||||||
|
|
||||||
💚🍚 cari membri dei circuiti ris,
|
|
||||||
quando siete entrati nel vostro circuito territoriale, avete dichiarato di avere letto e approvato il regolamento di funzionamento dei circuiti ris.
|
|
||||||
|
|
||||||
📖 leggi qui il regolamento (https://riso.app/regolamento)
|
|
||||||
|
|
||||||
il gruppo dei facilitatori territoriali di riso ha individuato un punto che necessita di chiarimenti, per rendere più esplicito un meccanismo già presente nel testo stesso. propone dunque di aggiungere una nota esplicativa (vedi asterisco *) alla seguente frase del regolamento (indicata in corsivo):
|
|
||||||
|
|
||||||
➡️ "… ciascun detentore di un saldo negativo concorda che la sua esposizione funge da garanzia della quantità di ris equivalenti circolanti nel circuito e che può essere chiamato a regolarizzare con equivalente pagamento in euro * , entro un lasso di tempo ragionevolmente adeguato, nel caso in cui: la comunità, in accordo con il gruppo tecnico, deliberi il rientro di alcune posizioni con decisione motivata; l’utente decida di uscire per motivi personali; il circuito chiuda, per decisione deliberata o per motivi di forza maggiore.”
|
|
||||||
|
|
||||||
✅ * la regolarizzazione può avvenire con equivalente valore in beni e servizi, oppure, in ultima istanza, con pagamento in euro.
|
|
||||||
|
|
||||||
📣 invitiamo tutti a prendere visione della proposta, e ad esprimere eventuali osservazioni nel gruppo territoriale, oppure come commento a questo stesso post, pubblicato sul canale progetto riso, entro il giorno 5 maggio
|
|
||||||
|
|
||||||
https://t.me/riso_canale/739
|
|
||||||
|
|
||||||
in attesa di riscontri, salutiamo! 🍚💚
|
|
||||||
il gruppo dei facilitatori territoriali riso
|
|
||||||
|
|
||||||
Mer 03/07 ORE 13:13: USER [paoloar77]: 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
|
||||||
@@ -835,4 +835,6 @@ https://t.me/riso_canale/739
|
|||||||
In attesa di riscontri, salutiamo! 🍚💚
|
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)!
|
||||||
67
logtrans.txt
67
logtrans.txt
@@ -418,4 +418,69 @@ 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]
|
||||||
99
package.json
99
package.json
@@ -13,76 +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": {
|
"author": "Surya",
|
||||||
"node": "^18.19.0"
|
|
||||||
},
|
|
||||||
"author": "Paolo Arena",
|
|
||||||
"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.0.2",
|
"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.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",
|
||||||
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const readline = require('readline');
|
const readline = require('readline');
|
||||||
const {google} = require('googleapis');
|
const {google} = require('googleapis');
|
||||||
var FILE = require('./file');
|
var FILE = require('./file');
|
||||||
|
|||||||
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);
|
||||||
|
|
||||||
|
|||||||
27
src/server/config/database-sqlsrv.js.off
Normal file
27
src/server/config/database-sqlsrv.js.off
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
require("dotenv").config();
|
||||||
|
const { Sequelize } = require("sequelize");
|
||||||
|
|
||||||
|
const sequelize = new Sequelize(process.env.DB_DATABASE_SQLSRVTEST, process.env.DB_USERNAME_SQLSRVTEST, process.env.DB_PASSWORD_SQLSRVTEST, {
|
||||||
|
host: process.env.DB_HOST_SQLSRVTEST || "localhost",
|
||||||
|
port: process.env.DB_PORT_SQLSRVTEST || 1433,
|
||||||
|
dialect: "mssql",
|
||||||
|
dialectOptions: {
|
||||||
|
options: {
|
||||||
|
encrypt: false, // Cambia a true se usi SSL
|
||||||
|
},
|
||||||
|
},
|
||||||
|
logging: false, // Disabilita il logging delle query
|
||||||
|
});
|
||||||
|
|
||||||
|
async function testConnection() {
|
||||||
|
try {
|
||||||
|
await sequelize.authenticate();
|
||||||
|
console.log("Connessione al database riuscita!");
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Errore nella connessione al database:", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
testConnection();
|
||||||
|
|
||||||
|
module.exports = sequelize;
|
||||||
1021
src/server/controllers/articleController.js
Normal file
1021
src/server/controllers/articleController.js
Normal file
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,5 +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 !",
|
||||||
"Good: %": "Good: %"
|
"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: %",
|
||||||
|
"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; });
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,12 @@ mongoose.plugin(schema => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const CatAISchema = new Schema({
|
const CatAISchema = new Schema({
|
||||||
_id: {
|
|
||||||
type: Number,
|
|
||||||
},
|
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
|
idapp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
img: {
|
img: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
@@ -47,15 +47,16 @@ CatAISchema.statics.executeQueryTable = function (idapp, params) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
CatAISchema.statics.findAllIdApp = async function (idapp) {
|
CatAISchema.statics.findAllIdApp = async function (idapp) {
|
||||||
const myfind = {};
|
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;
|
||||||
|
|||||||
325
src/server/models/catalog.js
Executable file
325
src/server/models/catalog.js
Executable file
@@ -0,0 +1,325 @@
|
|||||||
|
const mongoose = require('mongoose').set('debug', false);
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const tools = require('../tools/general');
|
||||||
|
const { ObjectId } = require('mongodb');
|
||||||
|
|
||||||
|
const { IImg } = require('../models/myscheda');
|
||||||
|
|
||||||
|
mongoose.Promise = global.Promise;
|
||||||
|
mongoose.level = 'F';
|
||||||
|
|
||||||
|
// Resolving error Unknown modifier: $pushAll
|
||||||
|
mongoose.plugin((schema) => {
|
||||||
|
schema.options.usePushEach = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
const CatalogSchema = new Schema({
|
||||||
|
idapp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
active: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
index: true,
|
||||||
|
},
|
||||||
|
foto_collana: IImg,
|
||||||
|
|
||||||
|
idCollane: [
|
||||||
|
{
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
idTipoFormato: [
|
||||||
|
{
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
argomenti: [
|
||||||
|
{
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
condition_andor: {
|
||||||
|
type: Number,
|
||||||
|
default: 0,
|
||||||
|
},
|
||||||
|
|
||||||
|
editore: [{ type: String }],
|
||||||
|
editore_escludi: [{ type: String }],
|
||||||
|
|
||||||
|
descr_introduttiva: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
idPageAssigned: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
referenti: [
|
||||||
|
{
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
disattiva_link_immagini: Boolean,
|
||||||
|
|
||||||
|
img_bordata: IImg,
|
||||||
|
img_intro: IImg,
|
||||||
|
img_bordata_stampa: IImg,
|
||||||
|
img_intro_stampa: IImg,
|
||||||
|
pagina_introduttiva_sfondo_nero: {
|
||||||
|
type: Boolean,
|
||||||
|
},
|
||||||
|
backcolor: 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: {
|
||||||
|
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_size: String,
|
||||||
|
data_online: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
pdf_online_stampa: String,
|
||||||
|
pdf_online_stampa_size: String,
|
||||||
|
data_online_stampa: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
|
||||||
|
date_created: {
|
||||||
|
type: Date,
|
||||||
|
default: Date.now,
|
||||||
|
},
|
||||||
|
date_updated: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
lista_prodotti: [
|
||||||
|
{
|
||||||
|
type: Schema.Types.ObjectId,
|
||||||
|
ref: 'Product',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
isCatalogoGenerale: Boolean,
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
TOLTO ALTRIMENTI su /settable non mi crea l'ID
|
||||||
|
CatalogSchema.pre('save', async function (next) {
|
||||||
|
if (this.isNew) {
|
||||||
|
this._id = new ObjectId();
|
||||||
|
}
|
||||||
|
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
CatalogSchema.statics.getFieldsForSearch = function () {
|
||||||
|
return [{ field: 'title', type: tools.FieldType.string }];
|
||||||
|
};
|
||||||
|
|
||||||
|
CatalogSchema.statics.executeQueryTable = function (idapp, params, user) {
|
||||||
|
params.fieldsearch = this.getFieldsForSearch();
|
||||||
|
return tools.executeQueryTable(this, idapp, params, user);
|
||||||
|
};
|
||||||
|
|
||||||
|
/*CatalogSchema.statics.OLD_findAllIdApp = async function (idapp) {
|
||||||
|
const Catalog = this;
|
||||||
|
|
||||||
|
const arrrec = await Catalog.aggregate([
|
||||||
|
// Filtra i documenti per idapp
|
||||||
|
{ $match: { idapp } },
|
||||||
|
|
||||||
|
// Ordina i risultati per titolo
|
||||||
|
{ $sort: { title: 1 } },
|
||||||
|
|
||||||
|
// Esegui il join con la collezione Collana
|
||||||
|
{
|
||||||
|
$lookup: {
|
||||||
|
from: "collanas", // Nome della collezione Collana
|
||||||
|
localField: "idCollane", // Campo in Catalog
|
||||||
|
foreignField: "idCollana", // Campo in Collana
|
||||||
|
as: "collana_info" // Nome del campo che conterrà i risultati del join
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
]);
|
||||||
|
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
|
const Catalog = mongoose.model('Catalog', CatalogSchema);
|
||||||
|
|
||||||
|
Catalog.createIndexes()
|
||||||
|
.then(() => {})
|
||||||
|
.catch((err) => {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
|
||||||
|
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 };
|
||||||
|
|||||||
@@ -16,8 +16,12 @@ const CatProdSchema = new Schema({
|
|||||||
idapp: {
|
idapp: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
|
idArgomento: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
|
index: 1,
|
||||||
},
|
},
|
||||||
descr_estesa: {
|
descr_estesa: {
|
||||||
type: String,
|
type: String,
|
||||||
@@ -31,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) {
|
||||||
@@ -52,14 +59,122 @@ 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.updateCatDeleteEmpty = async function (idapp) {
|
||||||
|
try {
|
||||||
|
const toDelete = await CatProd.aggregate([
|
||||||
|
{ $match: { idapp } },
|
||||||
|
{
|
||||||
|
$lookup: {
|
||||||
|
from: 'productinfos',
|
||||||
|
localField: '_id',
|
||||||
|
foreignField: 'idCatProds',
|
||||||
|
as: 'products'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$project: {
|
||||||
|
_id: 1,
|
||||||
|
name: 1,
|
||||||
|
quanti: { $size: '$products' } // Conta il numero di prodotti per ciascun CatProd
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ $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;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error retrieving CatProd with title count:', error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
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) {
|
||||||
@@ -279,7 +279,7 @@ CircuitSchema.statics.isCircuitAdmin = async function (idrec, username) {
|
|||||||
|
|
||||||
const mycirc = await Circuit.findOne({ _id: idrec }).lean();
|
const mycirc = await Circuit.findOne({ _id: idrec }).lean();
|
||||||
if (mycirc) {
|
if (mycirc) {
|
||||||
return mycirc.admins.some(admin => admin.username === username);
|
return mycirc.admins.some(admin => (admin.username === username) || (admin.username === shared_consts.USER_ADMIN_CIRCUITS));
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1003,7 +1006,9 @@ CircuitSchema.statics.getListAdminsByCircuitPath = async function (idapp, circui
|
|||||||
{ deleted: { $exists: true, $eq: false } }],
|
{ deleted: { $exists: true, $eq: false } }],
|
||||||
}, { admins: 1 }).lean();
|
}, { admins: 1 }).lean();
|
||||||
|
|
||||||
return arr && arr.admins ? arr.admins : [];
|
let myarr = arr && arr.admins ? arr.admins : [];
|
||||||
|
|
||||||
|
return [...myarr, shared_consts.USER_ADMIN_CIRCUITS]
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1206,7 +1211,7 @@ CircuitSchema.statics.isAdminCircuit = async function (idapp, circuitname, usern
|
|||||||
|
|
||||||
if (arr) {
|
if (arr) {
|
||||||
for (const admin of arr.admins) {
|
for (const admin of arr.admins) {
|
||||||
if (admin.username === username)
|
if ((admin.username === username) || (shared_consts.USER_ADMIN_CIRCUITS === username))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1336,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) };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1794,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 };
|
||||||
|
|||||||
@@ -18,11 +18,9 @@ const CollanaSchema = new Schema({
|
|||||||
idCollana: {
|
idCollana: {
|
||||||
type: Number,
|
type: Number,
|
||||||
},
|
},
|
||||||
descrizione: {
|
title: {
|
||||||
type: String,
|
|
||||||
},
|
|
||||||
Descrizione_Estesa: {
|
|
||||||
type: String,
|
type: String,
|
||||||
|
index: true,
|
||||||
},
|
},
|
||||||
dataOra: {
|
dataOra: {
|
||||||
type: Date,
|
type: Date,
|
||||||
@@ -33,6 +31,9 @@ const CollanaSchema = new Schema({
|
|||||||
enabledAlFresco: {
|
enabledAlFresco: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
},
|
},
|
||||||
|
quanti: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -40,7 +41,7 @@ var Collana = module.exports = mongoose.model('Collana', CollanaSchema);
|
|||||||
|
|
||||||
module.exports.getFieldsForSearch = function () {
|
module.exports.getFieldsForSearch = function () {
|
||||||
return [
|
return [
|
||||||
{ field: 'descrizione', type: tools.FieldType.string },
|
{ field: 'title', type: tools.FieldType.string },
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -52,9 +53,77 @@ 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 Collana.find(myfind).sort({name: 1, surname: 1});
|
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 };
|
||||||
|
|||||||
@@ -70,7 +70,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 Gasordine.find(myfind);
|
return await Gasordine.find(myfind).sort({dataora_chiusura_ordini: -1}).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -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 };
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user