Add support to connect to third-party mongodb instance via tls

This commit is contained in:
Martin Kleinschrodt 2021-08-12 14:00:23 +02:00
parent c7a117fd31
commit 2a075877a8
5 changed files with 355 additions and 8 deletions

32
packages/server/do-ca.crt Normal file
View File

@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFgjCCA2qgAwIBAgIRAKLlzz8ks03ehk6VrsxTbjQwDQYJKoZIhvcNAQELBQAw
WTEVMBMGA1UEChMMRGlnaXRhbE9jZWFuMUAwPgYDVQQDEzdtb25nb2RiIENsdXN0
ZXIgQ0E6YTJlNWNmM2YtMjRiMy00ZGRlLTg2NGUtOTVhZWNjNTM2ZTM0MB4XDTIx
MDgwNzEyMDQzN1oXDTQxMDgwNzEyMDQzN1owWTEVMBMGA1UEChMMRGlnaXRhbE9j
ZWFuMUAwPgYDVQQDEzdtb25nb2RiIENsdXN0ZXIgQ0E6YTJlNWNmM2YtMjRiMy00
ZGRlLTg2NGUtOTVhZWNjNTM2ZTM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEAw4BpmDYtsVfy82bp+/AoW/3wYGAUOMItI/U0ZTMTqf/D8+B/7WHEcLf/
xYTFcvNnrBL8f2Q+rlfTMK0TIFYtI9rs7ptGKSmhi59PdHdFMjrMlEitCmF6qmlr
TlG4+6mh27N2eEX8oDnQSsudSEzNePGbEXXUdg+uf7JSo5yP1T3QIr4kOgQ6yMQ9
ScS7PCj/hgIsurG6vqoUt0wrYxfg+XiCpTqfN6Q1HO+nOzATNM5ayyixX3z0Azx3
4wwTv96yIhyrjpgHuZNlP8rkh/NA0Cu0HmVPt8J66uLBp/Qu0DAK0fBtKh2knNDW
WeYAtSvnGoRNxz4oJGE1J1KAgCkfu9jj76LkJ3iH9uIgO3D1mDrz9fjZvxRNps7V
AJQjJt7EHKNn49z0putiJW4pUtreTIONYymYMLf7eYf7ts/hYN5S6XmIQ0fffWgY
FpjP+qX1M/3GbRcbJaJUh6zgfDOYmPgt/7/1BGMc/QG1wjvxEkxrEfNg/lzzJ9cY
IfgNANbEV8nnkfcjZKdHT2AIucN68FiohLPISpNjvSlcEeSa+rmzvSKMgM42gcoS
Nty3l/D1dk3TFsrEAMye2OwrzgYG5Da3sl5r9RUInmRMDfWkUjyukqsUyKbuJ8aZ
seSjFYRCS+WWgOVYhawFK7MdI5cSsD28CbptKr3nK4fertnGI+cCAwEAAaNFMEMw
DgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFARj
0ZGTveARlnErOXv15Y0822YlMA0GCSqGSIb3DQEBCwUAA4ICAQAfNU3sPE3gCplN
iioXGnphcBagtw21ncaksGXwdoo+xB36S1iNRd0H3yhvp3AguAF7SuoFTPKfHbGZ
vYu53B9gZ7FZtGl/noiyPHPpzbP+qvTOldYStuQaLL8p1SIBFE/fyTsBBA7TuZPx
FT9GHP8zmKeFsQ8UqJQYh2KhjyxJGyXIhFj6uxx92DnAI25AL/9HM0pz1j8rYObV
aMlxMc9fEtrklZdkKZb47L4RjeG8MvmNW9Wb9xWtau5gtQmmmFdql2VTaFPlkEG0
+ptg1ccmO0Y0OTWBGyyo5Apf1X84YK1oJ43rFVuS7KF1QxPGvITia2GA1l4TT+eQ
H2z4TVGGaTxUYjFTLtTXMaGCbu0wIoUxgzX3aZ1gW0f3XoPMM5f79+EMAwvu9ZS3
2ZaK8lV73TDl6e319gJzlqlFAQa90KTjRpxSa0mGkliC97gyzXA5HXSd0pGhQaur
5hqKHNPn/cnAtimOk67Uw71LXyfxKQencR8vL0pcXNbMCTazswvfUooA2djoY0hd
rqbFiVgYpXf14O9GISrFQxGF9TFU3xRSek/nhG2Pndrp2XoBavy9TXRrGJYuJBnA
RXdTYwn2bELaN57U6HC5g58hVOUoBLQrcB99Uy62Z4Jt2dK5TBz4cXf3wYhEkWLd
D8KMqxTOSuI8hcfo7uOrohMHEciL5A==
-----END CERTIFICATE-----

