From dd4b82b7807196fac8277d1a43a1bb27dfff646a Mon Sep 17 00:00:00 2001 From: Cristiano Pires Date: Sun, 8 Oct 2023 18:32:36 +0100 Subject: [PATCH] Login Complete --- package-lock.json | 362 ++++++++++++++++++++++++++++++++ package.json | 3 +- public/cryptoLib.js | 68 ++++++ public/leagueAPI.js | 42 ++++ public/main.js | 38 +++- public/models/users.js | 20 ++ src/Components/Login.js | 69 +++++- src/Components/RegisterForm.css | 27 +++ src/Components/RegisterForm.js | 92 ++++++++ src/Pages/Home.js | 31 ++- src/index.js | 1 + src/lib.js | 117 +---------- test.js | 19 ++ yarn.lock | 131 +++++++++++- 14 files changed, 883 insertions(+), 137 deletions(-) create mode 100644 public/cryptoLib.js create mode 100644 public/leagueAPI.js create mode 100644 public/models/users.js create mode 100644 src/Components/RegisterForm.css create mode 100644 src/Components/RegisterForm.js create mode 100644 test.js diff --git a/package-lock.json b/package-lock.json index 9d31103..411b31b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "bootstrap": "^5.3.2", "crypto": "^1.0.1", "eslint-config-react-app": "^7.0.1", + "mongoose": "^7.6.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "^5.0.1", @@ -3211,6 +3212,15 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -4574,6 +4584,20 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.4.tgz", "integrity": "sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==" }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.1.tgz", + "integrity": "sha512-8hKOnOan+Uu+NgMaCouhg3cT9x5fFZ92Jwf+uDLXLu/MFRbXxlWwGeQY7KVHkeSft6RvY+tdxklUBuyY9eIEKg==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, "node_modules/@types/ws": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz", @@ -5938,6 +5962,14 @@ "node-int64": "^0.4.0" } }, + "node_modules/bson": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.0.tgz", + "integrity": "sha512-B+QB4YmDx9RStKv8LLSl/aVIEV3nYJc3cJNNTK2Cd1TL+7P+cNpw9mAPeCgc5K+j01Dv6sxUzcITXDx7ZU3F0w==", + "engines": { + "node": ">=14.20.1" + } + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -9728,6 +9760,11 @@ "node": ">= 0.4" } }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "node_modules/ipaddr.js": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", @@ -12427,6 +12464,14 @@ "node": ">=4.0" } }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/keyv": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", @@ -12711,6 +12756,12 @@ "node": ">= 4.0.0" } }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -12906,6 +12957,131 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mongodb": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.0.tgz", + "integrity": "sha512-g+GCMHN1CoRUA+wb1Agv0TI4YTSiWr42B5ulkiAfLLHitGK1R+PkSAf3Lr5rPZwi/3F04LiaZEW0Kxro9Fi2TA==", + "dependencies": { + "bson": "^5.5.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "optionalDependencies": { + "@mongodb-js/saslprep": "^1.1.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.0.0", + "kerberos": "^1.0.0 || ^2.0.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongodb-connection-string-url/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mongodb-connection-string-url/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mongoose": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.6.0.tgz", + "integrity": "sha512-ztQ12rm0BQN5i7LB6xhWX4l9a9w2aa3jEwa/mM2vAutYJRyAwOzcusvKJBULMzFHyUDBOVW15grisexypgMIWA==", + "dependencies": { + "bson": "^5.4.0", + "kareem": "2.5.1", + "mongodb": "5.9.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -16178,6 +16354,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -16196,6 +16377,15 @@ "node": ">=8" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -16206,6 +16396,19 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -16270,6 +16473,15 @@ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "deprecated": "Please use @jridgewell/sourcemap-codec instead" }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -20626,6 +20838,15 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, "@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -21668,6 +21889,20 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.4.tgz", "integrity": "sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==" }, + "@types/webidl-conversions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.1.tgz", + "integrity": "sha512-8hKOnOan+Uu+NgMaCouhg3cT9x5fFZ92Jwf+uDLXLu/MFRbXxlWwGeQY7KVHkeSft6RvY+tdxklUBuyY9eIEKg==" + }, + "@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "requires": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, "@types/ws": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz", @@ -22666,6 +22901,11 @@ "node-int64": "^0.4.0" } }, + "bson": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.0.tgz", + "integrity": "sha512-B+QB4YmDx9RStKv8LLSl/aVIEV3nYJc3cJNNTK2Cd1TL+7P+cNpw9mAPeCgc5K+j01Dv6sxUzcITXDx7ZU3F0w==" + }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -25412,6 +25652,11 @@ "side-channel": "^1.0.4" } }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "ipaddr.js": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", @@ -27352,6 +27597,11 @@ "object.values": "^1.1.6" } }, + "kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==" + }, "keyv": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", @@ -27577,6 +27827,12 @@ "fs-monkey": "^1.0.4" } }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -27711,6 +27967,84 @@ "minimist": "^1.2.6" } }, + "mongodb": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.0.tgz", + "integrity": "sha512-g+GCMHN1CoRUA+wb1Agv0TI4YTSiWr42B5ulkiAfLLHitGK1R+PkSAf3Lr5rPZwi/3F04LiaZEW0Kxro9Fi2TA==", + "requires": { + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^5.5.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + } + }, + "mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "requires": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, + "mongoose": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.6.0.tgz", + "integrity": "sha512-ztQ12rm0BQN5i7LB6xhWX4l9a9w2aa3jEwa/mM2vAutYJRyAwOzcusvKJBULMzFHyUDBOVW15grisexypgMIWA==", + "requires": { + "bson": "^5.4.0", + "kareem": "2.5.1", + "mongodb": "5.9.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" + }, + "mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "requires": { + "debug": "4.x" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -29903,6 +30237,11 @@ "object-inspect": "^1.9.0" } }, + "sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -29918,6 +30257,11 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, "sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -29928,6 +30272,15 @@ "websocket-driver": "^0.7.4" } }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -29974,6 +30327,15 @@ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, "spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", diff --git a/package.json b/package.json index a60a93f..ef69147 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "bootstrap": "^5.3.2", "crypto": "^1.0.1", "eslint-config-react-app": "^7.0.1", + "mongoose": "^7.6.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "^5.0.1", @@ -44,5 +45,5 @@ }, "browser": { "crypto": false -} + } } diff --git a/public/cryptoLib.js b/public/cryptoLib.js new file mode 100644 index 0000000..ddcdf12 --- /dev/null +++ b/public/cryptoLib.js @@ -0,0 +1,68 @@ +const crypto = require('crypto'); +const uModel = require('./models/users') +class _Crypto +{ + constructor(User, Password) + { + this.salt = 'H$44Q3RVCd9X8Ef63tB4'; + this.secret = 'mYFUZX9NSx7K74r7Jh@O'; + this.pepper = String.fromCharCode(this.getRandomInt(65, 90)); + this.password = Password; + this.user = User; + this.algorithm = 'aes-192-cbc'; + + } + get Hash() // to use on register + { + return this.hash() + } + hash(p) + { + return crypto.createHmac('sha256', this.secret).update(this.user+this.password+this.salt + (p?p:this.pepper) ).digest('hex'); + } + eHash(Email) + { + Email = Email?Email:this.user + return this.user? new Buffer.from(this.user).toString('base64') :new Buffer.from(Email).toString('base64'); + } + + decrypt(eHash) + { + return new Buffer.from(eHash, 'base64').toString('utf8'); + } + getRandomInt(min, max) + { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min)) + min; + } + //TODO: compare() + //Get hash from db run through the peper possibilties and see if there is a match. + //return hash if true, null if false + async bouncer() + { + var Users = await uModel.find() + if(Users.length===0) return + var response; + for(var i = 65; i < 91; i++) + { + // eslint-disable-next-line no-loop-func + ((i)=>{ + var auxHash = this.hash(String.fromCharCode(i)) + var auxUsers = Users.filter(x=>x.Hash === auxHash) + if(auxUsers.length === 1) return response = auxHash; + })(i) + } + return response; + + } + async isNew(eHash) + { + var User = await uModel.find({eHash}); + return !(User.length>0); + } + + +}module.exports._Crypto = _Crypto; + + diff --git a/public/leagueAPI.js b/public/leagueAPI.js new file mode 100644 index 0000000..956261a --- /dev/null +++ b/public/leagueAPI.js @@ -0,0 +1,42 @@ +class LeagueAPI +{ + constructor() + { + this.key = process.env.lolAPIKey || 'RGAPI-fc17a511-f587-495b-ac01-80716870d46b'; + } + + async verifyUserName(nick, tag) + { + var options = { + method: "GET", + mode: "cors", + headers: + { + "Origin": "https://developer.riotgames.com", + "X-Riot-Token": this.key + } + } + var res = await fetch(`https://europe.api.riotgames.com/riot/account/v1/accounts/by-riot-id/${nick}/${tag}`, options) + .then(handleRes) + .then(handleData) + .catch(handleErrors) + + function handleRes(response) + { + return response.text() + } + function handleErrors(error) + { + return error; + } + function handleData(data) + { + data = JSON.parse(data); + return { + name:data.gameName, + puuid:data.puuid + } + } + return res.name?res:null; + } +}module.exports.LeagueAPI = LeagueAPI \ No newline at end of file diff --git a/public/main.js b/public/main.js index 7f6905c..8c6f317 100644 --- a/public/main.js +++ b/public/main.js @@ -1,5 +1,9 @@ +const {_Crypto} = require('./cryptoLib'); +const mongoose = require('mongoose'); const {app, BrowserWindow, ipcMain} = require('electron'); - +const mongoDB = 'mongodb+srv://admin:admin@cluster0.hrgvn.mongodb.net/LegendaryLeague?retryWrites=true&w=majority'; +const userModel = require('./models/users'); +const {LeagueAPI} = require('./leagueAPI') var window; function createWindow() { @@ -26,7 +30,9 @@ function createWindow() } app.on('ready', ()=> { + mongoose.Promise = global.Promise; window = createWindow(); + mongoose.connect(mongoDB); } ) ipcMain.on('close', (event, data) => @@ -41,9 +47,35 @@ ipcMain.on('minimize', (event, data) => { window.hide(); }); -ipcMain.on('login', (event, data) => +ipcMain.on('login', async (event, data) => { - console.log(data) + console.log('data',data); + const Hash = await new _Crypto(data.email, data.pw).bouncer(); + console.log(Hash) + if(Hash) + { + window.webContents.send('login', Hash) + } +}); +ipcMain.on('register', async (event, data) => +{ + //console.log('event',event,'data',data); + var nick_tag = data.nick_tag.split('#'); + var name = nick_tag[0]; + var tag = nick_tag[1] + var RiotExists = await new LeagueAPI().verifyUserName(name, tag); + if(!RiotExists) return window.webContents.send('register', 'No account on league with this name and/or tag.') + const crypto = new _Crypto(data.email, data.pw) + const Hash = crypto.hash(); + const eHash = crypto.eHash(); + const isNew = await crypto.isNew(eHash); + if(!isNew) return window.webContents.send('register', 'There is already an account with this email.') + var uModel = new userModel(); + uModel.Hash = Hash; + uModel.eHash = eHash; + uModel.leagueName = data.nick_tag; + const saved = await uModel.save(); + window.webContents.send('register',JSON.stringify(saved)) }); app.on('window-all-closed', ()=> diff --git a/public/models/users.js b/public/models/users.js new file mode 100644 index 0000000..85bc0a7 --- /dev/null +++ b/public/models/users.js @@ -0,0 +1,20 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +let User = +new Schema( + { + Hash: {type: String, required: false, max: 100}, + eHash: {type:String, required: true,}, + leagueName: {type:String, required:true} + } +); + + + + +const U = module.exports = mongoose.model('user', User); +module.exports.get = (callback, limit)=> +{ + U.find(callback).limit(limit); +} \ No newline at end of file diff --git a/src/Components/Login.js b/src/Components/Login.js index f005b5a..b50f17e 100644 --- a/src/Components/Login.js +++ b/src/Components/Login.js @@ -3,26 +3,77 @@ import './Login.css'; class Login extends React.Component { - sendForm(formData) + constructor() { - window.ipcRender.send('login', formData) + super(); + this.isPWValid = false; + this.receive(); } callRegister() { - window.ipcRender.send('register') + var date = new Date( new Date().setTime(new Date().getTime()+10000)).toGMTString(); + document.cookie = document.cookie+ 'nextPage=Register; expires='+date+';'; + window.location.reload(); + + } + validateConstraints(event) + { + event.preventDefault(); + const passwordInput = document.getElementsByClassName('password')[0]; + let message= ''; + if (!/.{8,}/.test(passwordInput.value)) { + message = 'At least eight characters. '; + } + if (!/.*[A-Z].*/.test(passwordInput.value)) { + message += '\nAt least one uppercase letter. '; + } + if (!/.*[a-z].*/.test(passwordInput.value)) { + message += '\nAt least one lowercase letter.'; + } + passwordInput.setCustomValidity(message); + if(message==='') + { + var form = document.getElementById('form') + window.ipcRender.send('login', { + email:form[0].value, + pw:form[1].value + }) + window.ipcRender.receive('login', hash=> + { + document.cookie = document.cookie+ `Hash=${hash};`; + window.location.reload(); + }) + }; + } + emailValidity() + { + document.getElementsByClassName('emailInput')[0].setCustomValidity('Email does not match normal parameters.'); + } + handleKeyDown(event) + { + if (event.keyCode === 13 ) { +     event.preventDefault(); + } + } + receive() + { + window.ipcRender.receive('login', data=> + { + document.cookie = document.cookie+ `Hash=${data.Hash};`; + window.location.reload(); + }) } - render() { return(
-
+ - + - - - + + +
) diff --git a/src/Components/RegisterForm.css b/src/Components/RegisterForm.css new file mode 100644 index 0000000..117973e --- /dev/null +++ b/src/Components/RegisterForm.css @@ -0,0 +1,27 @@ +.container +{ + position: relative; + width: 14em; + top: 9em; + display: flex; + flex-direction: column; + justify-content: space-evenly; + align-items: stretch; + text-align: center; + color:ivory; +} +input +{ + text-align: center; +} +.bt +{ + width: auto; + height: 2em; + background-color: rgba(0, 0, 0, 0.582); + border: 1px solid rgba(0, 0, 0, 0.582); + color:ivory; + font-weight: bold; + cursor: pointer; + margin-top: 1em; +} \ No newline at end of file diff --git a/src/Components/RegisterForm.js b/src/Components/RegisterForm.js new file mode 100644 index 0000000..9bb22ed --- /dev/null +++ b/src/Components/RegisterForm.js @@ -0,0 +1,92 @@ +import React from 'react' +import './RegisterForm.css' + +class Register extends React.Component +{ + send(event) + { + event.preventDefault(); + var form = document.getElementById('form'); + var correctEmail = form[0].value ===form[1].value; + var correctPassword = form[2].value ===form[3].value + + if(!correctEmail || !correctPassword) + { + return badInput(correctEmail, correctPassword) + } + const passwordInput = document.getElementsByClassName('Password')[0]; + let message= ''; + if (!/.{8,}/.test(passwordInput.value)) { + message = 'At least eight characters. '; + } + if (!/.*[A-Z].*/.test(passwordInput.value)) { + message += '\nAt least one uppercase letter. '; + } + if (!/.*[a-z].*/.test(passwordInput.value)) { + message += '\nAt least one lowercase letter.'; + } + passwordInput.setCustomValidity(message); + if(message==='') + { + window.ipcRender.send('register', { + email:form[0].value, + pw:form[2].value, + nick_tag:form[4].value + }) + window.ipcRender.receive('register', data=> + { + data = JSON.parse(data); + document.cookie = document.cookie+ `Hash=${data.Hash};`; + window.location.reload(); + + }) + } + + /** + * + * @param {String} mail -email + * @param {String} pw - password + * @returns {void} + */ + function badInput(mail, pw) + { + console.log(mail, pw) + if(!mail) return document.getElementById('Email').setCustomValidity('Emails don\'t match.'); + if(!pw) return document.getElementById('Password').setCustomValidity('Passwords don\'t match.'); + } + + } + + emailValidity() + { + document.getElementsByClassName('Email')[0].setCustomValidity('Email does not match normal parameters.'); + } + render() + { + return( +
+
+ +
+ + + + +
+
+ + + + +
+
+ + +
+ +
+
+ ) + } +} +export default Register \ No newline at end of file diff --git a/src/Pages/Home.js b/src/Pages/Home.js index 2efdac2..ba50690 100644 --- a/src/Pages/Home.js +++ b/src/Pages/Home.js @@ -1,19 +1,34 @@ import Login from "../Components/Login"; +import Register from "../Components/RegisterForm"; const { cookieSlicer } = require("../lib"); function Home() { var Hash = cookieSlicer(document.cookie,'Hash'); + var nextPage = cookieSlicer(document.cookie, 'nextPage'); + console.log(nextPage) console.log(Hash) - return ( +return (
- {Hash ? ( -

Welcome back!

- //TODO: Actual Page - ) : ( - - )} + {Hash ? + ( +

Welcome back!

+ //TODO: Actual Page + ) : + ( +
+ {nextPage==='Register'? + ( + + ): + ( + + ) + } +
+ ) + }
- ); +); } export default Home; \ No newline at end of file diff --git a/src/index.js b/src/index.js index 6cc121b..ec3c639 100644 --- a/src/index.js +++ b/src/index.js @@ -8,6 +8,7 @@ import Controls from './Components/Controls' import Home from './Pages/Home' const rootElement = document.getElementById("root"); const root = createRoot(rootElement); +document.documentElement.lang= console.log(document.cookie) root.render( diff --git a/src/lib.js b/src/lib.js index 2ed7b4c..62a86d3 100644 --- a/src/lib.js +++ b/src/lib.js @@ -1,48 +1,3 @@ -import crypto from 'crypto'; - -export class _Crypto -{ - constructor(User, Password) - { - this.salt = 'H$44Q3RVCd9X8Ef63tB4'; - this.secret = 'mYFUZX9NSx7K74r7Jh@O'; - this.pepper = String.fromCharCode(this.getRandomInt(65, 90)); - this.password = Password; - this.user = User; - this.algorithm = 'aes-192-cbc'; - - } - get Hash() // to use on register - { - return this.hash() - } - hash(p) - { - - return crypto.createHmac('sha256', this.secret).update(this.user+this.password+this.salt + (p?p:this.pepper) ).digest('hex'); - - } - eHash(Email) - { - return new Buffer.from(Email).toString('base64'); - } - - decrypt(eHash) - { - return new Buffer.from(eHash, 'base64').toString('utf8'); - } - getRandomInt(min, max) - { - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min)) + min; - } - //TODO: compare(hash) - //Get hash from db run through the peper possibilties and see if there is a match. - //return hash if true, null if false - -} - export class Epoch { /** @@ -94,75 +49,6 @@ export class Epoch } - -/** - * Use it to transform an hour value into miliseconds. - * @param {Number} Hours - Hours to transform - */ -function hours(Hours) -{ - return Hours*60*60*1000; -} -/** - * This function writes a cookie on the client side. - * Primary use: Store users Hash for every other page. - * @argument {Response} res - Response: express response object. - * @argument {String} name - Name of the cookie. - * @argument {*} value - Value of the cookie. - */ -export function baker(res, name, value) -{ - return new Promise((resolve,reject)=> - { - try - { - res.cookie(name, '',{maxAge:0}); - res.cookie(name, value, {maxAge:hours(2),path:'/',secure:false,httpOnly:false}); - resolve(); - } - catch (e) - { - reject(e) - } - }) -} - -/** - * Hash used on register to check if there is already a user with the same credentials. - * @param {String} user - User's email - * @param {String} password - User's Password - * @param {String} hash - User's identifying hash - */ -export function bouncer (user, password, hash) -{ - return new Promise((resolve, reject)=> - { - //!Crypto compare needs to be reworked so this is legacy code not supposed to work - // new _Crypto(user, password).compare().then(m=> - // { - // if(hash) - // { - // if(m==hash) - // { - // resolve(m) - // } - // else - // { - // reject('You are on a different account.') - // } - // } - // else - // { - // resolve(m) - // } - // }).catch(m=> - // { - // reject(m) - // }) - }) -} - - export function cookieSlicer(cookie, id) { cookie = cookie.split(';'); @@ -173,4 +59,5 @@ export function cookieSlicer(cookie, id) result.set(aux[0], aux[1]); } return id?result.get(id):result; -} \ No newline at end of file +} + diff --git a/test.js b/test.js new file mode 100644 index 0000000..f0de59e --- /dev/null +++ b/test.js @@ -0,0 +1,19 @@ +// const uModel = require('./src/models/users'); +const mongoDB = 'mongodb+srv://admin:admin@cluster0.hrgvn.mongodb.net/LegendaryLeague?retryWrites=true&w=majority'; +const mongoose = require('mongoose'); +mongoose.Promise = global.Promise; +mongoose.connect(mongoDB); +const {LeagueAPI} = require('./public/leagueAPI'); +const {_Crypto} = require('./public/cryptoLib'); +(async ()=> +{ + + // var RiotExists = await new LeagueAPI().verifyUserName('hc12', 'EUW'); + // console.log(RiotExists) + const crypto = await new _Crypto('a@a.pt', 'aA123456').bouncer(); + console.log(crypto) + // const Hash = crypto.hash(); + // const eHash = crypto.eHash(); + // const isNew = await crypto.isNew(eHash); + // console.log(Hash, eHash, isNew) +})() \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 717c2e6..47c842e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1631,6 +1631,13 @@ "resolved" "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" "version" "2.0.4" +"@mongodb-js/saslprep@^1.1.0": + "integrity" "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==" + "resolved" "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "sparse-bitfield" "^3.0.3" + "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": "integrity" "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==" "resolved" "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz" @@ -2274,6 +2281,19 @@ "resolved" "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.4.tgz" "version" "2.0.4" +"@types/webidl-conversions@*": + "integrity" "sha512-8hKOnOan+Uu+NgMaCouhg3cT9x5fFZ92Jwf+uDLXLu/MFRbXxlWwGeQY7KVHkeSft6RvY+tdxklUBuyY9eIEKg==" + "resolved" "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.1.tgz" + "version" "7.0.1" + +"@types/whatwg-url@^8.2.1": + "integrity" "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==" + "resolved" "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz" + "version" "8.2.2" + dependencies: + "@types/node" "*" + "@types/webidl-conversions" "*" + "@types/ws@^8.5.5": "integrity" "sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==" "resolved" "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz" @@ -3166,6 +3186,11 @@ dependencies: "node-int64" "^0.4.0" +"bson@^5.4.0", "bson@^5.5.0": + "integrity" "sha512-B+QB4YmDx9RStKv8LLSl/aVIEV3nYJc3cJNNTK2Cd1TL+7P+cNpw9mAPeCgc5K+j01Dv6sxUzcITXDx7ZU3F0w==" + "resolved" "https://registry.npmjs.org/bson/-/bson-5.5.0.tgz" + "version" "5.5.0" + "buffer-crc32@~0.2.3": "integrity" "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" "resolved" "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" @@ -3848,7 +3873,7 @@ dependencies: "ms" "^2.1.1" -"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.4", "debug@4": +"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.4", "debug@4", "debug@4.x": "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" "version" "4.3.4" @@ -5570,6 +5595,11 @@ "has" "^1.0.3" "side-channel" "^1.0.4" +"ip@^2.0.0": + "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + "version" "2.0.0" + "ipaddr.js@^2.0.1": "integrity" "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==" "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz" @@ -6593,6 +6623,11 @@ "object.assign" "^4.1.4" "object.values" "^1.1.6" +"kareem@2.5.1": + "integrity" "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==" + "resolved" "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz" + "version" "2.5.1" + "keyv@^4.0.0", "keyv@^4.5.3": "integrity" "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==" "resolved" "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz" @@ -6832,6 +6867,11 @@ dependencies: "fs-monkey" "^1.0.4" +"memory-pager@^1.0.2": + "integrity" "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + "resolved" "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz" + "version" "1.5.0" + "merge-descriptors@1.0.1": "integrity" "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" @@ -6935,6 +6975,50 @@ dependencies: "minimist" "^1.2.6" +"mongodb-connection-string-url@^2.6.0": + "integrity" "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==" + "resolved" "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz" + "version" "2.6.0" + dependencies: + "@types/whatwg-url" "^8.2.1" + "whatwg-url" "^11.0.0" + +"mongodb@5.9.0": + "integrity" "sha512-g+GCMHN1CoRUA+wb1Agv0TI4YTSiWr42B5ulkiAfLLHitGK1R+PkSAf3Lr5rPZwi/3F04LiaZEW0Kxro9Fi2TA==" + "resolved" "https://registry.npmjs.org/mongodb/-/mongodb-5.9.0.tgz" + "version" "5.9.0" + dependencies: + "bson" "^5.5.0" + "mongodb-connection-string-url" "^2.6.0" + "socks" "^2.7.1" + optionalDependencies: + "@mongodb-js/saslprep" "^1.1.0" + +"mongoose@^7.6.0": + "integrity" "sha512-ztQ12rm0BQN5i7LB6xhWX4l9a9w2aa3jEwa/mM2vAutYJRyAwOzcusvKJBULMzFHyUDBOVW15grisexypgMIWA==" + "resolved" "https://registry.npmjs.org/mongoose/-/mongoose-7.6.0.tgz" + "version" "7.6.0" + dependencies: + "bson" "^5.4.0" + "kareem" "2.5.1" + "mongodb" "5.9.0" + "mpath" "0.9.0" + "mquery" "5.0.0" + "ms" "2.1.3" + "sift" "16.0.1" + +"mpath@0.9.0": + "integrity" "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" + "resolved" "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz" + "version" "0.9.0" + +"mquery@5.0.0": + "integrity" "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==" + "resolved" "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "debug" "4.x" + "ms@^2.1.1", "ms@2.1.2": "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" @@ -8789,6 +8873,11 @@ "get-intrinsic" "^1.0.2" "object-inspect" "^1.9.0" +"sift@16.0.1": + "integrity" "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + "resolved" "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz" + "version" "16.0.1" + "signal-exit@^3.0.2", "signal-exit@^3.0.3": "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" @@ -8809,6 +8898,11 @@ "resolved" "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" "version" "4.0.0" +"smart-buffer@^4.2.0": + "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + "version" "4.2.0" + "sockjs@^0.3.24": "integrity" "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==" "resolved" "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" @@ -8818,6 +8912,14 @@ "uuid" "^8.3.2" "websocket-driver" "^0.7.4" +"socks@^2.7.1": + "integrity" "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==" + "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "ip" "^2.0.0" + "smart-buffer" "^4.2.0" + "source-list-map@^2.0.0", "source-list-map@^2.0.1": "integrity" "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" "resolved" "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" @@ -8882,6 +8984,13 @@ "resolved" "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" "version" "1.4.8" +"sparse-bitfield@^3.0.3": + "integrity" "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==" + "resolved" "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "memory-pager" "^1.0.2" + "spdy-transport@^3.0.0": "integrity" "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==" "resolved" "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" @@ -9379,6 +9488,13 @@ dependencies: "punycode" "^2.1.1" +"tr46@^3.0.0": + "integrity" "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "punycode" "^2.1.1" + "tryer@^1.0.1": "integrity" "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" "resolved" "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz" @@ -9712,6 +9828,11 @@ "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" "version" "6.1.0" +"webidl-conversions@^7.0.0": + "integrity" "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" + "version" "7.0.0" + "webpack-dev-middleware@^5.3.1": "integrity" "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==" "resolved" "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" @@ -9849,6 +9970,14 @@ "resolved" "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" "version" "2.3.0" +"whatwg-url@^11.0.0": + "integrity" "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz" + "version" "11.0.0" + dependencies: + "tr46" "^3.0.0" + "webidl-conversions" "^7.0.0" + "whatwg-url@^7.0.0": "integrity" "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==" "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz"