From a91de05af9540295ee1e4e1ff3d2585df815a084 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Thu, 25 Apr 2019 15:16:36 +0000 Subject: [PATCH] fix: modified uri parsing for mongodb (#2282) --- package-lock.json | 17 ++++++++++++++--- package.json | 1 + src/core/server/config.ts | 14 ++++++++------ src/types/mongodb-core.d.ts | 25 +++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 9 deletions(-) create mode 100644 src/types/mongodb-core.d.ts diff --git a/package-lock.json b/package-lock.json index 27b87d29d..04a06e0cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18818,6 +18818,17 @@ "safe-buffer": "^5.1.2" }, "dependencies": { + "mongodb-core": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.1.tgz", + "integrity": "sha512-vvnl5F6QhvFhi28umNx+Ymyb8wVQOhvEjU30JF3TjBBomS2tamJFK4eA0uwOa6FxLi9qCQWejbF66B0rb/UUiw==", + "requires": { + "bson": "^1.1.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -18826,9 +18837,9 @@ } }, "mongodb-core": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.1.tgz", - "integrity": "sha512-vvnl5F6QhvFhi28umNx+Ymyb8wVQOhvEjU30JF3TjBBomS2tamJFK4eA0uwOa6FxLi9qCQWejbF66B0rb/UUiw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.3.tgz", + "integrity": "sha512-UyI0rmvPPkjOJV8XGWa9VCTq7R4hBVipimhnAXeSXnuAPjuTqbyfA5Ec9RcYJ1Hhu+ISnc8bJ1KfGZd4ZkYARQ==", "requires": { "bson": "^1.1.1", "require_optional": "^1.0.1", diff --git a/package.json b/package.json index f05021afa..65e455e20 100644 --- a/package.json +++ b/package.json @@ -94,6 +94,7 @@ "metascraper-image": "^3.11.8", "metascraper-title": "^3.11.8", "mongodb": "^3.2.1", + "mongodb-core": "^3.2.3", "ms": "^2.1.1", "node-fetch": "^2.2.0", "nodemailer": "^4.6.7", diff --git a/src/core/server/config.ts b/src/core/server/config.ts index 019da0cea..9652bfcb2 100644 --- a/src/core/server/config.ts +++ b/src/core/server/config.ts @@ -1,19 +1,21 @@ import convict from "convict"; import Joi from "joi"; +import { parseConnectionString } from "mongodb-core"; import os from "os"; import { LOCALES } from "talk-common/helpers/i18n/locales"; +import { InternalError } from "./errors"; + // Add custom format for the mongo uri scheme. convict.addFormat({ name: "mongo-uri", validate: (url: string) => { - Joi.assert( - url, - Joi.string().uri({ - scheme: ["mongodb"], - }) - ); + parseConnectionString(url, err => { + if (err) { + throw new InternalError(err, "invalid mongo-uri"); + } + }); }, }); diff --git a/src/types/mongodb-core.d.ts b/src/types/mongodb-core.d.ts new file mode 100644 index 000000000..287d31cbc --- /dev/null +++ b/src/types/mongodb-core.d.ts @@ -0,0 +1,25 @@ +declare module "mongodb-core" { + export interface ParsedConnectionString { + hosts: string[]; + auth: {}; + options: {}; + } + + export interface ParseConnectionStringOptions { + /** + * Whether the parser should translate options back into camelCase after normalization. + */ + caseTranslate?: boolean; + } + + /** https://github.com/mongodb-js/mongodb-core/blob/master/lib/uri_parser.js */ + export function parseConnectionString( + uri: string, + options?: ParseConnectionStringOptions, + callback?: (error: Error, result: ParsedConnectionString) => void + ): void; + export function parseConnectionString( + uri: string, + callback?: (error: Error, result: ParsedConnectionString) => void + ): void; +}