View File

@ -20,6 +20,7 @@
"date-fns": "^2.22.1",
"fs-extra": "^10.0.0",
"level": "^7.0.0",
"mongodb": "^4.1.0",
"nodemailer": "^6.6.1",
"stripe": "^8.150.0",
"ts-node": "^10.0.0",
@ -1207,6 +1208,20 @@
"stripe": "*"
}
},
"node_modules/@types/webidl-conversions": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz",
"integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q=="
},
"node_modules/@types/whatwg-url": {
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz",
"integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==",
"dependencies": {
"@types/node": "*",
"@types/webidl-conversions": "*"
}
},
"node_modules/@ungap/promise-all-settled": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
@ -1416,6 +1431,40 @@
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"node_modules/bson": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/bson/-/bson-4.4.1.tgz",
"integrity": "sha512-Uu4OCZa0jouQJCKOk1EmmyqtdWAP5HVLru4lQxTwzJzxT+sJ13lVpEZU/MATDxtHiekWMAL84oQY3Xn1LpJVSg==",
"dependencies": {
"buffer": "^5.6.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/bson/node_modules/buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"node_modules/buffer": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
@ -1718,6 +1767,14 @@
"node": ">=10"
}
},
"node_modules/denque": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz",
"integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==",
"engines": {
"node": ">=0.10"
}
},
"node_modules/diff": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
@ -2351,6 +2408,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"node_modules/log-symbols": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
@ -2373,6 +2435,12 @@
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
},
"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/minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@ -2457,6 +2525,31 @@
"url": "https://opencollective.com/mochajs"
}
},
"node_modules/mongodb": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.1.0.tgz",
"integrity": "sha512-Gx9U9MsFWgJ3E0v4oHAdWvYTGBznNYPCkhmD/3i/kPTY/URnPfHD5/6VoKUFrdgQTK3icFiM9976hVbqCRBO9Q==",
"dependencies": {
"bson": "^4.4.0",
"denque": "^1.5.0",
"mongodb-connection-string-url": "^1.0.1"
},
"engines": {
"node": ">=12.9.0"
},
"optionalDependencies": {
"saslprep": "^1.0.0"
}
},
"node_modules/mongodb-connection-string-url": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-1.1.2.tgz",
"integrity": "sha512-mp5lv4guWuykOpkwNNqQ0tKKytuJUjL/aC/bu/DqoJVWL5NSh4j/u+gJ+EiOdweLujHyq6JZZqcTVipHhL5xRg==",
"dependencies": {
"@types/whatwg-url": "^8.0.0",
"whatwg-url": "^8.4.0"
}
},
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@ -2628,6 +2721,14 @@
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
},
"node_modules/punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"engines": {
"node": ">=6"
}
},
"node_modules/pvtsutils": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.2.0.tgz",
@ -2769,6 +2870,18 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/saslprep": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
"integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
"optional": true,
"dependencies": {
"sparse-bitfield": "^3.0.3"
},
"engines": {
"node": ">=6"
}
},
"node_modules/serialize-javascript": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
@ -2808,6 +2921,15 @@
"source-map": "^0.6.0"
}
},
"node_modules/sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
"optional": true,
"dependencies": {
"memory-pager": "^1.0.2"
}
},
"node_modules/string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@ -2901,6 +3023,17 @@
"node": ">=8.0"
}
},
"node_modules/tr46": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
"integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
"dependencies": {
"punycode": "^2.1.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/tree-kill": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
@ -3096,6 +3229,27 @@
"uuid": "dist/bin/uuid"
}
},
"node_modules/webidl-conversions": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
"integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
"engines": {
"node": ">=10.4"
}
},
"node_modules/whatwg-url": {
"version": "8.7.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
"integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
"dependencies": {
"lodash": "^4.7.0",
"tr46": "^2.1.0",
"webidl-conversions": "^6.1.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@ -4325,6 +4479,20 @@
"stripe": "*"
}
},
"@types/webidl-conversions": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz",
"integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q=="
},
"@types/whatwg-url": {
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz",
"integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==",
"requires": {
"@types/node": "*",
"@types/webidl-conversions": "*"
}
},
"@ungap/promise-all-settled": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
@ -4484,6 +4652,25 @@
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"bson": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/bson/-/bson-4.4.1.tgz",
"integrity": "sha512-Uu4OCZa0jouQJCKOk1EmmyqtdWAP5HVLru4lQxTwzJzxT+sJ13lVpEZU/MATDxtHiekWMAL84oQY3Xn1LpJVSg==",
"requires": {
"buffer": "^5.6.0"
},
"dependencies": {
"buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
}
}
},
"buffer": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
@ -4701,6 +4888,11 @@
"inherits": "^2.0.3"
}
},
"denque": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz",
"integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ=="
},
"diff": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
@ -5147,6 +5339,11 @@
"p-locate": "^5.0.0"
}
},
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"log-symbols": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
@ -5166,6 +5363,12 @@
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
},
"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
},
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@ -5230,6 +5433,26 @@
"yargs-unparser": "2.0.0"
}
},
"mongodb": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.1.0.tgz",
"integrity": "sha512-Gx9U9MsFWgJ3E0v4oHAdWvYTGBznNYPCkhmD/3i/kPTY/URnPfHD5/6VoKUFrdgQTK3icFiM9976hVbqCRBO9Q==",
"requires": {
"bson": "^4.4.0",
"denque": "^1.5.0",
"mongodb-connection-string-url": "^1.0.1",
"saslprep": "^1.0.0"
}
},
"mongodb-connection-string-url": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-1.1.2.tgz",
"integrity": "sha512-mp5lv4guWuykOpkwNNqQ0tKKytuJUjL/aC/bu/DqoJVWL5NSh4j/u+gJ+EiOdweLujHyq6JZZqcTVipHhL5xRg==",
"requires": {
"@types/whatwg-url": "^8.0.0",
"whatwg-url": "^8.4.0"
}
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@ -5348,6 +5571,11 @@
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
},
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"pvtsutils": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.2.0.tgz",
@ -5437,6 +5665,15 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"saslprep": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
"integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
"optional": true,
"requires": {
"sparse-bitfield": "^3.0.3"
}
},
"serialize-javascript": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
@ -5470,6 +5707,15 @@
"source-map": "^0.6.0"
}
},
"sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
"optional": true,
"requires": {
"memory-pager": "^1.0.2"
}
},
"string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@ -5536,6 +5782,14 @@
"is-number": "^7.0.0"
}
},
"tr46": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
"integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
"requires": {
"punycode": "^2.1.1"
}
},
"tree-kill": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
@ -5657,6 +5911,21 @@
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
},
"webidl-conversions": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
"integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w=="
},
"whatwg-url": {
"version": "8.7.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
"integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
"requires": {
"lodash": "^4.7.0",
"tr46": "^2.1.0",
"webidl-conversions": "^6.1.0"
}
},
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",

