diff --git a/package-lock.json b/package-lock.json
index f21d701..dd507d5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,6 +13,7 @@
"body-parser": "^1.20.2",
"dotenv": "^16.3.1",
"express": "^4.18.2",
+ "express-session": "^1.17.3",
"fs": "^0.0.1-security",
"handlebars": "^4.7.7",
"http": "^0.0.1-security",
@@ -221,21 +222,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -278,14 +264,6 @@
"safer-buffer": "~2.1.0"
}
},
- "node_modules/assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/ast-types": {
"version": "0.13.4",
"resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
@@ -297,29 +275,11 @@
"node": ">=4"
}
},
- "node_modules/async": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
- "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
- },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
- "node_modules/aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/aws4": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
- "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
- },
"node_modules/axios": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
@@ -485,11 +445,6 @@
"node": ">=6"
}
},
- "node_modules/caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
- },
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -646,17 +601,6 @@
"resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz",
"integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w=="
},
- "node_modules/dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
- "dependencies": {
- "assert-plus": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/data-uri-to-buffer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz",
@@ -732,15 +676,6 @@
"resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
"integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="
},
- "node_modules/ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
- "dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -893,6 +828,32 @@
"node": ">= 0.10.0"
}
},
+ "node_modules/express-session": {
+ "version": "1.17.3",
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz",
+ "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==",
+ "dependencies": {
+ "cookie": "0.4.2",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~2.0.0",
+ "on-headers": "~1.0.2",
+ "parseurl": "~1.3.3",
+ "safe-buffer": "5.2.1",
+ "uid-safe": "~2.1.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/express-session/node_modules/cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/express/node_modules/body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
@@ -930,11 +891,6 @@
"node": ">= 0.8"
}
},
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
"node_modules/extract-zip": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
@@ -989,29 +945,11 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
- "node_modules/extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
- "engines": [
- "node >=0.6.0"
- ]
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
"node_modules/fast-fifo": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
"integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
},
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
"node_modules/fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
@@ -1056,14 +994,6 @@
}
}
},
- "node_modules/forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
- "engines": {
- "node": "*"
- }
- },
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
@@ -1189,14 +1119,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
- "node_modules/getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
- "dependencies": {
- "assert-plus": "^1.0.0"
- }
- },
"node_modules/gl-matrix": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz",
@@ -1232,27 +1154,6 @@
"uglify-js": "^3.1.4"
}
},
- "node_modules/har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "deprecated": "this library is no longer supported",
- "dependencies": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -1347,20 +1248,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
- "node_modules/http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.3.7"
- }
- },
"node_modules/https-proxy-agent": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
@@ -1470,26 +1357,11 @@
"node": ">=8"
}
},
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
- },
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
- },
- "node_modules/isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
- },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -1506,31 +1378,11 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
- },
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
},
- "node_modules/json-schema": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
- "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
- },
"node_modules/jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
@@ -1539,20 +1391,6 @@
"graceful-fs": "^4.1.6"
}
},
- "node_modules/jsprim": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
- "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
"node_modules/kdbush": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz",
@@ -1766,14 +1604,6 @@
}
}
},
- "node_modules/oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "engines": {
- "node": "*"
- }
- },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -1801,6 +1631,14 @@
"node": ">= 0.8"
}
},
+ "node_modules/on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -1941,11 +1779,6 @@
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
},
- "node_modules/performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
- },
"node_modules/pg": {
"version": "8.11.1",
"resolved": "https://registry.npmjs.org/pg/-/pg-8.11.1.tgz",
@@ -2151,11 +1984,6 @@
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
- "node_modules/psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
- },
"node_modules/pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -2165,14 +1993,6 @@
"once": "^1.3.1"
}
},
- "node_modules/punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/puppeteer": {
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.1.1.tgz",
@@ -2248,6 +2068,14 @@
"resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
"integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
},
+ "node_modules/random-bytes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
+ "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -2293,6 +2121,7 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "extraneous": true,
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
@@ -2306,6 +2135,7 @@
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
"integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "extraneous": true,
"engines": {
"node": ">=0.6"
}
@@ -2517,30 +2347,6 @@
"nan": "^2.17.0"
}
},
- "node_modules/sshpk": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
- "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
- "dependencies": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "bin": {
- "sshpk-conv": "bin/sshpk-conv",
- "sshpk-sign": "bin/sshpk-sign",
- "sshpk-verify": "bin/sshpk-verify"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -2660,18 +2466,6 @@
"node": ">=0.6"
}
},
- "node_modules/tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dependencies": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -2682,17 +2476,6 @@
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
@@ -2727,6 +2510,17 @@
"node": ">=0.8.0"
}
},
+ "node_modules/uid-safe": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
+ "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
+ "dependencies": {
+ "random-bytes": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/unbzip2-stream": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
@@ -2752,14 +2546,6 @@
"node": ">= 0.8"
}
},
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
"node_modules/util": {
"version": "0.10.4",
"resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
@@ -2786,15 +2572,6 @@
"node": ">= 0.4.0"
}
},
- "node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
- "bin": {
- "uuid": "bin/uuid"
- }
- },
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -2803,24 +2580,6 @@
"node": ">= 0.8"
}
},
- "node_modules/verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
- "engines": [
- "node >=0.6.0"
- ],
- "dependencies": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "node_modules/verror/node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
- },
"node_modules/vt-pbf": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz",
@@ -2845,17 +2604,6 @@
"webidl-conversions": "^3.0.0"
}
},
- "node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
"node_modules/wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
@@ -3136,17 +2884,6 @@
}
}
},
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -3183,11 +2920,6 @@
"safer-buffer": "~2.1.0"
}
},
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
- },
"ast-types": {
"version": "0.13.4",
"resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
@@ -3196,26 +2928,11 @@
"tslib": "^2.0.1"
}
},
- "async": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
- "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
- },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
- },
- "aws4": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
- "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
- },
"axios": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
@@ -3325,11 +3042,6 @@
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
},
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
- },
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -3452,14 +3164,6 @@
"resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz",
"integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w=="
},
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
"data-uri-to-buffer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz",
@@ -3513,15 +3217,6 @@
"resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
"integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="
},
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -3669,10 +3364,27 @@
}
}
},
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ "express-session": {
+ "version": "1.17.3",
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz",
+ "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==",
+ "requires": {
+ "cookie": "0.4.2",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~2.0.0",
+ "on-headers": "~1.0.2",
+ "parseurl": "~1.3.3",
+ "safe-buffer": "5.2.1",
+ "uid-safe": "~2.1.5"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
+ }
+ }
},
"extract-zip": {
"version": "2.0.1",
@@ -3708,26 +3420,11 @@
}
}
},
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
"fast-fifo": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
"integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
},
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
"fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
@@ -3755,11 +3452,6 @@
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
},
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
- },
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
@@ -3852,14 +3544,6 @@
}
}
},
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
"gl-matrix": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz",
@@ -3887,20 +3571,6 @@
"wordwrap": "^1.0.0"
}
},
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
- },
- "har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- }
- },
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -3965,16 +3635,6 @@
}
}
},
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
"https-proxy-agent": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
@@ -4046,26 +3706,11 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
- },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
- },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -4079,31 +3724,11 @@
"argparse": "^2.0.1"
}
},
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
- },
"json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
},
- "json-schema": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
- "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
- },
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
@@ -4112,17 +3737,6 @@
"graceful-fs": "^4.1.6"
}
},
- "jsprim": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
- "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- }
- },
"kdbush": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz",
@@ -4286,11 +3900,6 @@
"whatwg-url": "^5.0.0"
}
},
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
- },
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -4309,6 +3918,11 @@
"ee-first": "1.1.1"
}
},
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -4419,11 +4033,6 @@
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
},
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
- },
"pg": {
"version": "8.11.1",
"resolved": "https://registry.npmjs.org/pg/-/pg-8.11.1.tgz",
@@ -4578,11 +4187,6 @@
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
- "psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
- },
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -4592,11 +4196,6 @@
"once": "^1.3.1"
}
},
- "punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
- },
"puppeteer": {
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.1.1.tgz",
@@ -4653,6 +4252,11 @@
"resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
"integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
},
+ "random-bytes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
+ "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ=="
+ },
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -4843,22 +4447,6 @@
"nan": "^2.17.0"
}
},
- "sshpk": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
- "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
"statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -4962,15 +4550,6 @@
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
},
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -4981,14 +4560,6 @@
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
@@ -5014,6 +4585,14 @@
"integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
"optional": true
},
+ "uid-safe": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
+ "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
+ "requires": {
+ "random-bytes": "~1.0.0"
+ }
+ },
"unbzip2-stream": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
@@ -5033,14 +4612,6 @@
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
},
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "requires": {
- "punycode": "^2.1.0"
- }
- },
"util": {
"version": "0.10.4",
"resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
@@ -5066,33 +4637,11 @@
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
},
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
- },
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
},
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- },
- "dependencies": {
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
- }
- }
- },
"vt-pbf": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz",
@@ -5117,14 +4666,6 @@
"webidl-conversions": "^3.0.0"
}
},
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "requires": {
- "isexe": "^2.0.0"
- }
- },
"wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
diff --git a/package.json b/package.json
index e073271..a054461 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
"body-parser": "^1.20.2",
"dotenv": "^16.3.1",
"express": "^4.18.2",
+ "express-session": "^1.17.3",
"fs": "^0.0.1-security",
"handlebars": "^4.7.7",
"http": "^0.0.1-security",
diff --git a/server.js b/server.js
index 230628c..9c344e0 100644
--- a/server.js
+++ b/server.js
@@ -13,6 +13,7 @@ const moment = require('moment');
const bodyParser = require('body-parser');
const _ = require('lodash');
const puppeteer = require('puppeteer');
+const session = require('express-session');
const storage = multer.diskStorage({
@@ -25,13 +26,22 @@ const storage = multer.diskStorage({
});
const upload = multer({ storage: storage });
+app.use(
+ session({
+ secret: process.env.SSH_PORT,
+ resave: false,
+ saveUninitialized: true,
+ cookie: { maxAge: 24 * 60 * 60 * 1000 },
+ })
+);
+
app.use(express.static(path.join(__dirname, "static")));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.get("/", index);
-app.get("/login", login);
+app.get("/signin", signin);
app.get("/register", register);
app.get("/live", live);
app.get("/reports", reports);
@@ -54,7 +64,62 @@ const commandToExecute = 'docker ps | grep connectionserver-video-server';
const conn = new Client();
+async function getUserInfo(userId) {
+ const pool = new Pool({
+ user: DB_User,
+ host: DB_Host,
+ database: DB_Name,
+ password: DB_Password,
+ port: DB_Port,
+ });
+ const client = await pool.connect();
+
+ try {
+ let userInfo = {
+ Organisation: "",
+ User: '',
+ Users: [],
+ };
+
+ if (userId != "admin") {
+ const queryUsers = `
+ SELECT name, surname, devices, edittransport, deletetransport, update
+ FROM users
+ WHERE id = $1
+ `;
+ const usersResult = await client.query(queryUsers, [userId]);
+ const user = usersResult.rows[0];
+ userInfo.Users.push({
+ name: user.name,
+ surname: user.surname,
+ devices: user.devices,
+ edittransport: user.edittransport,
+ deletetransport: user.deletetransport,
+ update: user.update,
+ });
+ userInfo.User = user.name + " " + user.surname;
+ } else {
+ userInfo.User = "Администратор"
+ }
+
+ const queryMain = `SELECT organisation FROM main`;
+ const mainResult = await client.query(queryMain);
+ userInfo.Organisation = mainResult.rows[0].organisation;
+
+ return userInfo;
+ } catch (error) {
+ console.error(error);
+ throw error;
+ } finally {
+ client.release();
+ }
+}
+
+
app.post("/videos/restart", async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
conn.on('ready', function() {
console.log('Подключение по SSH успешно');
@@ -118,9 +183,15 @@ const DB_Port = "5432";
const DB_Name = "postgres";
async function index(req, res) {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
var templateData = {
- Organisation: "Название организации",
- User: "Тестовое Имя",
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
ifDBError: false,
Count: "",
AlarmsLast11Days: new Array(11).fill(0),
@@ -264,17 +335,163 @@ for (let i = 0; i < dates.length; i++) {
}
}
-function login(req, res) {
- res.sendFile(path.join(__dirname, "static/templates/login.html"));
-}
-function register(req, res) {
- res.sendFile(path.join(__dirname, "static/templates/register.html"));
+function signin(req, res) {
+ if (req.session.userId != undefined) {
+ return res.redirect("/");
+ }
+ const pool = new Pool({
+ user: DB_User,
+ host: DB_Host,
+ database: DB_Name,
+ password: DB_Password,
+ port: DB_Port,
+ });
+ pool.query('SELECT COUNT(*) FROM main', (error, result) => {
+ if (error) {
+ console.error('Ошибка при выполнении запроса к базе данных:', error);
+ res.status(500).send('Ошибка сервера');
+ return;
+ }
+
+ const rowCount = parseInt(result.rows[0].count, 10);
+
+ if (rowCount === 0) {
+ res.redirect('/register');
+ } else {
+ res.sendFile(path.join(__dirname, 'static/templates/signin.html'));
+ }
+ });
}
+function register(req, res) {
+ if (req.session.userId != undefined) {
+ return res.redirect("/");
+ }
+ const pool = new Pool({
+ user: DB_User,
+ host: DB_Host,
+ database: DB_Name,
+ password: DB_Password,
+ port: DB_Port,
+ });
+ pool.query('SELECT COUNT(*) FROM main', (err, result) => {
+ if (err) {
+ console.error('Ошибка выполнения SQL-запроса:', err);
+ res.status(500).send('Внутренняя ошибка сервера');
+ return;
+ }
+
+ if (result.rows[0].count > 0) {
+ res.redirect('/signin');
+ } else {
+ res.sendFile(path.join(__dirname, 'static/templates/register.html'));
+ }
+ });
+}
+
+app.post('/setup', async (req, res) => {
+ if (req.session.userId != undefined) {
+ return res.redirect("/");
+ }
+ try {
+ const pool = new Pool({
+ user: DB_User,
+ host: DB_Host,
+ database: DB_Name,
+ password: DB_Password,
+ port: DB_Port,
+ });
+ const { name, login, password } = req.body;
+
+ const checkQuery = 'SELECT * FROM main LIMIT 1';
+ const checkResult = await pool.query(checkQuery);
+
+ if (checkResult.rows.length > 0) {
+ res.redirect('/signin');
+ }
+
+ const insertQuery = 'INSERT INTO main (organisation, login, password) VALUES ($1, $2, $3)';
+ await pool.query(insertQuery, [name, login, password]);
+
+ res.status(200).json({ message: 'Данные успешно добавлены' });
+ } catch (error) {
+ console.error('Ошибка при обработке запроса:', error);
+ res.status(500).json({ error: 'Произошла ошибка при обработке запроса' });
+ }
+});
+
+app.post('/login', async (req, res) => {
+ if (req.session.userId != undefined) {
+ return res.redirect("/");
+ }
+ const { email, password } = req.body;
+
+ try {
+ const pool = new Pool({
+ user: DB_User,
+ host: DB_Host,
+ database: DB_Name,
+ password: DB_Password,
+ port: DB_Port,
+ });
+
+ const mainQuery = await pool.query(
+ 'SELECT * FROM main WHERE login = $1 AND password = $2',
+ [email, password]
+ );
+
+ const mainUser = mainQuery.rows[0];
+
+ if (mainUser) {
+ req.session.userId = "admin";
+
+ console.log("Авторизация успешна (из таблицы main)");
+ return res.status(200).json({ message: 'Авторизация успешна' });
+ }
+
+ const userQuery = await pool.query(
+ 'SELECT id, name, surname FROM users WHERE email = $1 AND password = $2',
+ [email, password]
+ );
+
+ const user = userQuery.rows[0];
+
+ if (!user) {
+ return res.status(401).json({ message: 'Неправильное имя пользователя или пароль' });
+ }
+
+ req.session.userId = user.id;
+
+ console.log("Авторизация успешна (из таблицы users)");
+ res.status(200).json({ message: 'Авторизация успешна' });
+ } catch (error) {
+ console.error('Ошибка при выполнении запроса к базе данных:', error);
+ res.status(500).json({ message: 'Ошибка сервера' });
+ }
+});
+
+app.get('/logout', (req, res) => {
+ req.session.destroy((err) => {
+ if (err) {
+ console.error('Ошибка при выходе из системы:', err);
+ res.status(500).json({ message: 'Ошибка сервера' });
+ } else {
+ res.redirect('/signin');
+ }
+ });
+});
+
+
async function live(req, res) {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
let templateData = {
- Organisation: "Название организации",
- User: "Тестовое Имя",
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
ifDBError: false,
Registrars: [],
Alarms: [],
@@ -512,6 +729,9 @@ async function live(req, res) {
}
app.post("/devices-geo", async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
const selectedDevices = req.body.devices;
const pool = new Pool({
@@ -575,9 +795,15 @@ pool.query(subquery, selectedDevices, (err, result) => {
async function reports(req, res) {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
let templateData = {
- Organisation: "Название организации",
- User: "Тестовое Имя",
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
ifDBError: false,
Registrars: [],
Groups: [],
@@ -790,6 +1016,9 @@ async function reports(req, res) {
}
app.get("/api/devices", async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
try {
const pool = new Pool({
user: DB_User,
@@ -912,11 +1141,17 @@ async function generatePDF(data) {
app.get('/reports/:id', async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
const id = req.params.id;
let templateData = {
- Organisation: "Название организации",
- User: "Тестовое Имя",
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
ifDBError: false,
Id: id,
Type: "",
@@ -1199,11 +1434,17 @@ app.get('/reports/:id', async (req, res) => {
});
app.get('/generate-pdf/:id', async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
const id = req.params.id;
let templateData = {
- Organisation: "Название организации",
- User: "Тестовое Имя",
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
ifDBError: false,
Id: id,
Type: "",
@@ -1463,9 +1704,15 @@ let data = {
});
async function devices(req, res) {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
let templateData = {
- Organisation: "Название организации",
- User: "Тестовое Имя",
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
ifDBError: false,
Registrars: [],
Groups: [],
@@ -1570,6 +1817,9 @@ async function getParameterByName(serial, fieldName) {
}
app.post('/device-parameters', async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
try {
const { serial, FIELDS } = req.body;
// console.log(serial, FIELDS);
@@ -1615,6 +1865,9 @@ function findPathForField(fieldName) {
}
app.put('/device-parameters', async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
// Получаем данные из PUT запроса
const requestData = req.body;
const { serial } = req.query;
@@ -1673,6 +1926,9 @@ app.put('/device-parameters', async (req, res) => {
app.post("/devicedata", async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
const id = req.body.id;
const pool = new Pool({
@@ -1696,6 +1952,9 @@ app.post("/devicedata", async (req, res) => {
});
app.post("/updatedevice", async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
const pool = new Pool({
user: DB_User,
host: DB_Host,
@@ -1827,6 +2086,9 @@ app.post("/updatedevice", async (req, res) => {
});
app.post("/updatedriver", upload.single("upload-file"), async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
const pool = new Pool({
user: DB_User,
host: DB_Host,
@@ -1897,6 +2159,9 @@ app.post("/updatedriver", upload.single("upload-file"), async (req, res) => {
});
app.post("/adddriver", upload.single("upload-file"), async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
const pool = new Pool({
user: DB_User,
host: DB_Host,
@@ -1966,6 +2231,9 @@ app.post("/adddriver", upload.single("upload-file"), async (req, res) => {
});
app.post("/driverdata", async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
const id = req.body.id;
const pool = new Pool({
@@ -1991,6 +2259,9 @@ app.post("/driverdata", async (req, res) => {
});
app.post("/userdata", async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
const id = req.body.id;
const pool = new Pool({
@@ -2016,6 +2287,9 @@ app.post("/userdata", async (req, res) => {
});
app.post("/deletedriver", async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
const id = req.body.id;
const pool = new Pool({
@@ -2040,6 +2314,9 @@ app.post("/deletedriver", async (req, res) => {
});
app.post("/deleteuser", async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
const id = req.body.id;
const pool = new Pool({
@@ -2064,9 +2341,15 @@ app.post("/deleteuser", async (req, res) => {
});
async function drivers(req, res) {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
let templateData = {
- Organisation: "Название организации",
- User: "Тестовое Имя",
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
ifDBError: false,
Drivers: [],
Registrars: [],
@@ -2136,20 +2419,85 @@ async function drivers(req, res) {
}
}
-function update(req, res) {
- res.sendFile(path.join(__dirname, "static/templates/devices/update.html"));
+async function update(req, res) {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
+ let templateData = {
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
+ ifDBError: false,
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
+ };
+
+ try {
+ const source = fs.readFileSync("static/templates/devices/update.html", "utf8");
+ const template = handlebars.compile(source);
+ const resultT = template(templateData);
+ res.send(resultT);
+ } catch (error) {
+ console.error(error);
+ templateData.ifDBError = true;
+
+ const source = fs.readFileSync(
+ "static/templates/devices/update.html",
+ "utf8"
+ );
+ const template = handlebars.compile(source);
+ const resultT = template(templateData);
+ res.send(resultT);
+ }
}
-function settings(req, res) {
- res.sendFile(path.join(__dirname, "static/templates/settings.html"));
+async function settings(req, res) {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
+ let templateData = {
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
+ ifDBError: false,
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
+ };
+
+ try {
+ const source = fs.readFileSync("static/templates/settings.html", "utf8");
+ const template = handlebars.compile(source);
+ const resultT = template(templateData);
+ res.send(resultT);
+ } catch (error) {
+ console.error(error);
+ templateData.ifDBError = true;
+
+ const source = fs.readFileSync(
+ "static/templates/settings.html",
+ "utf8"
+ );
+ const template = handlebars.compile(source);
+ const resultT = template(templateData);
+ res.send(resultT);
+ }
}
async function adminPanel(req, res) {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ if (req.session.userId != "admin") {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
let templateData = {
- Organisation: "Название организации",
- User: "Тестовое Имя",
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
ifDBError: false,
Users: [],
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
};
try {
@@ -2208,6 +2556,12 @@ async function adminPanel(req, res) {
// Обработка POST-запроса для добавления пользователя
app.post("/add-user", async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ if (req.session.userId != "admin") {
+ return res.redirect("/signin");
+ }
const { name, surname, email, phone, password } = req.body;
console.log(name, surname, email, phone, password)
@@ -2244,11 +2598,20 @@ app.post("/add-user", async (req, res) => {
});
app.get('/admin/user/:id', async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ if (req.session.userId != "admin") {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
const id = req.params.id;
let templateData = {
- Organisation: "Название организации",
- User: "Тестовое Имя",
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
ifDBError: false,
Id: id,
Name: "",
@@ -2344,6 +2707,12 @@ app.get('/admin/user/:id', async (req, res) => {
});
app.post("/updateuser/:id", async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ if (req.session.userId != "admin") {
+ return res.redirect("/signin");
+ }
const id = req.params.id;
const pool = new Pool({
user: DB_User,
@@ -2413,9 +2782,15 @@ app.post("/updateuser/:id", async (req, res) => {
});
async function videos(req, res) {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
let templateData = {
- Organisation: "Название организации",
- User: "Тестовое Имя",
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
ifDBError: false,
Registrars: [],
Groups: [],
@@ -2501,9 +2876,15 @@ async function videos(req, res) {
}
async function videoExport(req, res) {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ const userInfo = await getUserInfo(req.session.userId);
let templateData = {
- Organisation: "Название организации",
- User: "Тестовое Имя",
+ Organisation: userInfo.Organisation,
+ User: userInfo.User,
+ UserInfo: userInfo.Users,
+ isAdmin: req.session.userId === 'admin',
ifDBError: false,
Registrars: [],
Groups: [],
@@ -2590,6 +2971,9 @@ async function videoExport(req, res) {
}
app.get('/getData', async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
const selectedSerial = req.query.serial;
const selectedDate = req.query.selectedDate;
const selectedTime = req.query.selectedTime;
@@ -2657,6 +3041,9 @@ app.get('/getData', async (req, res) => {
});
app.post("/getspeedarchive", async (req, res) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
const { serial, datetime } = req.body;
const formattedDateTime = new Date(datetime).toISOString();
@@ -2709,6 +3096,9 @@ app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
-// app.use((req, res, next) => {
-// res.sendFile(path.join(__dirname, "static/templates/404.html"));
-// });
+app.use((req, res, next) => {
+ if (req.session.userId === undefined) {
+ return res.redirect("/signin");
+ }
+ res.sendFile(path.join(__dirname, "static/templates/404.html"));
+});
diff --git a/static/templates/404.html b/static/templates/404.html
new file mode 100644
index 0000000..6dcfd1f
--- /dev/null
+++ b/static/templates/404.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ Здесь ничего нет
+
+
+
+
+
+
+
+
+
+ Видеоматериал создан Igor Kozak для 10Clouds
+
+
\ No newline at end of file
diff --git a/static/templates/admin/index.html b/static/templates/admin/index.html
index 3cb6477..e4a34bc 100644
--- a/static/templates/admin/index.html
+++ b/static/templates/admin/index.html
@@ -21,7 +21,7 @@
- Выйти
+ Выйти
diff --git a/static/templates/admin/user.html b/static/templates/admin/user.html
index dc1bf5a..a5af5ea 100644
--- a/static/templates/admin/user.html
+++ b/static/templates/admin/user.html
@@ -21,7 +21,7 @@
- Выйти
+ Выйти
diff --git a/static/templates/devices/drivers.html b/static/templates/devices/drivers.html
index ec2ac6c..aa962e0 100644
--- a/static/templates/devices/drivers.html
+++ b/static/templates/devices/drivers.html
@@ -11,17 +11,17 @@
Аргус
- / Название организации
+ / {{Organisation}}
@@ -43,6 +43,11 @@
Записи
+ {{#if isAdmin}}
+
+ Админка
+
+ {{/if}}
Настройки
diff --git a/static/templates/devices/index.html b/static/templates/devices/index.html
index cdd6d7c..ae89aee 100644
--- a/static/templates/devices/index.html
+++ b/static/templates/devices/index.html
@@ -11,17 +11,17 @@
Аргус
- / Название организации
+ / {{Organisation}}
@@ -43,6 +43,11 @@
Записи
+ {{#if isAdmin}}
+
+ Админка
+
+ {{/if}}
Настройки
diff --git a/static/templates/devices/update.html b/static/templates/devices/update.html
index 5f9ac80..e26fab5 100644
--- a/static/templates/devices/update.html
+++ b/static/templates/devices/update.html
@@ -11,17 +11,17 @@
Аргус
- / Название организации
+ / {{Organisation}}
@@ -43,6 +43,11 @@
Записи
+ {{#if isAdmin}}
+
+ Админка
+
+ {{/if}}
Настройки
diff --git a/static/templates/index.html b/static/templates/index.html
index fdacd82..347cae3 100644
--- a/static/templates/index.html
+++ b/static/templates/index.html
@@ -23,7 +23,7 @@
- Выйти
+ Выйти
@@ -45,9 +45,11 @@
Записи
+ {{#if isAdmin}}
Админка
+ {{/if}}
Настройки
diff --git a/static/templates/live.html b/static/templates/live.html
index 289dd06..edf5f52 100644
--- a/static/templates/live.html
+++ b/static/templates/live.html
@@ -25,7 +25,7 @@
- Выйти
+ Выйти
@@ -47,9 +47,11 @@
Записи
+ {{#if isAdmin}}
- Админка
-
+ Админка
+
+ {{/if}}
Настройки
diff --git a/static/templates/login.html b/static/templates/login.html
deleted file mode 100644
index cd20776..0000000
--- a/static/templates/login.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
- Авторизация
-
-
-
-
-
-
-
-
-
- Видеоматериал создан Igor Kozak на Dribbble
-
-
-
\ No newline at end of file
diff --git a/static/templates/register.html b/static/templates/register.html
index be1bc0a..4bae2e3 100644
--- a/static/templates/register.html
+++ b/static/templates/register.html
@@ -10,7 +10,7 @@
@@ -34,7 +34,55 @@
- Видеоматериал создан Igor Kozak на Dribbble
+ Видеоматериал создан Igor Kozak для 10Clouds
+
+
diff --git a/static/templates/reports/index.html b/static/templates/reports/index.html
index 6ca2494..68ec53e 100644
--- a/static/templates/reports/index.html
+++ b/static/templates/reports/index.html
@@ -21,7 +21,7 @@
- Выйти
+ Выйти
@@ -43,9 +43,11 @@
Записи
+ {{#if isAdmin}}
- Админка
+ Админка
+ {{/if}}
Настройки
diff --git a/static/templates/reports/report.html b/static/templates/reports/report.html
index 17806cb..79cbec8 100644
--- a/static/templates/reports/report.html
+++ b/static/templates/reports/report.html
@@ -23,7 +23,7 @@
- Выйти
+ Выйти
@@ -45,9 +45,11 @@
Записи
+ {{#if isAdmin}}
- Админка
+ Админка
+ {{/if}}
Настройки
diff --git a/static/templates/settings.html b/static/templates/settings.html
index a2ddf1e..5883a66 100644
--- a/static/templates/settings.html
+++ b/static/templates/settings.html
@@ -11,17 +11,17 @@
Аргус
- / Название организации
+ / {{Organisation}}
@@ -43,16 +43,18 @@
Записи
+ {{#if isAdmin}}
- Админка
+ Админка
+ {{/if}}
Настройки
-
+ {{/if}}
diff --git a/static/templates/signin.html b/static/templates/signin.html
new file mode 100644
index 0000000..47d9095
--- /dev/null
+++ b/static/templates/signin.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
Авторизация
+
+
+
+
+
+
+
+
+
+
Видеоматериал создан Igor Kozak для 10Clouds
+
+
+
+
+
\ No newline at end of file
diff --git a/static/templates/videos/export.html b/static/templates/videos/export.html
index b9821bb..adf6b04 100644
--- a/static/templates/videos/export.html
+++ b/static/templates/videos/export.html
@@ -25,7 +25,7 @@
-
Выйти
+
Выйти
@@ -47,9 +47,11 @@
Записи
+ {{#if isAdmin}}
- Админка
+ Админка
+ {{/if}}
Настройки
diff --git a/static/templates/videos/playback.html b/static/templates/videos/playback.html
index bd84b6e..1409076 100644
--- a/static/templates/videos/playback.html
+++ b/static/templates/videos/playback.html
@@ -25,7 +25,7 @@
- Выйти
+ Выйти
@@ -47,9 +47,11 @@
Записи
+ {{#if isAdmin}}
- Админка
+ Админка
+ {{/if}}
Настройки