From 0597cd794666188dd83793729684d08354e46cdb Mon Sep 17 00:00:00 2001 From: Skipper Seabold Date: Mon, 18 May 2020 09:37:58 -0500 Subject: [PATCH 1/2] Test auth with special characters --- __tests__/src/services/connectionUrl.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/__tests__/src/services/connectionUrl.test.ts b/__tests__/src/services/connectionUrl.test.ts index 1def9e8d..4ff4b060 100644 --- a/__tests__/src/services/connectionUrl.test.ts +++ b/__tests__/src/services/connectionUrl.test.ts @@ -20,4 +20,11 @@ describe('sanitize', () => { ConnectionUrl.sanitize('postgres://awsuser@some.hostname.com/dbname') ).toEqual('postgres://awsuser@some.hostname.com/dbname'); }); + + it('with special characters password', () => { + expect( + ConnectionUrl.sanitize('postgres://foo:b@r@host/db?foo=bar') + ).toEqual('postgres://foo:•••••••@host/db?foo=bar'); + }); + }); From 64fe5f06f44101fc140b9a6d4788361b363d4beb Mon Sep 17 00:00:00 2001 From: Skipper Seabold Date: Fri, 15 May 2020 15:06:20 -0500 Subject: [PATCH 2/2] Parse URLs with special characters in auth --- package-lock.json | 23 ++++++++++++++++++++++- package.json | 2 +- src/services/connectionUrl.ts | 17 +++++++++++------ 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 77d04b83..610ad041 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "jupyterlab-sql", - "version": "0.3.3-dev", + "version": "0.3.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -5283,6 +5283,11 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, "querystringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", @@ -6411,6 +6416,22 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, "url-parse": { "version": "1.4.7", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", diff --git a/package.json b/package.json index 1b38040f..50ad801b 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "classnames": "^2.2.6", "react": "~16.8.4", "react-dom": "~16.8.4", - "url-parse": "^1.4.4", + "url": "^0.11.0", "uuid": "^3.3.2" }, "devDependencies": { diff --git a/src/services/connectionUrl.ts b/src/services/connectionUrl.ts index 9630a61c..6e668b96 100644 --- a/src/services/connectionUrl.ts +++ b/src/services/connectionUrl.ts @@ -1,12 +1,17 @@ -import * as urlparse from 'url-parse'; +import { parse } from 'url'; export namespace ConnectionUrl { export function sanitize(url: string): string { - const parsedUrl = urlparse(url); - const { password } = parsedUrl; - if (password && password !== '') { - parsedUrl.set('password', '•••••••'); + const parsedUrl = parse(url); + const { auth } = parsedUrl; + if (((auth !== undefined) && (auth !== null)) && auth.includes(":")) { + var [username, password] = auth.split(":") + if (password && password !== '') { + password = '•••••••'; + } + return `${parsedUrl.protocol}//${username}:${password}@${parsedUrl.host}${parsedUrl.path}` + } else { + return parsedUrl.href } - return parsedUrl.href; } }