View File

@ -31,6 +31,7 @@
"date-fns": "^2.22.1",
"fs-extra": "^10.0.0",
"level": "^7.0.0",
"mongodb": "^4.1.0",
"nodemailer": "^6.6.1",
"stripe": "^8.150.0",
"ts-node": "^10.0.0",

View File

@ -5,7 +5,7 @@ import { NodePlatform } from "./platform";
import { HTTPReceiver } from "./http";
import { LevelDBStorage } from "./storage";
// import { EmailMessenger } from "./messenger";
import { FileSystemStorage } from "./attachment";
import { S3Storage } from "./attachment";
import { StripeBillingProvider } from "./billing";
import { ReplServer } from "./repl";
import { NodeLegacyServer } from "./legacy";
@ -13,6 +13,7 @@ import { MessengerMFAProvider } from "@padloc/core/src/mfa";
import { WebAuthnServer } from "./mfa";
// import { ConsoleMessenger } from "@padloc/core/src/messenger";
import { EmailMessenger } from "./messenger";
import { MongoDBStorage } from "./mongodb";
async function init() {
setPlatform(new NodePlatform());
@ -43,12 +44,30 @@ async function init() {
from: process.env.PL_EMAIL_FROM || "",
});
// const messenger = new ConsoleMessenger();
const storage = new LevelDBStorage(process.env.PL_DB_PATH || process.env.PL_DATA_DIR || "data");
// const storage = new LevelDBStorage(process.env.PL_DB_PATH || process.env.PL_DATA_DIR || "data");
const storage = new MongoDBStorage({
host: process.env.PL_DATA_STORAGE_HOST!,
tls: process.env.PL_DATA_STORAGE_TLS?.toLocaleLowerCase() === "true",
tlsCAFile: process.env.PL_DATA_STORAGE_TLS_CA_FILE,
port: process.env.PL_DATA_STORAGE_PORT,
protocol: process.env.PL_DATA_STORAGE_PROTOCOL,
database: process.env.PL_DATA_STORAGE_DATABASE,
username: process.env.PL_DATA_STORAGE_USERNAME!,
password: process.env.PL_DATA_STORAGE_PASSWORD!,
});
await storage.init();
const logger = new Logger(new LevelDBStorage(process.env.PL_LOG_DIR || "logs"));
const attachmentStorage = new FileSystemStorage({
path: process.env.PL_ATTACHMENTS_PATH || process.env.PL_ATTACHMENTS_DIR || "attachments",
// const attachmentStorage = new FileSystemStorage({
// path: process.env.PL_ATTACHMENTS_PATH || process.env.PL_ATTACHMENTS_DIR || "attachments",
// });
const attachmentStorage = new S3Storage({
region: process.env.PL_ATTACHMENT_STORAGE_REGION!,
endpoint: process.env.PL_ATTACHMENT_STORAGE_ENDPOINT!,
accessKeyId: process.env.PL_ATTACHMENT_STORAGE_ACCESS_KEY_ID!,
secretAccessKey: process.env.PL_ATTACHMENT_STORAGE_SECRET_ACCESS_KEY!,
bucket: process.env.PL_ATTACHMENT_STORAGE_BUCKET!,
});
// const billingProvider = new StubBillingProvider();

View File

@ -1,13 +1,41 @@
import { MongoClient, Db } from "mongodb";
import { Storage, Storable, StorableConstructor, StorageListOptions } from "@padloc/core/src/storage";
import { Err, ErrorCode } from "@padloc/core/src/error";
import path from "path";
export interface MongoDBStorageConfig {
host: string;
port?: string;
username: string;
password: string;
database?: string;
protocol?: string;
tls?: boolean;
tlsCAFile?: string;
}
export class MongoDBStorage implements Storage {
readonly config: MongoDBStorageConfig;
private _client: MongoClient;
private _db!: Db;
constructor() {
this._client = new MongoClient("mongodb://localhost:27017");
constructor(config: MongoDBStorageConfig) {
this.config = config;
let { username, password, host, port, protocol = "mongodb", database, tls, tlsCAFile } = config;
tlsCAFile = tlsCAFile && path.resolve(process.cwd(), tlsCAFile);
console.log(config);
this._client = new MongoClient(
`${protocol}://${host}${database ? `/${database}` : ""}${port ? `:${port}` : ""}`,
{
auth: {
username,
password,
},
tls,
tlsCAFile,
}
);
}
async init() {
@ -27,9 +55,7 @@ export class MongoDBStorage implements Storage {
async save<T extends Storable>(obj: T) {
const collection = this._db.collection(obj.kind);
console.log("saving data to collection: ", collection);
await collection.replaceOne({ _id: obj.id }, { ...obj.toRaw(), _id: obj.id }, { upsert: true });
console.log("done saving", await collection.find().toArray());
}
async delete<T extends Storable>(obj: T) {