From e2521fcc6c62ad786eb15f723efeb4bfceef0e6e Mon Sep 17 00:00:00 2001 From: Peter Kosztolanyi Date: Sat, 25 Jan 2020 11:23:04 +0000 Subject: [PATCH 001/658] Add snowflake driver --- server/drivers/index.js | 1 + server/drivers/snowflake/index.js | 225 +++++++++++++++++ server/drivers/snowflake/test.js | 78 ++++++ server/drivers/snowflake/test.sh | 12 + server/package-lock.json | 397 +++++++++++++++++++++++++++++- server/package.json | 1 + 6 files changed, 711 insertions(+), 3 deletions(-) create mode 100644 server/drivers/snowflake/index.js create mode 100644 server/drivers/snowflake/test.js create mode 100755 server/drivers/snowflake/test.sh diff --git a/server/drivers/index.js b/server/drivers/index.js index 6ef65fa41..0170a3b94 100644 --- a/server/drivers/index.js +++ b/server/drivers/index.js @@ -96,6 +96,7 @@ requireValidate('../drivers/sqlserver'); requireValidate('../drivers/unixodbc', true); requireValidate('../drivers/vertica'); requireValidate('../drivers/cassandra'); +requireValidate('../drivers/snowflake'); if (debug || process.env.SQLPAD_TEST === 'true') { requireValidate('../drivers/mock'); diff --git a/server/drivers/snowflake/index.js b/server/drivers/snowflake/index.js new file mode 100644 index 000000000..5154d9898 --- /dev/null +++ b/server/drivers/snowflake/index.js @@ -0,0 +1,225 @@ +const snowflake = require('snowflake-sdk'); +const { formatSchemaQueryResults } = require('../utils'); + +const id = 'snowflake'; +const name = 'Snowflake'; + +function getSchemaSql(schema) { + const whereSql = schema + ? `WHERE t.table_schema = UPPER('${schema}')` + : `WHERE t.table_schema NOT IN ( + 'information_schema' + )`; + return ` + SELECT + t.table_schema, + t.table_name, + c.column_name, + c.data_type + FROM + INFORMATION_SCHEMA.TABLES t + JOIN INFORMATION_SCHEMA.COLUMNS c + ON t.table_catalog = c.table_catalog AND t.table_schema = c.table_schema AND t.table_name = c.table_name + ${whereSql} + ORDER BY + t.table_schema, + t.table_name, + c.ordinal_position + `; +} + +/** + * Run query for connection + * Should return { rows, incomplete } + * @param {string} query + * @param {object} connection + */ +function runQuery(query, connection) { + const sfConfig = { + account: connection.account, + username: connection.username, + password: connection.password, + warehouse: connection.warehouse, + database: connection.database, + schema: connection.schema, + preQueryStatements: connection.preQueryStatements + }; + + let incomplete; + const rows = []; + + return new Promise((resolve, reject) => { + const sfConnection = snowflake.createConnection(sfConfig); + let preQueryCompletes = 0; + + sfConnection.connect(err => { + if (err) { + return reject(err); + } + let queryError; + let resultsSent = false; + + function continueOn(onFinished = () => {}) { + if (!resultsSent) { + if (queryError) { + resultsSent = true; + return reject(queryError); + } + onFinished(); + } + } + + function _runQuery(query, params = {}) { + const addRowsToResults = params.hasOwnProperty('addRowsToResults') + ? params.addRowsToResults + : true; + const closeConnection = params.hasOwnProperty('closeConnection') + ? params.closeConnection + : true; + const onCompleted = + params.onCompleted || + (() => { + return resolve({ rows, incomplete }); + }); + + sfConnection + .execute({ sqlText: query }) + .streamRows() + .on('error', function(err) { + queryError = err; + sfConnection.destroy(); + continueOn(onCompleted); + }) + .on('data', function(row) { + if (addRowsToResults) { + // If we haven't hit the max yet add row to results + if (rows.length < connection.maxRows) { + return rows.push(row); + } + + // Too many rows + incomplete = true; + + // Destroy the underlying connection + if (closeConnection) { + sfConnection.destroy(); + } + continueOn(onCompleted); + } + }) + .on('end', function() { + if (closeConnection) { + sfConnection.destroy(); + } + continueOn(onCompleted); + }); + } + + // Run with pre query statements + if (sfConfig.preQueryStatements) { + // Statements split and filtered by JS because Snowflake driver not supporting multiple SQL statements + const preQueries = sfConfig.preQueryStatements + .trim() + .split(';') + .filter(q => { + return q; + }); + // Run pre queries in parallel + preQueries.forEach(q => { + // Don't add rows to results and keep the connection open for the next query + _runQuery(q, { + addRowsToResults: false, + closeConnection: false, + + // Count the number of finished pre query statements + onCompleted: () => { + preQueryCompletes += 1; + + // Run the actual query only when every pre query statement finished + if (preQueryCompletes === preQueries.length) { + _runQuery(query); + } + } + }); + }); + } else { + // No pre query statements, run the actual query immediately + _runQuery(query); + } + }); + }); +} + +/** + * Test connectivity of connection + * @param {*} connection + */ +function testConnection(connection) { + const query = "SELECT 'success' AS TestQuery;"; + return runQuery(query, connection); +} + +/** + * Get schema for connection + * @param {*} connection + */ +function getSchema(connection) { + const schemaSql = getSchemaSql(connection.schema); + return runQuery(schemaSql, connection).then(queryResult => + formatSchemaQueryResults(queryResult) + ); +} + +const fields = [ + { + key: 'account', + formType: 'TEXT', + label: 'Account' + }, + { + key: 'username', + formType: 'TEXT', + label: 'Database Username' + }, + { + key: 'password', + formType: 'PASSWORD', + label: 'Database Password' + }, + { + key: 'warehouse', + formType: 'TEXT', + label: 'Warehouse' + }, + { + key: 'database', + formType: 'TEXT', + label: 'Database' + }, + { + key: 'schema', + formType: 'TEXT', + label: 'Schema' + }, + { + key: 'role', + formType: 'TEXT', + label: 'Role' + }, + { + key: 'preQueryStatements', + formType: 'TEXTAREA', + label: 'Pre-query Statements (Optional)', + placeholder: + 'Use to enforce session parameters like:\n ALTER SESSION SET statement_timeout_in_seconds = 15;' + } +]; + +module.exports = { + id, + name, + fields, + getSchema, + runQuery, + testConnection +}; diff --git a/server/drivers/snowflake/test.js b/server/drivers/snowflake/test.js new file mode 100644 index 000000000..0b584d104 --- /dev/null +++ b/server/drivers/snowflake/test.js @@ -0,0 +1,78 @@ +const assert = require('assert'); +const snowflake = require('./index.js'); + +const connection = { + name: 'test snowflake', + driver: 'snowflake', + account: process.env.SNOWFLAKE_ACCOUNT, + username: process.env.SNOWFLAKE_USERNAME, + password: process.env.SNOWFLAKE_PASSWORD, + warehouse: process.env.SNOWFLAKE_WAREHOUSE, + database: process.env.SNOWFLAKE_DATABASE, + schema: process.env.SNOWFLAKE_SCHEMA, + maxRows: 50000 +}; + +const dropTable = 'DROP TABLE IF EXISTS test;'; +const createTable = 'CREATE TABLE test (id int);'; +const inserts = 'INSERT INTO test (id) VALUES (1), (2), (3);'; + +describe('drivers/snowflake', function() { + before(function() { + this.timeout(10000); + return snowflake + .runQuery(dropTable, connection) + .then(() => snowflake.runQuery(createTable, connection)) + .then(() => snowflake.runQuery(inserts, connection)); + }); + + it('tests connection', function() { + return snowflake.testConnection(connection); + }); + + it('getSchema()', function() { + this.timeout(60000); + return snowflake.getSchema(connection).then(schemaInfo => { + assert(schemaInfo.SQLPAD, 'SQLPAD'); + assert(schemaInfo.SQLPAD.TEST, 'SQLPAD.TEST'); + const columns = schemaInfo.SQLPAD.TEST; + assert.equal(columns.length, 1, 'columns.length'); + assert.equal(columns[0].table_schema, 'SQLPAD', 'TABLE_SCHEMA'); + assert.equal(columns[0].table_name, 'TEST', 'TABLE_NAME'); + assert.equal(columns[0].column_name, 'ID', 'COLUMN_NAME'); + assert(columns[0].hasOwnProperty('data_type'), 'DATA_TYPE'); + }); + }); + + it('runQuery under limit', function() { + return snowflake + .runQuery('SELECT id FROM test WHERE id = 1;', connection) + .then(results => { + assert(!results.incomplete, 'not incomplete'); + assert.equal(results.rows.length, 1, 'rows length'); + }); + }); + + it('runQuery over limit', function() { + const limitedConnection = { ...connection, maxRows: 2 }; + return snowflake + .runQuery('SELECT * FROM test;', limitedConnection) + .then(results => { + assert(results.incomplete, 'incomplete'); + assert.equal(results.rows.length, 2, 'row length'); + }); + }); + + it('returns descriptive error message', function() { + let error; + return snowflake + .runQuery('SELECT * FROM missing_table;', connection) + .catch(e => { + error = e; + }) + .then(() => { + assert(error); + assert(error.toString().indexOf('MISSING_TABLE') > -1); + }); + }); +}); diff --git a/server/drivers/snowflake/test.sh b/server/drivers/snowflake/test.sh new file mode 100755 index 000000000..46ddf8859 --- /dev/null +++ b/server/drivers/snowflake/test.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# Running the tests requires a real Snowflake account because Snowflake +# does not provide a publicly available docker image that we can use for running tests locally +# +# To run the tests, update the below environment variables pointing to a real Snowflake account +export SNOWFLAKE_ACCOUNT=rtXXXXX._region_ +export SNOWFLAKE_USERNAME=_username_ +export SNOWFLAKE_PASSWORD=_password_ +export SNOWFLAKE_WAREHOUSE=_warehouse_ +export SNOWFLAKE_DATABASE=_database_ +export SNOWFLAKE_SCHEMA=SQLPAD +npx mocha ./test.js diff --git a/server/package-lock.json b/server/package-lock.json index 460c92f66..614365ca5 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -137,6 +137,22 @@ "printj": "~1.1.0" } }, + "agent-base": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "requires": { + "extend": "~3.0.0", + "semver": "~5.0.1" + }, + "dependencies": { + "semver": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=" + } + } + }, "ajv": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", @@ -226,6 +242,33 @@ "safer-buffer": "~2.1.0" } }, + "asn1.js": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.3.0.tgz", + "integrity": "sha512-WHnQJFcOrIWT1RLOkFFBQkFVvyt9BPOOrH+Dp152Zk4R993rSzXUGPmkybIcUFhHE2d/iHH+nCaOWVCDbO8fgA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "asn1.js-rfc2560": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/asn1.js-rfc2560/-/asn1.js-rfc2560-5.0.1.tgz", + "integrity": "sha512-1PrVg6kuBziDN3PGFmRk3QrjpKvP9h/Hv5yMrFZvC1kpzP6dQRzf5BpKstANqHBkaOUmTpakJWhicTATOA/SbA==", + "requires": { + "asn1.js-rfc5280": "^3.0.0" + } + }, + "asn1.js-rfc5280": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/asn1.js-rfc5280/-/asn1.js-rfc5280-3.0.0.tgz", + "integrity": "sha512-Y2LZPOWeZ6qehv698ZgOGGCZXBQShObWnGthTrIFlIQjuV1gg2B8QOhWFRExq/MR1VnPpIIe7P9vX2vElxv+Pg==", + "requires": { + "asn1.js": "^5.0.0" + } + }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -293,6 +336,11 @@ "tweetnacl": "^0.14.3" } }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, "big-number": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/big-number/-/big-number-1.0.0.tgz", @@ -329,6 +377,11 @@ "safe-buffer": "^5.1.1" } }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -360,6 +413,11 @@ "concat-map": "0.0.1" } }, + "browser-request": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", + "integrity": "sha1-ns5bWsqJopkyJC4Yv5M975h2zBc=" + }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -519,11 +577,19 @@ } } }, + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -531,8 +597,35 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + } }, "combined-stream": { "version": "1.0.8", @@ -734,6 +827,16 @@ "debug": "^2.6.0" } }, + "diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "requires": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } + }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -801,11 +904,24 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "requires": { + "env-variable": "0.0.x" + } + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "env-variable": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", + "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -847,6 +963,19 @@ "is-symbol": "^1.0.2" } }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1200,11 +1329,21 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, "feature-policy": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==" }, + "fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -1580,6 +1719,38 @@ "sshpk": "^1.7.0" } }, + "https-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", + "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1739,6 +1910,11 @@ "has": "^1.0.1" } }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", @@ -1875,6 +2051,14 @@ "safe-buffer": "^5.0.1" } }, + "kuler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", + "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", + "requires": { + "colornames": "^1.1.1" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -1942,6 +2126,25 @@ "chalk": "^2.0.1" } }, + "logform": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", + "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "long": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/long/-/long-2.4.0.tgz", @@ -2095,6 +2298,11 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -2248,6 +2456,14 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, + "moment-timezone": { + "version": "0.5.27", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.27.tgz", + "integrity": "sha512-EIKQs7h5sAsjhPCqN6ggx6cEbs94GK050254TIJySD1bzoM5JTYDwAU1IoVOeTOL6Gm27kYJ51/uuvq1kIlrbw==", + "requires": { + "moment": ">= 2.9.0" + } + }, "morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", @@ -2513,6 +2729,51 @@ "has": "^1.0.3" } }, + "ocsp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ocsp/-/ocsp-1.2.0.tgz", + "integrity": "sha1-RpoXdrRX3uZ+sCAUCMGUa6xAdsw=", + "requires": { + "asn1.js": "^4.8.0", + "asn1.js-rfc2560": "^4.0.0", + "asn1.js-rfc5280": "^2.0.0", + "async": "^1.5.2", + "simple-lru-cache": "0.0.2" + }, + "dependencies": { + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "asn1.js-rfc2560": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/asn1.js-rfc2560/-/asn1.js-rfc2560-4.0.6.tgz", + "integrity": "sha512-ysf48ni+f/efNPilq4+ApbifUPcSW/xbDeQAh055I+grr2gXgNRQqHew7kkO70WSMQ2tEOURVwsK+dJqUNjIIg==", + "requires": { + "asn1.js-rfc5280": "^2.0.0" + } + }, + "asn1.js-rfc5280": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/asn1.js-rfc5280/-/asn1.js-rfc5280-2.0.1.tgz", + "integrity": "sha512-1e2ypnvTbYD/GdxWK77tdLBahvo1fZUHlQJqAVUuZWdYj0rdjGcf2CWYUtbsyRYpYUMwMWLZFUtLxog8ZXTrcg==", + "requires": { + "asn1.js": "^4.5.0" + } + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + } + } + }, "odbc": { "version": "1.4.6", "resolved": "https://registry.npmjs.org/odbc/-/odbc-1.4.6.tgz", @@ -2544,6 +2805,11 @@ "wrappy": "1" } }, + "one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + }, "onetime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", @@ -3255,6 +3521,26 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, + "simple-lru-cache": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz", + "integrity": "sha1-1ZzDoZPBpdAyD4Tucy9uRxPlEd0=" + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, "slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", @@ -3271,6 +3557,51 @@ "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" }, + "snowflake-sdk": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/snowflake-sdk/-/snowflake-sdk-1.5.0.tgz", + "integrity": "sha512-s52rGMwe3wxGnetekhdy3BHSjIfRRUNOYtqilfqQkL/PjXTt6xK6tqASVMNd0ZH9+Q6udcExwfJUK35wZfW+OA==", + "requires": { + "agent-base": "^2.1.1", + "asn1.js-rfc2560": "^5.0.0", + "asn1.js-rfc5280": "^3.0.0", + "big-integer": "^1.6.43", + "bignumber.js": "^2.4.0", + "browser-request": "^0.3.3", + "debug": "^3.2.6", + "extend": "^3.0.2", + "https-proxy-agent": "^3.0.0", + "lodash": "^4.17.15", + "mkdirp": "^0.5.1", + "moment": "^2.23.0", + "moment-timezone": "^0.5.15", + "ocsp": "^1.2.0", + "request": "^2.88.0", + "simple-lru-cache": "^0.0.2", + "uuid": "^3.3.2", + "winston": "^3.1.0" + }, + "dependencies": { + "bignumber.js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", + "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "socksjs": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/socksjs/-/socksjs-0.5.0.tgz", @@ -3368,6 +3699,11 @@ "tweetnacl": "~0.14.0" } }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -3555,6 +3891,11 @@ } } }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3610,6 +3951,11 @@ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, "truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -3785,6 +4131,51 @@ "string-width": "^1.0.2 || 2" } }, + "winston": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", + "requires": { + "async": "^2.6.1", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^2.1.1", + "one-time": "0.0.4", + "readable-stream": "^3.1.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.3.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "readable-stream": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "winston-transport": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", + "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", + "requires": { + "readable-stream": "^2.3.6", + "triple-beam": "^1.2.0" + } + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", diff --git a/server/package.json b/server/package.json index 461761660..54cb95646 100644 --- a/server/package.json +++ b/server/package.json @@ -71,6 +71,7 @@ "sanitize-filename": "^1.6.3", "serve-favicon": "^2.5.0", "session-file-store": "^1.3.0", + "snowflake-sdk": "^1.5.0", "socksjs": "^0.5.0", "sql-formatter": "^2.3.3", "uuid": "^3.3.3", From 9ab6e48d7c3eea2322229dc6a40932f460715b84 Mon Sep 17 00:00:00 2001 From: Josiah Rickerd Date: Mon, 3 Feb 2020 10:29:32 -0600 Subject: [PATCH 002/658] Adding MSSQL ReadOnly option (#520) Adding the ReadOnly Application Intent option for connecting to AlwaysOn clusters. --- README.md | 1 + server/drivers/sqlserver/index.js | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1550fcb4a..886a83e1a 100644 --- a/README.md +++ b/README.md @@ -423,6 +423,7 @@ When using JSON file, provide `` as a key under `connections`. domainDomaintext sqlserverEncryptEncrypt (necessary for Azure)boolean sqlserverMultiSubnetFailoverMultiSubnetFailoverboolean + readOnlyIntentReadOnly Application Intentboolean diff --git a/server/drivers/sqlserver/index.js b/server/drivers/sqlserver/index.js index 3a0abc0bb..ccf232005 100644 --- a/server/drivers/sqlserver/index.js +++ b/server/drivers/sqlserver/index.js @@ -40,7 +40,8 @@ function runQuery(query, connection) { options: { appName: 'SQLPad', encrypt: Boolean(connection.sqlserverEncrypt), - multiSubnetFailover: connection.sqlserverMultiSubnetFailover + multiSubnetFailover: connection.sqlserverMultiSubnetFailover, + readOnlyIntent: connection.readOnlyIntent }, pool: { max: 1, @@ -164,6 +165,11 @@ const fields = [ key: 'sqlserverMultiSubnetFailover', formType: 'CHECKBOX', label: 'MultiSubnetFailover' + }, + { + key: 'readOnlyIntent', + formType: 'CHECKBOX', + label: 'ReadOnly Application Intent' } ]; From d1804776982e141e9352eabcf7d4e0e488af9060 Mon Sep 17 00:00:00 2001 From: MuchAdoAboutNothing Date: Wed, 5 Feb 2020 20:27:03 -0800 Subject: [PATCH 003/658] Fix for "TypeError: Do not know how to serialize a BigInt" (#522) * Override the toJSON method * Workaround for limited support of BigInt * Add comments for eslint --- server/models/resultCache.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/server/models/resultCache.js b/server/models/resultCache.js index 20738c550..3f2ed1cea 100644 --- a/server/models/resultCache.js +++ b/server/models/resultCache.js @@ -90,6 +90,17 @@ function writeCsv(cacheKey, queryResult) { }); } +// This is a workaround till BigInt is fully supported by the standard +// See https://tc39.es/ecma262/#sec-ecmascript-language-types-bigint-type +// and https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt +// If this is not done, then a JSON.stringify(BigInt) throws +// "TypeError: Do not know how to serialize a BigInt" +/* global BigInt:writable */ +/* eslint no-extend-native: ["error", { "exceptions": ["BigInt"] }] */ +BigInt.prototype.toJSON = function() { + return this.toString(); +}; + function writeJson(cacheKey, queryResult) { return new Promise(resolve => { try { From e925587022e692c81e5eac09f2ab50e208a366f8 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 14 Feb 2020 23:07:36 -0600 Subject: [PATCH 004/658] Fix query-history test for non-utc time zones (#524) --- server/test/api/query-history.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/test/api/query-history.js b/server/test/api/query-history.js index 9f15525d4..0da638e6f 100644 --- a/server/test/api/query-history.js +++ b/server/test/api/query-history.js @@ -66,21 +66,21 @@ describe('api/query-history', function() { // Datetime operators assert.deepEqual(urlFilterToNeDbFilter('field1|before|2020-03-01'), { - $and: [{ field1: { $lt: new Date('2020-03-01T00:00:00.000Z') } }] + $and: [{ field1: { $lt: new Date('2020-03-01') } }] }); assert.deepEqual( urlFilterToNeDbFilter('field1|before|2020-03-01 00:00:00'), { - $and: [{ field1: { $lt: new Date('2020-03-01T00:00:00.000Z') } }] + $and: [{ field1: { $lt: new Date('2020-03-01 00:00:00') } }] } ); assert.deepEqual(urlFilterToNeDbFilter('field1|after|2020-03-01'), { - $and: [{ field1: { $gt: new Date('2020-03-01T00:00:00.000Z') } }] + $and: [{ field1: { $gt: new Date('2020-03-01') } }] }); assert.deepEqual( urlFilterToNeDbFilter('field1|after|2020-03-01 00:00:00'), { - $and: [{ field1: { $gt: new Date('2020-03-01T00:00:00.000Z') } }] + $and: [{ field1: { $gt: new Date('2020-03-01 00:00:00') } }] } ); @@ -91,7 +91,7 @@ describe('api/query-history', function() { $and: [ { field1: 500 }, { field2: { $regex: new RegExp('myPattern') } }, - { field3: { $lt: new Date('2020-03-01T00:00:00.000Z') } } + { field3: { $lt: new Date('2020-03-01') } } ] }); }); From 7c6c28ee67a20ab7586318653ad05d782e55a469 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 14 Feb 2020 23:42:02 -0600 Subject: [PATCH 005/658] Update server and root dependencies (#525) * Update server and root dependencies * Fix lint/formatting --- client/src/Authenticated.js | 9 +- client/src/Routes.js | 9 +- client/src/SignIn.js | 5 +- client/src/connections/ConnectionList.js | 15 +- client/src/queries/QueryListDrawer.js | 11 +- .../src/queryEditor/ChartInputsContainer.js | 8 +- client/src/queryEditor/ChartTypeSelect.js | 7 +- client/src/queryEditor/ConnectionDropdown.js | 8 +- client/src/queryEditor/QueryEditor.js | 15 +- .../src/queryEditor/QueryEditorSqlEditor.js | 8 +- client/src/queryEditor/Shortcuts.js | 13 +- .../src/queryEditor/UnsavedQuerySelector.js | 7 +- .../src/queryEditor/toolbar/QueryTagsModal.js | 12 +- client/src/queryEditor/toolbar/Toolbar.js | 21 +- client/src/schema/SchemaSidebar.js | 5 +- package-lock.json | 981 ++++-------- package.json | 6 +- server/drivers/sqlserver/index.js | 7 +- server/package-lock.json | 1395 ++++++++++++----- server/package.json | 40 +- server/test/api/drivers.js | 5 +- 21 files changed, 1454 insertions(+), 1133 deletions(-) diff --git a/client/src/Authenticated.js b/client/src/Authenticated.js index 451aaee39..8fa18ff06 100644 --- a/client/src/Authenticated.js +++ b/client/src/Authenticated.js @@ -20,9 +20,6 @@ Authenticated.propTypes = { admin: PropTypes.bool }; -export default connect( - ['currentUser'], - { - refreshAppContext - } -)(Authenticated); +export default connect(['currentUser'], { + refreshAppContext +})(Authenticated); diff --git a/client/src/Routes.js b/client/src/Routes.js index 71efd1774..0bb4243d6 100644 --- a/client/src/Routes.js +++ b/client/src/Routes.js @@ -93,7 +93,8 @@ function Routes({ ); } -export default connect( - ['config'], - { refreshAppContext, initSchema, initSelectedConnection } -)(Routes); +export default connect(['config'], { + refreshAppContext, + initSchema, + initSelectedConnection +})(Routes); diff --git a/client/src/SignIn.js b/client/src/SignIn.js index a138f5fb3..d3efc9a29 100644 --- a/client/src/SignIn.js +++ b/client/src/SignIn.js @@ -109,7 +109,4 @@ function SignIn({ config, refreshAppContext }) { ); } -export default connect( - ['config'], - { refreshAppContext } -)(SignIn); +export default connect(['config'], { refreshAppContext })(SignIn); diff --git a/client/src/connections/ConnectionList.js b/client/src/connections/ConnectionList.js index 1f0a1c904..d6eeebcd6 100644 --- a/client/src/connections/ConnectionList.js +++ b/client/src/connections/ConnectionList.js @@ -142,12 +142,9 @@ function ConnectionList({ ); } -export default connect( - ['connections', 'currentUser'], - store => ({ - selectConnectionId, - deleteConnection, - addUpdateConnection, - loadConnections: loadConnections(store) - }) -)(ConnectionList); +export default connect(['connections', 'currentUser'], store => ({ + selectConnectionId, + deleteConnection, + addUpdateConnection, + loadConnections: loadConnections(store) +}))(ConnectionList); diff --git a/client/src/queries/QueryListDrawer.js b/client/src/queries/QueryListDrawer.js index bc731bedc..413c3b0bb 100644 --- a/client/src/queries/QueryListDrawer.js +++ b/client/src/queries/QueryListDrawer.js @@ -277,10 +277,7 @@ QueryListDrawer.propTypes = { queries: PropTypes.array }; -export default connect( - ['queries', 'connections', 'currentUser'], - store => ({ - loadQueries: loadQueries(store), - deleteQuery: deleteQuery(store) - }) -)(React.memo(QueryListDrawer)); +export default connect(['queries', 'connections', 'currentUser'], store => ({ + loadQueries: loadQueries(store), + deleteQuery: deleteQuery(store) +}))(React.memo(QueryListDrawer)); diff --git a/client/src/queryEditor/ChartInputsContainer.js b/client/src/queryEditor/ChartInputsContainer.js index 09d59b8a5..a7f505e87 100644 --- a/client/src/queryEditor/ChartInputsContainer.js +++ b/client/src/queryEditor/ChartInputsContainer.js @@ -20,10 +20,10 @@ function mapStateToProps(state) { }; } -const Connected = connect( - mapStateToProps, - { handleChartConfigurationFieldsChange, handleChartTypeChange } -)(React.memo(ChartInputsContainer)); +const Connected = connect(mapStateToProps, { + handleChartConfigurationFieldsChange, + handleChartTypeChange +})(React.memo(ChartInputsContainer)); function ChartInputsContainer({ chartType, diff --git a/client/src/queryEditor/ChartTypeSelect.js b/client/src/queryEditor/ChartTypeSelect.js index 429308791..81bdb0bb2 100644 --- a/client/src/queryEditor/ChartTypeSelect.js +++ b/client/src/queryEditor/ChartTypeSelect.js @@ -13,10 +13,9 @@ function mapStateToProps(state) { }; } -const ConnectedVisSidebar = connect( - mapStateToProps, - { handleChartTypeChange } -)(React.memo(ChartTypeSelect)); +const ConnectedVisSidebar = connect(mapStateToProps, { handleChartTypeChange })( + React.memo(ChartTypeSelect) +); function ChartTypeSelect({ chartType, diff --git a/client/src/queryEditor/ConnectionDropdown.js b/client/src/queryEditor/ConnectionDropdown.js index 459e51478..2587894b9 100644 --- a/client/src/queryEditor/ConnectionDropdown.js +++ b/client/src/queryEditor/ConnectionDropdown.js @@ -76,7 +76,7 @@ function ConnectionDropdown({ ); } -export default connect( - ['connections', 'currentUser', 'selectedConnectionId'], - { selectConnectionId, addUpdateConnection } -)(ConnectionDropdown); +export default connect(['connections', 'currentUser', 'selectedConnectionId'], { + selectConnectionId, + addUpdateConnection +})(ConnectionDropdown); diff --git a/client/src/queryEditor/QueryEditor.js b/client/src/queryEditor/QueryEditor.js index 8d92c1031..0aa31c93f 100644 --- a/client/src/queryEditor/QueryEditor.js +++ b/client/src/queryEditor/QueryEditor.js @@ -148,12 +148,9 @@ function mapStateToProps(state, props) { }; } -export default connect( - mapStateToProps, - store => ({ - loadConnections: loadConnections(store), - loadTags, - loadQuery, - resetNewQuery - }) -)(QueryEditor); +export default connect(mapStateToProps, store => ({ + loadConnections: loadConnections(store), + loadTags, + loadQuery, + resetNewQuery +}))(QueryEditor); diff --git a/client/src/queryEditor/QueryEditorSqlEditor.js b/client/src/queryEditor/QueryEditorSqlEditor.js index 811dc5222..24ac8ccfe 100644 --- a/client/src/queryEditor/QueryEditorSqlEditor.js +++ b/client/src/queryEditor/QueryEditorSqlEditor.js @@ -29,9 +29,9 @@ function QueryEditorSqlEditor({ ); } -const ConnectedQueryEditorSqlEditor = connect( - mapStateToProps, - { setQueryState, handleQuerySelectionChange } -)(QueryEditorSqlEditor); +const ConnectedQueryEditorSqlEditor = connect(mapStateToProps, { + setQueryState, + handleQuerySelectionChange +})(QueryEditorSqlEditor); export default ConnectedQueryEditorSqlEditor; diff --git a/client/src/queryEditor/Shortcuts.js b/client/src/queryEditor/Shortcuts.js index b2695d5c3..bacf6712d 100644 --- a/client/src/queryEditor/Shortcuts.js +++ b/client/src/queryEditor/Shortcuts.js @@ -32,11 +32,8 @@ function Shortcuts({ saveQuery, runQuery, formatQuery }) { return null; } -export default connect( - null, - store => ({ - formatQuery, - runQuery: runQuery(store), - saveQuery: saveQuery(store) - }) -)(Shortcuts); +export default connect(null, store => ({ + formatQuery, + runQuery: runQuery(store), + saveQuery: saveQuery(store) +}))(Shortcuts); diff --git a/client/src/queryEditor/UnsavedQuerySelector.js b/client/src/queryEditor/UnsavedQuerySelector.js index 894f62530..828585f41 100644 --- a/client/src/queryEditor/UnsavedQuerySelector.js +++ b/client/src/queryEditor/UnsavedQuerySelector.js @@ -58,9 +58,8 @@ function mapStateToProps(state, props) { }; } -const Connected = connect( - mapStateToProps, - { setQueryState } -)(UnsavedQuerySelector); +const Connected = connect(mapStateToProps, { setQueryState })( + UnsavedQuerySelector +); export default Connected; diff --git a/client/src/queryEditor/toolbar/QueryTagsModal.js b/client/src/queryEditor/toolbar/QueryTagsModal.js index fa789412b..e18487fcf 100644 --- a/client/src/queryEditor/toolbar/QueryTagsModal.js +++ b/client/src/queryEditor/toolbar/QueryTagsModal.js @@ -11,10 +11,9 @@ function mapStateToProps(state) { }; } -const ConnectedQueryTagsModal = connect( - mapStateToProps, - { setQueryState } -)(React.memo(QueryTagsModal)); +const ConnectedQueryTagsModal = connect(mapStateToProps, { setQueryState })( + React.memo(QueryTagsModal) +); function QueryTagsModal({ availableTags, @@ -26,7 +25,10 @@ function QueryTagsModal({ const selectedItems = tags.map(tag => ({ name: tag, id: tag })); const handleChange = selectedItems => { - setQueryState('tags', selectedItems.map(item => item.name)); + setQueryState( + 'tags', + selectedItems.map(item => item.name) + ); }; return ( diff --git a/client/src/queryEditor/toolbar/Toolbar.js b/client/src/queryEditor/toolbar/Toolbar.js index 032b1f5c3..9a2474583 100644 --- a/client/src/queryEditor/toolbar/Toolbar.js +++ b/client/src/queryEditor/toolbar/Toolbar.js @@ -58,18 +58,15 @@ function mapStateToProps(state) { }; } -const ConnectedEditorNavBar = connect( - mapStateToProps, - store => ({ - toggleSchema, - formatQuery, - runQuery: runQuery(store), - saveQuery: saveQuery(store), - handleCloneClick, - resetNewQuery, - setQueryState - }) -)(React.memo(Toolbar)); +const ConnectedEditorNavBar = connect(mapStateToProps, store => ({ + toggleSchema, + formatQuery, + runQuery: runQuery(store), + saveQuery: saveQuery(store), + handleCloneClick, + resetNewQuery, + setQueryState +}))(React.memo(Toolbar)); function Toolbar({ currentUser, diff --git a/client/src/schema/SchemaSidebar.js b/client/src/schema/SchemaSidebar.js index 8a5fc7160..263de263d 100644 --- a/client/src/schema/SchemaSidebar.js +++ b/client/src/schema/SchemaSidebar.js @@ -190,7 +190,4 @@ function SchemaSidebar({ ); } -export default connect( - mapStateToProps, - mapActions -)(React.memo(SchemaSidebar)); +export default connect(mapStateToProps, mapActions)(React.memo(SchemaSidebar)); diff --git a/package-lock.json b/package-lock.json index 4965351d3..83df23e1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,18 +5,18 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.8.3" } }, "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -24,30 +24,13 @@ "js-tokens": "^4.0.0" } }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "@babel/runtime": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz", + "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" + "regenerator-runtime": "^0.13.2" } }, "@samverschueren/stream-to-observable": { @@ -59,51 +42,18 @@ "any-observable": "^0.3.0" } }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "12.7.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz", - "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==", + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, - "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", - "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, "ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", @@ -131,37 +81,6 @@ "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", "dev": true }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -171,30 +90,6 @@ "fill-range": "^7.0.1" } }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -212,12 +107,6 @@ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -259,40 +148,28 @@ "dev": true }, "commander": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", - "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "dev": true }, "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" } }, "date-fns": { @@ -316,31 +193,6 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, - "del": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", - "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", - "dev": true, - "requires": { - "globby": "^10.0.1", - "graceful-fs": "^4.2.2", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.1", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, "elegant-spinner": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", @@ -371,55 +223,12 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "fast-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.0.tgz", - "integrity": "sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2" - } - }, - "fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", - "dev": true, - "requires": { - "reusify": "^1.0.0" - } - }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -449,76 +258,19 @@ "path-exists": "^4.0.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz", - "integrity": "sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA==", - "dev": true - }, - "get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" + "semver-regex": "^2.0.0" } }, - "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true }, "has-ansi": { @@ -536,67 +288,96 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, "husky": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.9.tgz", - "integrity": "sha512-Yolhupm7le2/MqC1VYLk/cNmYxsSsqKkTyBhzQHhPK1jFnC89mmmNVuGtLNabjDI6Aj8UNIr0KpRNuBkiC4+sg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.3.tgz", + "integrity": "sha512-VxTsSTRwYveKXN4SaH1/FefRJYCtx+wx04sSVcOpD7N2zjoHxa+cEJ07Qg5NmV3HAK+IRKOyNVpi2YBIVccIfQ==", "dev": true, "requires": { - "chalk": "^2.4.2", + "chalk": "^3.0.0", "ci-info": "^2.0.0", - "cosmiconfig": "^5.2.1", - "execa": "^1.0.0", - "get-stdin": "^7.0.0", + "compare-versions": "^3.5.1", + "cosmiconfig": "^6.0.0", + "find-versions": "^3.2.0", "opencollective-postinstall": "^2.0.2", "pkg-dir": "^4.2.0", "please-upgrade-node": "^3.2.0", - "read-pkg": "^5.2.0", - "run-node": "^1.0.0", - "slash": "^3.0.0" + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "dev": true, "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", "dev": true }, "is-arrayish": { @@ -605,18 +386,6 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -626,15 +395,6 @@ "number-is-nan": "^1.0.0" } }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -656,18 +416,6 @@ "symbol-observable": "^1.1.0" } }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", - "dev": true - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -698,16 +446,6 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -721,38 +459,97 @@ "dev": true }, "lint-staged": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.4.2.tgz", - "integrity": "sha512-OFyGokJSWTn2M6vngnlLXjaHhi8n83VIZZ5/1Z26SULRUWgR3ITWpAEQC9Pnm3MC/EpCxlwts/mQWDHNji2+zA==", + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.0.7.tgz", + "integrity": "sha512-Byj0F4l7GYUpYYHEqyFH69NiI6ICTg0CeCKbhRorL+ickbzILKUlZLiyCkljZV02wnoh7yH7PmFyYm9PRNwk9g==", "dev": true, "requires": { - "chalk": "^2.4.2", - "commander": "^2.20.0", - "cosmiconfig": "^5.2.1", + "chalk": "^3.0.0", + "commander": "^4.0.1", + "cosmiconfig": "^6.0.0", "debug": "^4.1.1", "dedent": "^0.7.0", - "del": "^5.0.0", - "execa": "^2.0.3", + "execa": "^3.4.0", "listr": "^0.14.3", "log-symbols": "^3.0.0", "micromatch": "^4.0.2", "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.1.1", - "string-argv": "^0.3.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", "stringify-object": "^3.3.0" }, "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "cross-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", + "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "execa": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/execa/-/execa-2.0.5.tgz", - "integrity": "sha512-SwmwZZyJjflcqLSgllk4EQlMLst2p9muyzwNugKGFlpAz6rZ7M+s2nBR97GAq4Vzjwx2y9rcMcmqzojwN+xwNA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", "dev": true, "requires": { - "cross-spawn": "^6.0.5", + "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", + "human-signals": "^1.1.1", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^3.0.0", + "npm-run-path": "^4.0.0", "onetime": "^5.1.0", "p-finally": "^2.0.0", "signal-exit": "^3.0.2", @@ -768,6 +565,22 @@ "pump": "^3.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -775,9 +588,9 @@ "dev": true }, "npm-run-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", - "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { "path-key": "^3.0.0" @@ -789,11 +602,62 @@ "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", "dev": true }, + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, "path-key": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz", - "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, @@ -812,14 +676,6 @@ "listr-verbose-renderer": "^0.5.0", "p-map": "^2.0.0", "rxjs": "^6.3.3" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } } }, "listr-silent-renderer": { @@ -863,12 +719,6 @@ "supports-color": "^2.0.0" } }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, "log-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", @@ -944,12 +794,6 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", - "dev": true - }, "micromatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", @@ -966,54 +810,18 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -1050,16 +858,10 @@ "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", "dev": true }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -1075,13 +877,10 @@ } }, "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true }, "p-try": { "version": "2.2.0", @@ -1089,14 +888,33 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", "dev": true, "requires": { + "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" } }, "path-exists": { @@ -1105,24 +923,6 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -1130,9 +930,9 @@ "dev": true }, "picomatch": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", - "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", + "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==", "dev": true }, "pkg-dir": { @@ -1154,9 +954,9 @@ } }, "prettier": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", - "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, "pump": { @@ -1169,45 +969,16 @@ "once": "^1.3.1" } }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - } - } - }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "dev": true }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "restore-cursor": { @@ -1237,67 +1008,25 @@ } } }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", - "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", - "dev": true - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, "rxjs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", - "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "dev": true, "requires": { "tslib": "^1.9.0" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, "semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", "dev": true }, "signal-exit": { @@ -1318,44 +1047,6 @@ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, "string-argv": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", @@ -1393,12 +1084,6 @@ "ansi-regex": "^2.0.0" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -1435,31 +1120,12 @@ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", "dev": true }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, "wrap-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", @@ -1508,6 +1174,15 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true + }, + "yaml": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", + "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.6.3" + } } } } diff --git a/package.json b/package.json index 0ab4f8fa9..fe57d5666 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,9 @@ "version": "4.0.0", "private": true, "devDependencies": { - "husky": "^3.0.9", - "lint-staged": "^9.4.2", - "prettier": "^1.18.2" + "husky": "^4.2.3", + "lint-staged": "^10.0.7", + "prettier": "^1.19.1" }, "prettier": { "singleQuote": true diff --git a/server/drivers/sqlserver/index.js b/server/drivers/sqlserver/index.js index ccf232005..0b88e6910 100644 --- a/server/drivers/sqlserver/index.js +++ b/server/drivers/sqlserver/index.js @@ -41,7 +41,12 @@ function runQuery(query, connection) { appName: 'SQLPad', encrypt: Boolean(connection.sqlserverEncrypt), multiSubnetFailover: connection.sqlserverMultiSubnetFailover, - readOnlyIntent: connection.readOnlyIntent + readOnlyIntent: connection.readOnlyIntent, + // Set enableArithAbort to avoid following log message: + // tedious deprecated The default value for `config.options.enableArithAbort` + // will change from `false` to `true` in the next major version of `tedious`. + // Set the value to `true` or `false` explicitly to silence this message. ../../node_modules/mssql/lib/tedious/connection-pool.js:61:23 + enableArithAbort: true }, pool: { max: 1, diff --git a/server/package-lock.json b/server/package-lock.json index bda8b4cfd..ef7b74e22 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -4,19 +4,49 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@azure/ms-rest-azure-env": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@azure/ms-rest-azure-env/-/ms-rest-azure-env-1.1.2.tgz", + "integrity": "sha512-l7z0DPCi2Hp88w12JhDTtx5d0Y3+vhfE7JKJb9O7sEz71Cwp053N8piTtTnnk/tUor9oZHgEKi/p3tQQmLPjvA==" + }, + "@azure/ms-rest-js": { + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.8.14.tgz", + "integrity": "sha512-IrCPN22c8RbKWA06ZXuFwwEb15cSnr0zZ6J8Fspp9ns1SSNTERf7hv+gWvTIis1FlwHy42Mfk8hVu0/r3a0AWA==", + "requires": { + "@types/tunnel": "0.0.0", + "axios": "^0.19.0", + "form-data": "^2.3.2", + "tough-cookie": "^2.4.3", + "tslib": "^1.9.2", + "tunnel": "0.0.6", + "uuid": "^3.2.1", + "xml2js": "^0.4.19" + } + }, + "@azure/ms-rest-nodeauth": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@azure/ms-rest-nodeauth/-/ms-rest-nodeauth-2.0.2.tgz", + "integrity": "sha512-KmNNICOxt3EwViAJI3iu2VH8t8BQg5J2rSAyO4IUYLF9ZwlyYsP419pdvl4NBUhluAP2cgN7dfD2V6E6NOMZlQ==", + "requires": { + "@azure/ms-rest-azure-env": "^1.1.2", + "@azure/ms-rest-js": "^1.8.7", + "adal-node": "^0.1.28" + } + }, "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.8.3" } }, "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -25,54 +55,74 @@ } }, "@hapi/address": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.2.tgz", - "integrity": "sha512-O4QDrx+JoGKZc6aN64L04vqa7e41tIiLU+OvKdcYaEMP97UttL0f9GIi9/0A4WAMx0uBd6SidDIhktZhgOcN8Q==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.0.0.tgz", + "integrity": "sha512-GDDpkCdSUfkQCznmWUHh9dDN85BWf/V8TFKQ2JLuHdGB4Yy3YTEGBzZxoBNxfNBEvreSR/o+ZxBBSNNEVzY+lQ==", + "requires": { + "@hapi/hoek": "^9.0.0" + } }, "@hapi/formula": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-1.2.0.tgz", - "integrity": "sha512-UFbtbGPjstz0eWHb+ga/GM3Z9EzqKXFWIbSOFURU0A/Gku0Bky4bCk9/h//K2Xr3IrCfjFNhMm4jyZ5dbCewGA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", + "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==" }, "@hapi/hoek": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.3.0.tgz", - "integrity": "sha512-C0QL9bmgUXTSuf8nDeGrpMjtJG7tPUr8wG6/wxPbP62tGwCwQtdMSJYfESowmY4P3Hn593f+8OzNY5bckcu/LQ==" + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.0.3.tgz", + "integrity": "sha512-jKtjLLDiH95b002sJVc5c74PE6KKYftuyVdVmsuYId5stTaWcRFqE+5ukZI4gDUKjGn8wv2C3zPn3/nyjEI7gg==" }, "@hapi/joi": { - "version": "16.1.7", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-16.1.7.tgz", - "integrity": "sha512-anaIgnZhNooG3LJLrTFzgGALTiO97zRA1UkvQHm9KxxoSiIzCozB3RCNCpDnfhTJD72QlrHA8nwGmNgpFFCIeg==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.0.tgz", + "integrity": "sha512-ob67RcPlwRWxBzLCnWvcwx5qbwf88I3ykD7gcJLWOTRfLLgosK7r6aeChz4thA3XRvuBfI0KB1tPVl2EQFlPXw==", "requires": { - "@hapi/address": "^2.1.2", - "@hapi/formula": "^1.2.0", - "@hapi/hoek": "^8.2.4", - "@hapi/pinpoint": "^1.0.2", - "@hapi/topo": "^3.1.3" + "@hapi/address": "^4.0.0", + "@hapi/formula": "^2.0.0", + "@hapi/hoek": "^9.0.0", + "@hapi/pinpoint": "^2.0.0", + "@hapi/topo": "^5.0.0" } }, "@hapi/pinpoint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-1.0.2.tgz", - "integrity": "sha512-dtXC/WkZBfC5vxscazuiJ6iq4j9oNx1SHknmIr8hofarpKUZKmlUVYVIhNVzIEgK5Wrc4GMHL5lZtt1uS2flmQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==" }, "@hapi/topo": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.5.tgz", - "integrity": "sha512-bi9m1jrui9LlvtVdLaHv0DqeOoe+I8dep+nEcTgW6XxJHL3xArQcilYz3tIp0cRC4gWlsVtABK7vNKg4jzEmAA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", + "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", "requires": { - "@hapi/hoek": "8.x.x" + "@hapi/hoek": "^9.0.0" } }, "@types/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", - "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, "@types/node": { - "version": "12.7.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz", - "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==" + "version": "13.7.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.1.tgz", + "integrity": "sha512-Zq8gcQGmn4txQEJeiXo/KiLpon8TzAl0kmKH4zdWctPj05nWwp1ClMdAVEloqrQKfaC48PNLdgN/aVaLqUrluA==" + }, + "@types/readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-Mq2eLkGYamlcolW603FY2ROBvcl90jPF+3jLkjpBV6qS+2aVeJqlgRG0TVAa1oWbmPdb5yOWlOPVvQle76nUNw==", + "requires": { + "@types/node": "*", + "safe-buffer": "*" + } + }, + "@types/tunnel": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.0.tgz", + "integrity": "sha512-FGDp0iBRiBdPjOgjJmn1NH0KDLN+Z8fRmo+9J7XGBhubq1DPrGrbmG4UTlGzrpbCpesMqD0sWkzi27EYkOMHyg==", + "requires": { + "@types/node": "*" + } }, "accepts": { "version": "1.3.7", @@ -90,9 +140,9 @@ "dev": true }, "acorn-jsx": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", - "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", "dev": true }, "adal-node": { @@ -112,14 +162,14 @@ }, "dependencies": { "@types/node": { - "version": "8.10.54", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.54.tgz", - "integrity": "sha512-kaYyLYf6ICn6/isAyD4K1MyWWd5Q3JgH6bnMN089LUx88+s4W8GvK9Q6JMBVu5vsFFp7pMdSxdKmlBXwH/VFRg==" + "version": "8.10.59", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.59.tgz", + "integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==" }, "async": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", - "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/async/-/async-3.1.1.tgz", + "integrity": "sha512-X5Dj8hK1pJNC2Wzo2Rcp9FBVdJMGRR/S7V+lH46s8GVFhtbo5O4Le5GECCF/8PISVdkUA6mMPvgz7qTTD1rf1g==" } } }, @@ -137,6 +187,11 @@ "printj": "~1.1.0" } }, + "adm-zip": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.14.tgz", + "integrity": "sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g==" + }, "agent-base": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", @@ -154,11 +209,11 @@ } }, "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", + "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -171,15 +226,18 @@ "dev": true }, "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, "ansi-styles": { @@ -196,6 +254,16 @@ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -225,13 +293,130 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + } + } + }, + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + } } }, "asn1": { @@ -296,9 +481,17 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } }, "bagpipe": { "version": "0.3.5", @@ -341,15 +534,16 @@ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" }, - "big-number": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/big-number/-/big-number-1.0.0.tgz", - "integrity": "sha512-cHUzdT+mMXd1ozht8n5ZwBlNiPO/4zCqqkyp3lF1TMPsRJLXUbQ7cKnfXRkrW475H5SOtSOP0HFeihNbpa53MQ==" - }, "bignumber.js": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true }, "binary-search-tree": { "version": "0.2.5", @@ -360,12 +554,23 @@ } }, "bl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz", - "integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz", + "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==", "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "readable-stream": "^3.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "bn.js": { @@ -391,9 +596,9 @@ } }, "bowser": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.7.0.tgz", - "integrity": "sha512-aIlMvstvu8x+34KEiOHD3AsBgdrzg6sxALYiukOWhFvGMbQI6TRP/iY0LMhUrHs56aD6P1G0Z7h45PUJaa5m9w==" + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.9.0.tgz", + "integrity": "sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA==" }, "brace-expansion": { "version": "1.1.11", @@ -404,6 +609,15 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "browser-request": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", @@ -476,12 +690,13 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "cassandra-driver": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.2.0.tgz", - "integrity": "sha512-rHOccpH/aYCnNEJzdmQ2TzGRmwuOtgnwdu9G3v+WRwzcYtv2UAWd1yJhZGSaqOrLB3FzB+HR0HOogdtkorA82g==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.4.0.tgz", + "integrity": "sha512-YJdGqNaT8VJi1jJKfxS0z6b4px5dHMsclQ3qmxwmVxrSChn/dqy2EVM4L77wQA7DNbdbt/MLtU8JD9N0r2tA0Q==", "requires": { "@types/long": "^4.0.0", - "@types/node": ">=4", + "@types/node": ">=8", + "adm-zip": "^0.4.13", "long": "^2.2.0" } }, @@ -513,13 +728,29 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + } + }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, "cli-width": { @@ -539,6 +770,18 @@ "wrap-ansi": "^5.1.0" }, "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -790,6 +1033,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -884,15 +1128,10 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "ejs": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.1.tgz", - "integrity": "sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ==" - }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "enabled": { @@ -935,6 +1174,7 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", @@ -948,6 +1188,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -979,9 +1220,9 @@ "dev": true }, "eslint": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.5.1.tgz", - "integrity": "sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -991,19 +1232,19 @@ "debug": "^4.0.1", "doctrine": "^3.0.0", "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.2", + "eslint-utils": "^1.4.3", "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.1", + "espree": "^6.1.2", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^11.7.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.4.1", + "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -1012,7 +1253,7 @@ "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", + "optionator": "^0.8.3", "progress": "^2.0.0", "regexpp": "^2.0.1", "semver": "^6.1.2", @@ -1032,6 +1273,21 @@ "ms": "^2.1.1" } }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1058,51 +1314,63 @@ } }, "eslint-config-prettier": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.4.0.tgz", - "integrity": "sha512-YrKucoFdc7SEko5Sxe4r6ixqXPDP1tunGw91POeZTTRKItf/AMFYt/YLEQtZMkR2LVpAVhcAcZgcWpm1oGPW7w==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz", + "integrity": "sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg==", "dev": true, "requires": { "get-stdin": "^6.0.0" } }, "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", + "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==", "dev": true, "requires": { "debug": "^2.6.9", - "resolve": "^1.5.0" + "resolve": "^1.13.1" + }, + "dependencies": { + "resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } } }, "eslint-module-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", - "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", + "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", "dev": true, "requires": { - "debug": "^2.6.8", + "debug": "^2.6.9", "pkg-dir": "^2.0.0" } }, "eslint-plugin-import": { - "version": "2.18.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", - "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", + "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", "dev": true, "requires": { "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.0", + "eslint-module-utils": "^2.4.1", "has": "^1.0.3", "minimatch": "^3.0.4", "object.values": "^1.1.0", "read-pkg-up": "^2.0.0", - "resolve": "^1.11.0" + "resolve": "^1.12.0" }, "dependencies": { "doctrine": { @@ -1118,9 +1386,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz", - "integrity": "sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz", + "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -1137,12 +1405,12 @@ } }, "eslint-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", - "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.0.0" + "eslint-visitor-keys": "^1.1.0" } }, "eslint-visitor-keys": { @@ -1152,13 +1420,13 @@ "dev": true }, "espree": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz", - "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", "dev": true, "requires": { - "acorn": "^7.0.0", - "acorn-jsx": "^5.0.2", + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", "eslint-visitor-keys": "^1.1.0" } }, @@ -1169,9 +1437,9 @@ "dev": true }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", + "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", "dev": true, "requires": { "estraverse": "^4.0.0" @@ -1299,9 +1567,9 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" }, "fast-diff": { "version": "1.2.0", @@ -1310,9 +1578,9 @@ "dev": true }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "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==" }, "fast-levenshtein": { "version": "2.0.6", @@ -1336,9 +1604,9 @@ "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -1362,6 +1630,15 @@ "debounce": "^1.0.0" } }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -1422,6 +1699,24 @@ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "dev": true }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -1478,10 +1773,18 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "functional-red-black-tree": { "version": "1.0.1", @@ -1489,11 +1792,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "generic-pool": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.7.1.tgz", - "integrity": "sha512-ug6DAZoNgWm6q5KhPFA+hzXfBLFQu5sTXxPpv44DmE0A2g+CiHoq9LTVdkXpZMkYVMoGw83F6W+WT0h0MFMK/w==" - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1515,9 +1813,9 @@ } }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1537,10 +1835,13 @@ } }, "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", + "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } }, "graceful-fs": { "version": "4.2.0", @@ -1577,6 +1878,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -1590,7 +1892,8 @@ "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true }, "hdb": { "version": "0.17.1", @@ -1607,9 +1910,9 @@ "dev": true }, "helmet": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.1.tgz", - "integrity": "sha512-IC/54Lxvvad2YiUdgLmPlNFKLhNuG++waTF5KPYq/Feo3NNhqMFbcLAlbVkai+9q0+4uxjxGPJ9bNykG+3zZNg==", + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.2.tgz", + "integrity": "sha512-okUo+MeWgg00cKB8Csblu8EXgcIoDyb5ZS/3u0W4spCimeVuCUvVZ6Vj3O2VJ1Sxpyb8jCDvzu0L1KKT11pkIg==", "requires": { "depd": "2.0.0", "dns-prefetch-control": "0.2.0", @@ -1618,7 +1921,7 @@ "feature-policy": "0.3.0", "frameguard": "3.1.0", "helmet-crossdomain": "0.4.0", - "helmet-csp": "2.9.2", + "helmet-csp": "2.9.4", "hide-powered-by": "1.1.0", "hpkp": "2.0.0", "hsts": "2.2.0", @@ -1641,11 +1944,11 @@ "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==" }, "helmet-csp": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.2.tgz", - "integrity": "sha512-Lt5WqNfbNjEJ6ysD4UNpVktSyjEKfU9LVJ1LaFmPfYseg/xPealPfgHhtqdAdjPDopp5zbg/VWCyp4cluMIckw==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.4.tgz", + "integrity": "sha512-qUgGx8+yk7Xl8XFEGI4MFu1oNmulxhQVTlV8HP8tV3tpfslCs30OZz/9uQqsWPvDISiu/NwrrCowsZBhFADYqg==", "requires": { - "bowser": "^2.6.1", + "bowser": "^2.7.0", "camelize": "1.0.0", "content-security-policy-builder": "2.1.0", "dasherize": "2.0.0" @@ -1761,9 +2064,9 @@ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" }, "import-fresh": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", - "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -1804,22 +2107,22 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", + "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", "dev": true, "requires": { - "ansi-escapes": "^3.2.0", + "ansi-escapes": "^4.2.1", "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", + "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" } @@ -1835,21 +2138,32 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", "dev": true }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true }, "is-extglob": { "version": "2.1.1", @@ -1867,9 +2181,9 @@ } }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-glob": { @@ -1881,6 +2195,12 @@ "is-extglob": "^2.1.1" } }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -1891,6 +2211,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, "requires": { "has": "^1.0.1" } @@ -1900,10 +2221,17 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, "requires": { "has-symbols": "^1.0.0" } @@ -1957,6 +2285,11 @@ "esprima": "^4.0.0" } }, + "jsbi": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.1.1.tgz", + "integrity": "sha512-+HQESPaV0mRiH614z4JPVPAftcRC2p53x92lySPzUzFwJbJTMpzHz8OYUkcXPN3fOcHUe0NdVcHnCtX/1+eCrA==" + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -2036,6 +2369,11 @@ "safe-buffer": "^5.0.1" } }, + "kruptein": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/kruptein/-/kruptein-2.0.5.tgz", + "integrity": "sha512-1WRXAil8d5jZ6jNXC0/pOC2lJsu2GhL3zhzL7DDvtCsef+NC1JvZUXnyNnM6Kuv0aan54moM/hsPvUAkx3y7/w==" + }, "kuler": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", @@ -2278,9 +2616,9 @@ } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimalistic-assert": { @@ -2302,28 +2640,19 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.3.tgz", + "integrity": "sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==" }, "mocha": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.1.tgz", - "integrity": "sha512-VCcWkLHwk79NYQc8cxhkmI8IigTIhsCwZ6RTxQsqK6go4UvEhzJkYuHm8B2YtlSxcYq2fY+ucr4JBwoD6ci80A==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.0.1.tgz", + "integrity": "sha512-9eWmWTdHLXh72rGrdZjNbG3aa1/3NRPpul1z0D979QpEnFdCG0Q5tv834N+94QEN2cysfV72YocQ3fn87s70fg==", "dev": true, "requires": { "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", + "chokidar": "3.3.0", "debug": "3.2.6", "diff": "3.5.0", "escape-string-regexp": "1.0.5", @@ -2336,7 +2665,7 @@ "minimatch": "3.0.4", "mkdirp": "0.5.1", "ms": "2.1.1", - "node-environment-flags": "1.0.5", + "node-environment-flags": "1.0.6", "object.assign": "4.1.0", "strip-json-comments": "2.0.1", "supports-color": "6.0.0", @@ -2389,6 +2718,21 @@ "path-exists": "^3.0.0" } }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -2396,9 +2740,9 @@ "dev": true }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -2467,19 +2811,19 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mssql": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/mssql/-/mssql-5.1.0.tgz", - "integrity": "sha512-eHrqRWCEBaXo48y2ZBaDleFvrWm2vYm6dNm1ci0XLYxm6kUb4KRsvjl74iKFhfYyuF9z6qzmTe/QmoQk+YVcVw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/mssql/-/mssql-6.0.1.tgz", + "integrity": "sha512-7oPhbQjotFJBgMPlzLmPwWlnrryxrDltjCNCD9BK7Df7TA9wc6Mb/0Bcx04NJyHCMAhw8C/iWjbJoeDyUfRNUA==", "requires": { - "debug": "^3.2.6", - "generic-pool": "^3.6.1", - "tedious": "^4.2.0" + "debug": "^4", + "tarn": "^1.1.5", + "tedious": "^6.6.2" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { "ms": "^2.1.1" } @@ -2492,20 +2836,36 @@ } }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "mysql": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.17.1.tgz", - "integrity": "sha512-7vMqHQ673SAk5C8fOzTG2LpPcf3bNt0oL3sFpxPEEFp1mdlDcrLK0On7z8ZYKaaHrHwNcQ/MTUz7/oobZ2OyyA==", + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", "requires": { - "bignumber.js": "7.2.1", - "readable-stream": "2.3.6", + "bignumber.js": "9.0.0", + "readable-stream": "2.3.7", "safe-buffer": "5.1.2", "sqlstring": "2.3.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } } }, "native-duplexpair": { @@ -2529,6 +2889,21 @@ "localforage": "^1.3.0", "mkdirp": "~0.5.1", "underscore": "~1.4.4" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + } } }, "nedb-promise": { @@ -2585,9 +2960,9 @@ } }, "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", "dev": true, "requires": { "object.getownpropertydescriptors": "^2.0.3", @@ -2627,9 +3002,9 @@ } }, "nodemailer": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.3.1.tgz", - "integrity": "sha512-j0BsSyaMlyadEDEypK/F+xlne2K5m6wzPYMXS/yxKI0s7jmT1kBx6GEKRVbZmyYfKOsjkeC/TiMVDJBI/w5gMQ==" + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.2.tgz", + "integrity": "sha512-g0n4nH1ONGvqYo1v72uSWvF/MRNnnq1LzmSzXb/6EPF3LFb51akOhgG3K2+aETAsJx90/Q5eFNTntu4vBCwyQQ==" }, "normalize-package-data": { "version": "2.5.0", @@ -2643,6 +3018,12 @@ "validate-npm-package-license": "^3.0.1" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -2664,10 +3045,17 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object.assign": { "version": "4.1.0", @@ -2694,24 +3082,131 @@ } }, "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + } } }, "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + } } }, "ocsp": { @@ -2804,26 +3299,26 @@ "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" } }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "word-wrap": "~1.2.3" } }, "os-tmpdir": { @@ -2885,9 +3380,9 @@ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "passport": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz", - "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", + "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", "requires": { "passport-strategy": "1.x.x", "pause": "0.0.1" @@ -2930,15 +3425,15 @@ } }, "passport-saml": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/passport-saml/-/passport-saml-1.2.0.tgz", - "integrity": "sha512-CU1JOx9FTITF8+vl/G1g7FV6kHWXYzECV3pq3D8K3RIM1MS0efbfQ2hkgDFdoZGdG9DdMH5z8OBW/O8qoXnkLQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/passport-saml/-/passport-saml-1.3.2.tgz", + "integrity": "sha512-oRtv1lF0AeOVGPD/UJMJnOO7AIc/Wgw7qfMxgejm2bjBo85a26LQfP+XnOD5gW7fxRdYKXDAIOvqPhFeGJmyBw==", "requires": { "debug": "^3.1.0", "passport-strategy": "*", "q": "^1.5.0", - "xml-crypto": "^1.1.4", - "xml-encryption": "^0.11.0", + "xml-crypto": "^1.4.0", + "xml-encryption": "^1.0.0", "xml2js": "0.4.x", "xmlbuilder": "^11.0.0", "xmldom": "0.1.x" @@ -3012,14 +3507,15 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pg": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.12.1.tgz", - "integrity": "sha512-l1UuyfEvoswYfcUe6k+JaxiN+5vkOgYcVSbSuw3FvdLqDbaoa2RJo1zfJKfPsSYPFVERd4GHvX3s2PjG1asSDA==", + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-7.18.1.tgz", + "integrity": "sha512-1KtKBKg/zWrjEEv//klBbVOPGucuc7HHeJf6OEMueVcUeyF3yueHf+DvhVwBjIAe9/97RAydO/lWjkcMwssuEw==", "requires": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", "pg-connection-string": "0.1.3", - "pg-pool": "^2.0.4", + "pg-packet-stream": "^1.1.0", + "pg-pool": "^2.0.10", "pg-types": "^2.1.0", "pgpass": "1.x", "semver": "4.3.2" @@ -3038,19 +3534,24 @@ "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" }, "pg-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.0.0.tgz", - "integrity": "sha512-/gYHadqLurektHk6HXiL0hSrn+RZfowkLr+ftC0lLoLBlIm8JIdk9f9g71EEjK63XxqhFqcykHuxQLFzSeyzdQ==" + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.1.5.tgz", + "integrity": "sha512-+LSPIxw7awEhQrb8sqT2Sxr+8RoEAzURMX18oaOQebItqaO94WUh3deHQs9vh3m14E2lz7q7ebRl1s/ODfJAkQ==" }, "pg-int8": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" }, + "pg-packet-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pg-packet-stream/-/pg-packet-stream-1.1.0.tgz", + "integrity": "sha512-kRBH0tDIW/8lfnnOyTwKD23ygJ/kexQVXZs7gEyBljw4FYqimZFxnMMx50ndZ8In77QgfGuItS5LLclC2TtjYg==" + }, "pg-pool": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.7.tgz", - "integrity": "sha512-UiJyO5B9zZpu32GSlP0tXy8J2NsJ9EFGFfz5v6PSbdz/1hBLX1rNiiy5+mAm5iJJYwfCv4A0EBcQLGWwjbpzZw==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.10.tgz", + "integrity": "sha512-qdwzY92bHf3nwzIUcj+zJ0Qo5lpG/YxchahxIN8+ZVmXqkahKXsnl2aiJPHLYN9o5mB/leG+Xh6XKxtP7e0sjg==" }, "pg-types": { "version": "2.2.0", @@ -3072,6 +3573,12 @@ "split": "^1.0.0" } }, + "picomatch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", + "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==", + "dev": true + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -3166,9 +3673,9 @@ } }, "psl": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", - "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" }, "punycode": { "version": "2.1.1", @@ -3241,6 +3748,15 @@ "util-deprecate": "~1.0.1" } }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.4" + } + }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", @@ -3272,9 +3788,9 @@ } }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -3283,7 +3799,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -3293,7 +3809,7 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" }, @@ -3333,12 +3849,12 @@ "dev": true }, "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, @@ -3348,9 +3864,9 @@ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" }, "rimraf": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", - "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" } @@ -3365,9 +3881,9 @@ } }, "rxjs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", - "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -3465,12 +3981,13 @@ } }, "session-file-store": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/session-file-store/-/session-file-store-1.3.1.tgz", - "integrity": "sha512-6W8N+ziXDoT3oNKqLP+38QMO1CELfWHhn7/G/T/Bj2BXLKnkJCCFqWIb9E50Rr3ENtzuxy3FT9KHy39+skBubg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/session-file-store/-/session-file-store-1.4.0.tgz", + "integrity": "sha512-jBeQwoHoHMOBoELxf+f/IDtMI94PqkFrwCP6O3DlvJlsCU6gY6pgWJGxUOtLWxauIdvAqmgoAbpJi7vJih9bvA==", "requires": { "bagpipe": "^0.3.5", "fs-extra": "^8.0.1", + "kruptein": "^2.0.4", "object-assign": "^4.1.1", "retry": "^0.12.0", "write-file-atomic": "1.3.1" @@ -3543,6 +4060,14 @@ "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } } }, "slide": { @@ -3588,6 +4113,19 @@ "ms": "^2.1.1" } }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3703,26 +4241,47 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.0" } } } }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -3843,6 +4402,18 @@ "string-width": "^3.0.0" }, "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -3856,26 +4427,51 @@ } } }, + "tarn": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-1.1.5.tgz", + "integrity": "sha512-PMtJ3HCLAZeedWjJPgGnCvcphbCOMbtZpjKgLq3qM5Qq9aQud+XHrL0WlrlgnTyS8U+jrjGbEXprFcQrxPy52g==" + }, "tedious": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tedious/-/tedious-4.2.0.tgz", - "integrity": "sha512-Py59XmvMcYWdjc1qyXDsbBwQE3yM8CJzuDnagjRpwjgndaBQXBULDI3D6OxKClbTNxA3qaLBFd9DjfV+is3AYA==", - "requires": { - "adal-node": "^0.1.22", - "big-number": "1.0.0", - "bl": "^2.0.1", - "depd": "^1.1.2", - "iconv-lite": "^0.4.23", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-6.7.0.tgz", + "integrity": "sha512-8qr7+sB0h4SZVQBRWUgHmYuOEflAOl2eihvxk0fVNvpvGJV4V5UC/YmSvebyfgyfwWcPO22/AnSbYVZZqf9wuQ==", + "requires": { + "@azure/ms-rest-nodeauth": "2.0.2", + "@types/node": "^12.12.17", + "@types/readable-stream": "^2.3.5", + "bl": "^3.0.0", + "depd": "^2.0.0", + "iconv-lite": "^0.5.0", + "jsbi": "^3.1.1", "native-duplexpair": "^1.0.0", "punycode": "^2.1.0", - "readable-stream": "^3.0.3", - "sprintf-js": "^1.1.1" + "readable-stream": "^3.4.0", + "sprintf-js": "^1.1.2" }, "dependencies": { + "@types/node": { + "version": "12.12.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.27.tgz", + "integrity": "sha512-odQFl/+B9idbdS0e8IxDl2ia/LP8KZLXhV3BUeI98TrZp0uoIzQPhGd+5EtzHmT0SMOIaPd7jfz6pOHLWTtl7A==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "iconv-lite": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz", + "integrity": "sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3917,25 +4513,27 @@ "os-tmpdir": "~1.0.2" } }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "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.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "trim-newlines": { @@ -3960,8 +4558,12 @@ "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", - "dev": true + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" }, "tunnel-agent": { "version": "0.6.0", @@ -3985,6 +4587,12 @@ "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -4045,24 +4653,15 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "v8-compile-cache": { "version": "2.1.0", @@ -4122,6 +4721,39 @@ "dev": true, "requires": { "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "winston": { @@ -4169,10 +4801,10 @@ "triple-beam": "^1.2.0" } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wrap-ansi": { @@ -4186,6 +4818,18 @@ "strip-ansi": "^5.0.0" }, "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -4211,6 +4855,23 @@ "dev": true, "requires": { "mkdirp": "^0.5.1" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } } }, "write-file-atomic": { @@ -4259,34 +4920,22 @@ } }, "xml-encryption": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-0.11.2.tgz", - "integrity": "sha512-jVvES7i5ovdO7N+NjgncA326xYKjhqeAnnvIgRnY7ROLCfFqEDLwP0Sxp/30SHG0AXQV1048T5yinOFyvwGFzg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-1.0.0.tgz", + "integrity": "sha512-xTqcgKPN3XOswvDPXrhtyvWZ96IFcO9Azv3vS060kOpBsK5T7OxbQDxb59bPLl4b4c2IgmSZC3kJB0n5WPr2Mw==", "requires": { - "async": "^2.1.5", - "ejs": "^2.5.6", + "escape-html": "^1.0.3", "node-forge": "^0.7.0", "xmldom": "~0.1.15", "xpath": "0.0.27" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - } } }, "xml2js": { - "version": "0.4.22", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", - "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "requires": { "sax": ">=0.6.0", - "util.promisify": "~1.0.0", "xmlbuilder": "~11.0.0" } }, @@ -4339,6 +4988,12 @@ "yargs-parser": "^13.1.1" }, "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -4348,6 +5003,12 @@ "locate-path": "^3.0.0" } }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -4359,9 +5020,9 @@ } }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "dev": true, "requires": { "p-try": "^2.0.0" diff --git a/server/package.json b/server/package.json index 47aea9ec3..42721841c 100644 --- a/server/package.json +++ b/server/package.json @@ -34,47 +34,47 @@ "lint": "eslint '**/*.js'" }, "dependencies": { - "@hapi/joi": "^16.1.7", + "@hapi/joi": "^17.1.0", "bcrypt-nodejs": "0.0.3", "body-parser": "^1.19.0", - "cassandra-driver": "^4.2.0", + "cassandra-driver": "^4.4.0", "detect-port": "^1.3.0", "errorhandler": "^1.5.1", "express": "^4.17.1", "express-session": "^1.17.0", "hdb": "^0.17.1", - "helmet": "^3.21.1", + "helmet": "^3.21.2", "ini": "^1.3.5", "json2csv": "^4.5.4", "lodash": "^4.17.11", "minimist": "^1.2.0", - "mkdirp": "^0.5.1", + "mkdirp": "^1.0.3", "moment": "^2.24.0", "morgan": "^1.9.1", - "mssql": "^5.1.0", - "mysql": "^2.17.1", + "mssql": "^6.0.1", + "mysql": "^2.18.1", "nedb": "^1.8.0", "nedb-promise": "^2.0.1", "node-crate": "^2.0.6", "node-fetch": "^2.6.0", "node-xlsx": "^0.15.0", - "nodemailer": "^6.3.1", - "passport": "^0.4.0", + "nodemailer": "^6.4.2", + "passport": "^0.4.1", "passport-google-oauth20": "^2.0.0", "passport-http": "^0.3.0", "passport-local": "^1.0.0", - "passport-saml": "^1.2.0", - "pg": "^7.12.1", - "pg-cursor": "^2.0.0", - "request": "^2.88.0", - "rimraf": "^3.0.0", + "passport-saml": "^1.3.2", + "pg": "^7.18.1", + "pg-cursor": "^2.1.5", + "request": "^2.88.2", + "rimraf": "^3.0.2", "sanitize-filename": "^1.6.3", "serve-favicon": "^2.5.0", - "session-file-store": "^1.3.0", + "session-file-store": "^1.4.0", "snowflake-sdk": "^1.5.0", "socksjs": "^0.5.0", "sql-formatter": "^2.3.3", - "uuid": "^3.3.3", + "uuid": "^3.4.0", "vertica": "^0.5.5" }, "main": "./app.js", @@ -85,12 +85,12 @@ "odbc": "^2.2.2" }, "devDependencies": { - "eslint": "^6.5.1", + "eslint": "^6.8.0", "eslint-config-airbnb-base": "^14.0.0", - "eslint-config-prettier": "^6.4.0", - "eslint-plugin-import": "^2.18.0", - "eslint-plugin-prettier": "^3.1.1", - "mocha": "^6.2.1", + "eslint-config-prettier": "^6.10.0", + "eslint-plugin-import": "^2.20.1", + "eslint-plugin-prettier": "^3.1.2", + "mocha": "^7.0.1", "node-dev": "^4.0.0", "supertest": "^4.0.2" } diff --git a/server/test/api/drivers.js b/server/test/api/drivers.js index db453ef6a..8adef0b90 100644 --- a/server/test/api/drivers.js +++ b/server/test/api/drivers.js @@ -10,6 +10,9 @@ describe('api/drivers', function() { const body = await utils.get('editor', '/api/drivers'); const { drivers, error } = body; assert(!error, 'Expect no error'); - assert(drivers.find(i => i.id === 'postgres'), 'has postgres'); + assert( + drivers.find(i => i.id === 'postgres'), + 'has postgres' + ); }); }); From e25ffa9834a500092e5b112962e01125b5163e4d Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 18 Feb 2020 17:34:52 -0600 Subject: [PATCH 006/658] Add proper application and web logs using pino (#527) * Install pino and pino-pretty * Remove no-console disable * Add logLevel config item * Use logger * Install to express-pino-logger & uninstall morgan * Add config items to turn logging on/off * Add connectionId to run query log * Remove SQLPAD_TEST env var use (debug is fine) * logger enable and level refinements * Implement express-pino-logger * Use log levels for managing logging * Add log config items documentation * Add documentation about logging --- README.md | 71 +++++++- config-example.ini | 5 + config-example.json | 4 +- server/.eslintrc | 1 - server/app.js | 40 +++-- server/drivers/cassandra/index.js | 10 +- server/drivers/drill/drill.js | 3 +- server/drivers/drill/index.js | 5 +- server/drivers/hdb/index.js | 5 +- server/drivers/index.js | 52 +++--- server/drivers/mysql/index.js | 3 +- server/drivers/postgres/index.js | 6 +- server/drivers/unixodbc/index.js | 6 +- server/lib/cli-flow.js | 5 +- server/lib/config/configItems.js | 10 ++ server/lib/config/index.js | 22 ++- server/lib/db.js | 23 +-- server/lib/email.js | 9 +- server/lib/logger.js | 11 ++ server/lib/pushQueryToSlack.js | 5 +- server/lib/sendError.js | 6 +- server/middleware/passport.js | 3 +- server/models/connections.js | 8 +- server/models/resultCache.js | 13 +- server/package-lock.json | 221 ++++++++++++++++++++++--- server/package.json | 8 +- server/routes/download-results.js | 7 +- server/routes/forgot-password.js | 3 +- server/routes/signup-signin-signout.js | 3 +- server/routes/users.js | 3 +- server/server.js | 37 +++-- 31 files changed, 461 insertions(+), 147 deletions(-) create mode 100644 server/lib/logger.js diff --git a/README.md b/README.md index 886a83e1a..f271c3bc9 100644 --- a/README.md +++ b/README.md @@ -213,6 +213,16 @@ By default query history results are limited to 1,000 records. Env var: `SQLPAD_QUERY_HISTORY_RESULT_MAX_ROWS` Default: `1000` +**appLogLevel** +Minimum level for app logs. Should be one of 'fatal', 'error', 'warn', 'info', 'debug', 'trace' or 'silent'. +Env var: `SQLPAD_APP_LOG_LEVEL` +Default: `info` + +**webLogLevel** +Minimum level for web logs. Should be one of 'fatal', 'error', 'warn', 'info', 'debug', 'trace' or 'silent'. +Env var: `SQLPAD_WEB_LOG_LEVEL` +Default: `info` + ### Connection configuration As of 3.2.0 connections may be defined via application configuration. @@ -467,6 +477,65 @@ When using JSON file, provide `` as a key under `connections`. +## Logging + +SQLPad logs json messages using [pino](https://github.com/pinojs/pino), a simple and fast logging library. Log messages are sent to stdout, leaving how to handle the messages up to you. The pino ecosystem supports a variety of transports http://getpino.io/#/docs/transports that should cover most logging setups. + +Two categories of messages are logged by SQLPad: "app" messages containing info messages, warnings, and errors relating to application code, and "web" messages relating to the actual http requests handled by SQLPad. The level at which these logs are logged can be configured separately, or even turned off, with the `appLogLevel` and `webLogLevel` settings. This level represents the minimum level to be logged. The value used should be one of `fatal`, `error`, `warn`, `info`, `debug`, `trace` or `silent`. Setting the level to `silent` will effectively disable the logger. + +In production, log messages will be a single json object per line: + +``` +> node-dev server.js --dbPath ../db --port 3010 --debug --baseUrl /sqlpad --config './config.dev.ini' + +{"level":30,"time":1581974034149,"pid":7226,"hostname":"hostname.local","name":"sqlpad-app","msg":"Loading users","v":1} +{"level":30,"time":1581974034150,"pid":7226,"hostname":"hostname.local","name":"sqlpad-app","msg":"Loading connections","v":1} +{"level":30,"time":1581974034150,"pid":7226,"hostname":"hostname.local","name":"sqlpad-app","msg":"Loading connectionAccesses","v":1} +{"level":30,"time":1581974034150,"pid":7226,"hostname":"hostname.local","name":"sqlpad-app","msg":"Loading queries","v":1} +{"level":30,"time":1581974034150,"pid":7226,"hostname":"hostname.local","name":"sqlpad-app","msg":"Loading queryHistory","v":1} +{"level":30,"time":1581974034150,"pid":7226,"hostname":"hostname.local","name":"sqlpad-app","msg":"Loading cache","v":1} +{"level":30,"time":1581974035055,"pid":7226,"hostname":"hostname.local","name":"sqlpad-app","msg":"Creating access on every connection to every user...","v":1} +{"level":30,"time":1581974035066,"pid":7226,"hostname":"hostname.local","name":"sqlpad-app","msg":"Welcome to SQLPad! Visit http://localhost:3010/sqlpad to get started","v":1} +{"level":30,"time":1581974050933,"pid":7226,"hostname":"hostname.local","name":"sqlpad-web","req":{"id":2,"method":"GET","url":"/sqlpad/signin"},"res":{"statusCode":200},"responseTime":3,"msg":"request completed","v":1} +{"level":30,"time":1581974050970,"pid":7226,"hostname":"hostname.local","name":"sqlpad-web","req":{"id":3,"method":"GET","url":"/sqlpad/javascripts/vendor/tauCharts/tauCharts.min.css"},"res":{"statusCode":304},"responseTime":2,"msg":"request completed","v":1} +``` + +During development, the logs can be piped to `pino-pretty`, which is used when running `npm start` by default, producing a more human friendly format: + +``` +> node-dev server.js --dbPath ../db --port 3010 --debug --baseUrl /sqlpad --config './config.dev.ini' | pino-pretty + +[1581974767500] INFO (sqlpad-app/7387 on hostname.local): Loading users +[1581974767501] INFO (sqlpad-app/7387 on hostname.local): Loading connections +[1581974767501] INFO (sqlpad-app/7387 on hostname.local): Loading connectionAccesses +[1581974767501] INFO (sqlpad-app/7387 on hostname.local): Loading queries +[1581974767501] INFO (sqlpad-app/7387 on hostname.local): Loading queryHistory +[1581974767501] INFO (sqlpad-app/7387 on hostname.local): Loading cache +[1581974768401] INFO (sqlpad-app/7387 on hostname.local): Creating access on every connection to every user... +[1581974768413] INFO (sqlpad-app/7387 on hostname.local): Welcome to SQLPad! Visit http://localhost:3010/sqlpad to get started +[1581974774313] INFO (sqlpad-web/7387 on hostname.local): request completed + req: { + "id": 1, + "method": "GET", + "url": "/sqlpad/signin" + } + res: { + "statusCode": 304 + } + responseTime: 8 +[1581974774342] INFO (sqlpad-web/7387 on hostname.local): request completed + req: { + "id": 2, + "method": "GET", + "url": "/sqlpad/javascripts/vendor/tauCharts/tauCharts.min.css" + } + res: { + "statusCode": 304 + } + responseTime: 3 + +``` + ## License -MIT \ No newline at end of file +MIT diff --git a/config-example.ini b/config-example.ini index b97ef93b5..9af7b1b64 100644 --- a/config-example.ini +++ b/config-example.ini @@ -112,3 +112,8 @@ timeoutSeconds=300 ; Allows pre-approval of email domains. Delimit multiple domains by empty space. whitelistedDomains="" +; Minimum level for app logs. Should be one of 'fatal', 'error', 'warn', 'info', 'debug', 'trace' or 'silent'. +appLogLevel="info" + +; Minimum level for web logs. Should be one of 'fatal', 'error', 'warn', 'info', 'debug', 'trace' or 'silent'. +webLogLevel="info" diff --git a/config-example.json b/config-example.json index cdc0abea2..044b8f550 100644 --- a/config-example.json +++ b/config-example.json @@ -36,5 +36,7 @@ "systemdSocket": false, "tableChartLinksRequireAuth": true, "timeoutSeconds": 300, - "whitelistedDomains": "" + "whitelistedDomains": "", + "appLogLevel": "info", + "webLogLevel": "info" } diff --git a/server/.eslintrc b/server/.eslintrc index 59a25a724..724633f74 100644 --- a/server/.eslintrc +++ b/server/.eslintrc @@ -14,7 +14,6 @@ "import/no-extraneous-dependencies": "off", "import/no-unresolved": "off", "import/order": "off", - "no-console": "off", "no-else-return": "off", "no-multi-assign": "off", "no-param-reassign": "off", diff --git a/server/app.js b/server/app.js index f2d4c384d..f269933df 100644 --- a/server/app.js +++ b/server/app.js @@ -5,6 +5,7 @@ const helmet = require('helmet'); const session = require('express-session'); const FileStore = require('session-file-store')(session); const config = require('./lib/config'); +const logger = require('./lib/logger'); const baseUrl = config.get('baseUrl'); const googleClientId = config.get('googleClientId'); @@ -12,10 +13,27 @@ const googleClientSecret = config.get('googleClientSecret'); const publicUrl = config.get('publicUrl'); const dbPath = config.get('dbPath'); const debug = config.get('debug'); +const webLogLevel = config.get('webLogLevel'); const cookieName = config.get('cookieName'); const cookieSecret = config.get('cookieSecret'); const sessionMinutes = config.get('sessionMinutes'); +const expressPino = require('express-pino-logger')({ + level: webLogLevel, + name: 'sqlpad-web', + // express-pino-logger logs all the headers by default + // Removing these for now but open to adding them back in based on feedback + redact: { + paths: [ + 'req.headers', + 'res.headers', + 'req.remoteAddress', + 'req.remotePort' + ], + remove: true + } +}); + const samlEntryPoint = config.get('samlEntryPoint'); const samlIssuer = config.get('samlIssuer'); const samlCallbackUrl = config.get('samlCallbackUrl'); @@ -26,7 +44,6 @@ const samlAuthContext = config.get('samlAuthContext'); ============================================================================= */ const bodyParser = require('body-parser'); const favicon = require('serve-favicon'); -const morgan = require('morgan'); const passport = require('passport'); const errorhandler = require('errorhandler'); @@ -43,9 +60,13 @@ app.use(helmet.referrerPolicy({ policy: 'same-origin' })); app.set('env', debug ? 'development' : 'production'); +// TODO remove error handler - All it sends full stack trace and error to client, +// and that should be available in logs and other dev tooling instead if (debug) { app.use(errorhandler()); } + +app.use(expressPino); app.use(favicon(path.join(__dirname, '/public/favicon.ico'))); app.use(bodyParser.json()); app.use( @@ -71,9 +92,6 @@ app.use( app.use(passport.initialize()); app.use(passport.session()); app.use(baseUrl, express.static(path.join(__dirname, 'public'))); -if (debug) { - app.use(morgan('dev')); -} /* Passport setup ============================================================================= */ @@ -100,9 +118,7 @@ const routers = [ ]; if (googleClientId && googleClientSecret && publicUrl) { - if (debug) { - console.log('Enabling Google authentication Strategy.'); - } + logger.info('Enabling Google authentication Strategy.'); routers.push(require('./routes/oauth.js')); } @@ -113,9 +129,7 @@ if ( samlCert && samlAuthContext ) { - if (debug) { - console.log('Enabling SAML authentication Strategy.'); - } + logger.info('Enabling SAML authentication Strategy.'); routers.push(require('./routes/saml.js')); } @@ -130,7 +144,7 @@ app.use(require('./routes/app.js')); // For any missing api route, return a 404 // NOTE - this cannot be a general catch-all because it might be a valid non-api route from a front-end perspective app.use(baseUrl + '/api/', function(req, res) { - console.log('reached catch all api route'); + req.log.debug('reached catch all api route'); res.sendStatus(404); }); @@ -155,8 +169,8 @@ if (fs.existsSync(indexTemplatePath)) { .replace(/="\/static/g, `="${baseUrl}/static`); app.use((req, res) => res.send(baseUrlHtml)); } else { - console.error('\nNO FRONT END TEMPLATE DETECTED'); - console.error('If not running in dev mode please report this issue.\n'); + logger.warn('NO FRONT END TEMPLATE DETECTED'); + logger.warn('If not running in dev mode please report this issue.'); } module.exports = app; diff --git a/server/drivers/cassandra/index.js b/server/drivers/cassandra/index.js index 4cf1f0c46..66a494de7 100644 --- a/server/drivers/cassandra/index.js +++ b/server/drivers/cassandra/index.js @@ -1,4 +1,5 @@ const cassandra = require('cassandra-driver'); +const logger = require('../../lib/logger'); const { formatSchemaQueryResults } = require('../utils'); const id = 'cassandra'; @@ -19,11 +20,10 @@ const SCHEMA_SQL = ` * @param {*} client */ function shutdownClient(client) { - client - .shutdown() - .catch(error => - console.error('Error shutting down cassandra connection', error) - ); + client.shutdown().catch(error => { + logger.error('Error shutting down cassandra connection'); + logger.error(error); + }); } /** diff --git a/server/drivers/drill/drill.js b/server/drivers/drill/drill.js index 1d38dd2cd..7071bd189 100644 --- a/server/drivers/drill/drill.js +++ b/server/drivers/drill/drill.js @@ -1,6 +1,7 @@ const fetch = require('node-fetch'); let request = require('request'); let url = require('url'); +const logger = require('../../lib/logger'); exports.version = '1.0'; @@ -71,7 +72,7 @@ Client.prototype.query = function(config, query) { }) .catch(function(e) { // TODO Send error message to JSON - console.log('There was a problem with the request' + e); + logger.error(e); return e; }); }; diff --git a/server/drivers/drill/index.js b/server/drivers/drill/index.js index 6e8991968..2e0ebfaba 100644 --- a/server/drivers/drill/index.js +++ b/server/drivers/drill/index.js @@ -1,4 +1,5 @@ const drill = require('./drill.js'); +const logger = require('../../lib/logger'); const { formatSchemaQueryResults } = require('../utils'); const id = 'drill'; @@ -49,8 +50,8 @@ function runQuery(query, connection) { if (!result) { throw new Error('No result returned'); } else if (result.errorMessage && result.errorMessage.length > 0) { - console.log('Error with query: ' + query); - console.log(result.errorMessage); + logger.info('Error with query: %s', query); + logger.info(result.errorMessage); throw new Error(result.errorMessage.split('\n')[0]); } if (result.length > connection.maxRows) { diff --git a/server/drivers/hdb/index.js b/server/drivers/hdb/index.js index edef24071..0e77f809e 100644 --- a/server/drivers/hdb/index.js +++ b/server/drivers/hdb/index.js @@ -1,4 +1,5 @@ const hdb = require('hdb'); +const logger = require('../../lib/logger'); const { formatSchemaQueryResults } = require('../utils'); const id = 'hdb'; @@ -41,13 +42,13 @@ function runQuery(query, connection) { }); client.on('error', err => { - console.error('Network connection error', err); + logger.error(err, 'Network connection error'); return reject(err); }); client.connect(err => { if (err) { - console.error('Connect error', err); + logger.error(err, 'Connect error'); return reject(err); } return client.execute(query, function(err, rs) { diff --git a/server/drivers/index.js b/server/drivers/index.js index 0170a3b94..147758c4b 100644 --- a/server/drivers/index.js +++ b/server/drivers/index.js @@ -2,6 +2,7 @@ const uuid = require('uuid'); const config = require('../lib/config'); const utils = require('./utils'); const getMeta = require('../lib/getMeta'); +const logger = require('../lib/logger'); const debug = config.get('debug'); @@ -15,7 +16,7 @@ const drivers = {}; */ function validateFunction(path, driver, functionName) { if (typeof driver[functionName] !== 'function') { - console.error(`${path} missing .${functionName}() implementation`); + logger.error('%s missing .%s() implementation', path, functionName); process.exit(1); } } @@ -29,7 +30,7 @@ function validateFunction(path, driver, functionName) { function validateArray(path, driver, arrayName) { const arr = driver[arrayName]; if (!Array.isArray(arr)) { - console.error(`${path} missing ${arrayName} array`); + logger.error('%s missing %s array', path, arrayName); process.exit(1); } } @@ -46,7 +47,7 @@ function requireValidate(path, optional = false) { driver = require(path); } catch (er) { if (optional) { - console.log('optional driver ' + path + ' not available'); + logger.info('optional driver %s not available', path); return; } else { // rethrow @@ -55,18 +56,18 @@ function requireValidate(path, optional = false) { } if (!driver.id) { - console.error(`${path} must export a unique id`); + logger.error('%s must export a unique id', path); process.exit(1); } if (!driver.name) { - console.error(`${path} must export a name`); + logger.error('%s must export a name', path); process.exit(1); } if (drivers[driver.id]) { - console.error(`Driver with id ${driver.id} already loaded`); - console.error(`Ensure ${path} has a unique id exported`); + logger.error(`Driver with id ${driver.id} already loaded`); + logger.error(`Ensure ${path} has a unique id exported`); process.exit(1); } @@ -98,7 +99,9 @@ requireValidate('../drivers/vertica'); requireValidate('../drivers/cassandra'); requireValidate('../drivers/snowflake'); -if (debug || process.env.SQLPAD_TEST === 'true') { +// If debug is turned on also add in mock drivers +// This is used for test cases, and is also useful for end-user debugging +if (debug) { requireValidate('../drivers/mock'); } @@ -137,24 +140,21 @@ function runQuery(query, connection, user) { queryResult.meta = getMeta(rows); queryResult.fields = Object.keys(queryResult.meta); - if (debug) { - const connectionName = connection.name; - const rowCount = rows.length; - const { startTime, stopTime, queryRunTime } = queryResult; - - console.log( - JSON.stringify({ - userId: user && user._id, - userEmail: user && user.email, - connectionName, - startTime, - stopTime, - queryRunTime, - rowCount, - query - }) - ); - } + const connectionName = connection.name; + const rowCount = rows.length; + const { startTime, stopTime, queryRunTime } = queryResult; + + logger.info({ + userId: user && user._id, + userEmail: user && user.email, + connectionId: connection._id, + connectionName, + startTime, + stopTime, + queryRunTime, + rowCount, + query + }); return queryResult; }); diff --git a/server/drivers/mysql/index.js b/server/drivers/mysql/index.js index b7dc00cd8..781a79db8 100644 --- a/server/drivers/mysql/index.js +++ b/server/drivers/mysql/index.js @@ -1,5 +1,6 @@ const fs = require('fs'); const mysql = require('mysql'); +const logger = require('../../lib/logger'); const { formatSchemaQueryResults } = require('../utils'); const id = 'mysql'; @@ -124,7 +125,7 @@ function runQuery(query, connection) { if (params.closeConnection) { myConnection.end(error => { if (error) { - console.error('Error ending MySQL connection', error); + logger.error(error, 'Error ending MySQL connection'); } continueOn(); }); diff --git a/server/drivers/postgres/index.js b/server/drivers/postgres/index.js index 42e9a4b1f..ada6ff2f2 100644 --- a/server/drivers/postgres/index.js +++ b/server/drivers/postgres/index.js @@ -3,6 +3,7 @@ const pg = require('pg'); const _ = require('lodash'); const PgCursor = require('pg-cursor'); const SocksConnection = require('socksjs'); +const logger = require('../../lib/logger'); const { formatSchemaQueryResults } = require('../utils'); const id = 'postgres'; @@ -135,14 +136,13 @@ function runQuery(query, connection) { if (params.closeConnection) { cursor.close(err => { if (err) { - console.log('error closing pg-cursor:'); - console.log(err); + logger.error(err, 'error closing pg-cursor'); } // Calling end() without setImmediate causes error within node-pg setImmediate(() => { client.end(error => { if (error) { - console.error(error); + logger.error(error); } }); }); diff --git a/server/drivers/unixodbc/index.js b/server/drivers/unixodbc/index.js index bf957cf54..5f8a7e000 100644 --- a/server/drivers/unixodbc/index.js +++ b/server/drivers/unixodbc/index.js @@ -1,4 +1,5 @@ const odbc = require('odbc'); +const logger = require('../../lib/logger'); const { formatSchemaQueryResults } = require('../utils'); const id = 'unixodbc'; @@ -80,7 +81,7 @@ async function runQuery(query, connection) { return { rows, incomplete }; } catch (error) { - console.error(error); + logger.error(error); try { if (connectionInstance && connectionInstance.close) { await connectionInstance.close(); @@ -88,8 +89,7 @@ async function runQuery(query, connection) { } catch (error) { // Do nothing here. // An error already happened we're just trying to ensure it closed okay - console.log('error closing connection after error'); - console.error(error); + logger.error(error, 'error closing connection after error'); } throw error; } diff --git a/server/lib/cli-flow.js b/server/lib/cli-flow.js index 9e0a26c5f..31e25ae54 100644 --- a/server/lib/cli-flow.js +++ b/server/lib/cli-flow.js @@ -1,5 +1,6 @@ const minimist = require('minimist'); const argv = minimist(process.argv.slice(2)); +const logger = require('./logger'); const packageJson = require('../package.json'); const configItems = require('./config/configItems'); @@ -26,12 +27,12 @@ ${configItems // If version is requested show version then exit if (argv.v || argv.version) { - console.log('SQLPad version ' + packageJson.version); + logger.info('SQLPad version %s', packageJson.version); process.exit(); } // If help is requested show help if (argv.h || argv.help) { - console.log(helpText); + logger.info(helpText); process.exit(); } diff --git a/server/lib/config/configItems.js b/server/lib/config/configItems.js index 720c68587..392995378 100644 --- a/server/lib/config/configItems.js +++ b/server/lib/config/configItems.js @@ -208,6 +208,16 @@ const configItems = [ key: 'queryHistoryResultMaxRows', envVar: 'SQLPAD_QUERY_HISTORY_RESULT_MAX_ROWS', default: 1000 + }, + { + key: 'appLogLevel', + envVar: 'SQLPAD_APP_LOG_LEVEL', + default: 'info' + }, + { + key: 'webLogLevel', + envVar: 'SQLPAD_WEB_LOG_LEVEL', + default: 'info' } ]; diff --git a/server/lib/config/index.js b/server/lib/config/index.js index 70d5ed62e..e43c670eb 100644 --- a/server/lib/config/index.js +++ b/server/lib/config/index.js @@ -12,11 +12,6 @@ const envConfig = fromEnv(); const [fileConfig, warnings] = fromFile(); const cliConfig = fromCli(argv); -// Old files might have some values no longer recognized -if (warnings.length) { - warnings.forEach(warning => console.warn(warning)); -} - const all = { ...defaultConfig, ...envConfig, ...fileConfig, ...cliConfig }; // Clean string boolean values @@ -40,12 +35,21 @@ exports.get = function get(key) { throw new Error(`config item ${key} not defined in configItems.js`); } - if (key === 'dbPath' && !all.dbPath) { - console.error(getOldConfigWarning()); - throw new Error(`dbPath not defined`); + return all[key]; +}; + +exports.getValidations = () => { + const errors = []; + + // By default dbPath will exist as empty string, which is not valid + if (all.dbPath === '') { + errors.push(getOldConfigWarning()); } - return all[key]; + return { + errors, + warnings: [...warnings] + }; }; exports.smtpConfigured = () => diff --git a/server/lib/db.js b/server/lib/db.js index 2cffd2003..e4f07b983 100644 --- a/server/lib/db.js +++ b/server/lib/db.js @@ -1,6 +1,7 @@ const path = require('path'); const datastore = require('nedb-promise'); const mkdirp = require('mkdirp'); +const logger = require('./logger'); const config = require('./config'); const consts = require('./consts'); const passhash = require('../lib/passhash'); @@ -8,8 +9,6 @@ const passhash = require('../lib/passhash'); const admin = config.get('admin'); const adminPassword = config.get('adminPassword'); const dbPath = config.get('dbPath'); -const debug = config.get('debug'); -const port = config.get('port'); const allowConnectionAccessToEveryone = config.get( 'allowConnectionAccessToEveryone' ); @@ -41,17 +40,13 @@ const db = { async function init() { await Promise.all( db.instances.map(dbname => { - if (debug) { - console.log('Loading %s..', dbname); - } + logger.info('Loading %s', dbname); return db[dbname].loadDatabase(); }) ); // create default connection accesses if (allowConnectionAccessToEveryone) { - if (debug) { - console.log('Creating access on every connection to every user...'); - } + logger.info('Creating access on every connection to every user...'); await db.connectionAccesses.update( { connectionId: consts.EVERY_CONNECTION_ID, @@ -98,7 +93,7 @@ async function ensureAdmin() { // if an admin was passed in the command line, check to see if a user exists with that email // if so, set the admin to true // if not, whitelist the email address. - // Then write to console that the person should visit the signup url to finish registration. + // Then log that the person should visit the signup url to finish registration. const user = await db.users.findOne({ email: adminEmail }); if (user) { const changes = { role: 'admin' }; @@ -106,7 +101,7 @@ async function ensureAdmin() { changes.passhash = await passhash.getPasshash(adminPassword); } await db.users.update({ _id: user._id }, { $set: changes }, {}); - console.log(adminEmail + ' should now have admin access.'); + logger.info('Admin access granted to %s', adminEmail); return; } @@ -118,12 +113,10 @@ async function ensureAdmin() { newAdmin.passhash = await passhash.getPasshash(adminPassword); } await db.users.insert(newAdmin); - console.log(`\n${adminEmail} has been whitelisted with admin access.`); - console.log( - `\nPlease visit http://localhost:${port}/signup/ to complete registration.` - ); + logger.info('Admin access granted to %s', adminEmail); + logger.info('Please visit signup to complete registration.'); } catch (error) { - console.log(`ERROR: could not make ${adminEmail} an admin.`); + logger.error('Admin access grant failed for %s', adminEmail); throw error; } } diff --git a/server/lib/email.js b/server/lib/email.js index f1d4519c4..2dafc475f 100644 --- a/server/lib/email.js +++ b/server/lib/email.js @@ -1,4 +1,5 @@ const nodemailer = require('nodemailer'); +const logger = require('./logger'); const config = require('./config'); /** @@ -37,7 +38,7 @@ function sendInvite(to) { async function send(to, subject, text, html) { if (!config.smtpConfigured()) { - console.error('email.send() called without being configured'); + logger.error('email.send() called without being configured'); return; } @@ -64,11 +65,9 @@ async function send(to, subject, text, html) { html }; transporter.sendMail(mailOptions, function(err, info) { - if (config.get('debug')) { - console.log('sent email: ' + info); - } + logger.info('sent email: %s', info); if (err) { - console.error(err); + logger.error(err); return reject(err); } resolve(info); diff --git a/server/lib/logger.js b/server/lib/logger.js new file mode 100644 index 000000000..00abe54cf --- /dev/null +++ b/server/lib/logger.js @@ -0,0 +1,11 @@ +const config = require('./config'); + +// Log levels https://github.com/pinojs/pino/issues/123 +const appLogLevel = config.get('appLogLevel'); + +const logger = require('pino')({ + name: 'sqlpad-app', + level: appLogLevel +}); + +module.exports = logger; diff --git a/server/lib/pushQueryToSlack.js b/server/lib/pushQueryToSlack.js index 517cc9064..caa2619db 100644 --- a/server/lib/pushQueryToSlack.js +++ b/server/lib/pushQueryToSlack.js @@ -1,3 +1,4 @@ +const logger = require('./logger'); const config = require('./config'); const request = require('request'); @@ -23,8 +24,8 @@ ${'```'}` }; request(options, function(err) { if (err) { - console.error('Something went wrong while sending to Slack.'); - console.error(err); + logger.error('Something went wrong while sending to Slack.'); + logger.error(err); } }); } diff --git a/server/lib/sendError.js b/server/lib/sendError.js index ad8fe9ea7..aa30e6d93 100644 --- a/server/lib/sendError.js +++ b/server/lib/sendError.js @@ -1,12 +1,14 @@ +const logger = require('./logger'); + /** - * Logs actual error to console and sends standard error response + * Logs actual error and sends standard error response * @param {*} res * @param {Error} [error] * @param {string} [message] */ module.exports = function sendError(res, error, message) { if (error) { - console.error(error); + logger.error(error); } return res.json({ error: message || (error ? error.toString() : 'Something happened') diff --git a/server/middleware/passport.js b/server/middleware/passport.js index b00206732..82f9f0aa6 100644 --- a/server/middleware/passport.js +++ b/server/middleware/passport.js @@ -5,6 +5,7 @@ const BasicStrategy = require('passport-http').BasicStrategy; const SamlStrategy = require('passport-saml').Strategy; const usersUtil = require('../models/users.js'); const config = require('../lib/config'); +const logger = require('../lib/logger'); const checkWhitelist = require('../lib/check-whitelist.js'); const passhash = require('../lib/passhash.js'); @@ -125,7 +126,7 @@ if (samlEntryPoint) { 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress' ]; const user = await usersUtil.findOneByEmail(email); - console.log(`User logged in with SAML as ${email}`); + logger.info('User logged in via SAML %s', email); if (!user) { return done(null, false); } diff --git a/server/models/connections.js b/server/models/connections.js index e83556d70..e497de7c9 100644 --- a/server/models/connections.js +++ b/server/models/connections.js @@ -1,4 +1,5 @@ const db = require('../lib/db.js'); +const logger = require('../lib/logger'); const _ = require('lodash'); const drivers = require('../drivers'); const cipher = require('../lib/cipher.js'); @@ -67,9 +68,10 @@ function getConnectionsFromConfig(env = process.env) { connection.editable = false; connectionsFromConfig.push(connection); } catch (error) { - console.log( - `Environment connection configuration failed for ${id} %s`, - error + logger.error( + error, + 'Environment connection configuration failed for %s', + id ); } }); diff --git a/server/models/resultCache.js b/server/models/resultCache.js index 3f2ed1cea..c8a395eb4 100644 --- a/server/models/resultCache.js +++ b/server/models/resultCache.js @@ -3,6 +3,7 @@ const path = require('path'); const moment = require('moment'); const sanitize = require('sanitize-filename'); const db = require('../lib/db.js'); +const logger = require('../lib/logger'); const xlsx = require('node-xlsx'); const { parse } = require('json2csv'); const config = require('../lib/config'); @@ -66,7 +67,7 @@ function writeXlsx(cacheKey, queryResult) { // if there's an error log it but otherwise continue on // we can still send results even if download file failed to create if (err) { - console.log(err); + logger.error(err); } return resolve(); }); @@ -79,12 +80,12 @@ function writeCsv(cacheKey, queryResult) { const csv = parse(queryResult.rows, { fields: queryResult.fields }); fs.writeFile(csvFilePath(cacheKey), csv, function(err) { if (err) { - console.log(err); + logger.error(err); } return resolve(); }); } catch (error) { - console.log(error); + logger.error(error); return resolve(); } }); @@ -107,12 +108,12 @@ function writeJson(cacheKey, queryResult) { const json = JSON.stringify(queryResult.rows); fs.writeFile(jsonFilePath(cacheKey), json, function(err) { if (err) { - console.log(err); + logger.error(err); } return resolve(); }); } catch (error) { - console.log(error); + logger.error(error); return resolve(); } }); @@ -135,7 +136,7 @@ async function removeExpired() { await db.cache.remove({ _id: doc._id }, {}); } } catch (error) { - console.log(error); + logger.error(error); } } diff --git a/server/package-lock.json b/server/package-lock.json index ef7b74e22..7b0adaa2a 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -62,6 +62,12 @@ "@hapi/hoek": "^9.0.0" } }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "dev": true + }, "@hapi/formula": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", @@ -281,6 +287,26 @@ } } }, + "args": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz", + "integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==", + "dev": true, + "requires": { + "camelcase": "5.0.0", + "chalk": "2.4.2", + "leven": "2.1.0", + "mri": "1.1.4" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + } + } + }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -508,14 +534,6 @@ "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "requires": { - "safe-buffer": "5.1.2" - } - }, "bcrypt-nodejs": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/bcrypt-nodejs/-/bcrypt-nodejs-0.0.3.tgz", @@ -1147,6 +1165,15 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, "env-variable": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", @@ -1518,6 +1545,14 @@ "vary": "~1.1.2" } }, + "express-pino-logger": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/express-pino-logger/-/express-pino-logger-4.0.0.tgz", + "integrity": "sha512-BTJwjQXMSR6tFiyvTOOr6aosJkJOuJpW0mXE+icv3ae/0WXBGnLaumINGHJvWMuDO1RSLHBLfRrJaghMjMhVrg==", + "requires": { + "pino-http": "^4.0.0" + } + }, "express-session": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.0.tgz", @@ -1588,11 +1623,31 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-redact": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-2.0.0.tgz", + "integrity": "sha512-zxpkULI9W9MNTK2sJ3BpPQrTEXFNESd2X6O1tXMFpK/XM0G5c5Rll2EVYZH2TqI3xRGK/VaJ+eEOt7pnENJpeA==" + }, "fast-safe-stringify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, + "fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "requires": { + "punycode": "^1.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, "feature-policy": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz", @@ -1693,6 +1748,11 @@ } } }, + "flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" + }, "flatted": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", @@ -2269,6 +2329,18 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "dev": true + }, + "joycon": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz", + "integrity": "sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2382,6 +2454,12 @@ "colornames": "^1.1.1" } }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -2793,17 +2871,11 @@ "moment": ">= 2.9.0" } }, - "morgan": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", - "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", - "requires": { - "basic-auth": "~2.0.0", - "debug": "2.6.9", - "depd": "~1.1.2", - "on-finished": "~2.3.0", - "on-headers": "~1.0.1" - } + "mri": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", + "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", + "dev": true }, "ms": { "version": "2.0.0", @@ -3600,6 +3672,72 @@ "pinkie": "^2.0.0" } }, + "pino": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-5.16.0.tgz", + "integrity": "sha512-k9cDzHd9S/oYSQ9B9g9+7RXkfsZX78sQXERC8x4p2XArECZXULx9nqNwZvJHsLj779wPCt+ybN+dG8jFR70p6Q==", + "requires": { + "fast-redact": "^2.0.0", + "fast-safe-stringify": "^2.0.7", + "flatstr": "^1.0.12", + "pino-std-serializers": "^2.4.2", + "quick-format-unescaped": "^3.0.3", + "sonic-boom": "^0.7.5" + } + }, + "pino-http": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/pino-http/-/pino-http-4.4.0.tgz", + "integrity": "sha512-uPGPNGT9WV5GrRydEPR8A1bCXUutmI4M7VIQ6InoJTC1ddjgScQPZt/uxDOQkdTTjP2RJ1dJH5ML+V1f5Q/JKg==", + "requires": { + "fast-url-parser": "^1.1.3", + "pino": "^5.0.0", + "pino-std-serializers": "^2.4.0" + } + }, + "pino-pretty": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-3.6.0.tgz", + "integrity": "sha512-gTVA+Kx4DoVQl+sXO4/HdLVaNgr281b+NDJWmXzreIoQ+3fd7xVyTg31c0hpzCUbheuW4TpzQOqDg9uOIsbw7Q==", + "dev": true, + "requires": { + "@hapi/bourne": "^1.3.2", + "args": "^5.0.1", + "chalk": "^2.4.2", + "dateformat": "^3.0.3", + "fast-safe-stringify": "^2.0.7", + "jmespath": "^0.15.0", + "joycon": "^2.2.5", + "pump": "^3.0.0", + "readable-stream": "^3.4.0", + "split2": "^3.1.1", + "strip-json-comments": "^3.0.1" + }, + "dependencies": { + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "pino-std-serializers": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.4.2.tgz", + "integrity": "sha512-WaL504dO8eGs+vrK+j4BuQQq6GLKeCCcHaMB2ItygzVURcL1CycwNEUHTD/lHFHs/NL5qAz2UKrjYWXKSf4aMQ==" + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -3677,6 +3815,16 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -3692,6 +3840,11 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, + "quick-format-unescaped": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-3.0.3.tgz", + "integrity": "sha512-dy1yjycmn9blucmJLXOfZDx1ikZJUi6E8bBZLnhPG5gBrVhHXx2xVyqqgKBubVNEXmx51dBACMHpoMQK/N/AXQ==" + }, "random-bytes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", @@ -4148,6 +4301,14 @@ } } }, + "sonic-boom": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-0.7.6.tgz", + "integrity": "sha512-k9E2QQ4zxuVRLDW+ZW6ISzJs3wlEorVdmM7ApDgor7wsGKSDG5YGHsGmgLY4XYh4DMlr/2ap2BWAE7yTFJtWnQ==", + "requires": { + "flatstr": "^1.0.12" + } + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -4188,6 +4349,28 @@ "through": "2" } }, + "split2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.1.1.tgz", + "integrity": "sha512-emNzr1s7ruq4N+1993yht631/JH+jaj0NYBosuKmLcq+JkGQ9MmTw1RB1fGaTCzUuseRIClrlSLHRNYGwWQ58Q==", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", diff --git a/server/package.json b/server/package.json index 42721841c..a30b55a40 100644 --- a/server/package.json +++ b/server/package.json @@ -28,8 +28,8 @@ }, "scripts": { "prepublishOnly": "cd .. && ./scripts/build.sh", - "start": "node-dev server.js --dbPath ../db --port 3010 --debug --baseUrl /sqlpad --config './config.dev.ini'", - "test": "rimraf ../dbtest && SQLPAD_DB_PATH='../dbtest' SQLPAD_TEST='true' mocha test --timeout 10000 --recursive --exit", + "start": "node-dev server.js --dbPath ../db --port 3010 --debug --baseUrl /sqlpad --config './config.dev.ini' | pino-pretty", + "test": "rimraf ../dbtest && SQLPAD_DB_PATH='../dbtest' SQLPAD_DEBUG='true' SQLPAD_APP_LOG_LEVEL='silent' SQLPAD_WEB_LOG_LEVEL='silent' mocha test --timeout 10000 --recursive --exit", "fixlint": "eslint --fix '**/*.js'", "lint": "eslint '**/*.js'" }, @@ -41,6 +41,7 @@ "detect-port": "^1.3.0", "errorhandler": "^1.5.1", "express": "^4.17.1", + "express-pino-logger": "^4.0.0", "express-session": "^1.17.0", "hdb": "^0.17.1", "helmet": "^3.21.2", @@ -50,7 +51,6 @@ "minimist": "^1.2.0", "mkdirp": "^1.0.3", "moment": "^2.24.0", - "morgan": "^1.9.1", "mssql": "^6.0.1", "mysql": "^2.18.1", "nedb": "^1.8.0", @@ -66,6 +66,7 @@ "passport-saml": "^1.3.2", "pg": "^7.18.1", "pg-cursor": "^2.1.5", + "pino": "^5.16.0", "request": "^2.88.2", "rimraf": "^3.0.2", "sanitize-filename": "^1.6.3", @@ -92,6 +93,7 @@ "eslint-plugin-prettier": "^3.1.2", "mocha": "^7.0.1", "node-dev": "^4.0.0", + "pino-pretty": "^3.6.0", "supertest": "^4.0.2" } } diff --git a/server/routes/download-results.js b/server/routes/download-results.js index b015c8a57..2d72730cb 100644 --- a/server/routes/download-results.js +++ b/server/routes/download-results.js @@ -2,6 +2,7 @@ const fs = require('fs'); const router = require('express').Router(); const resultCache = require('../models/resultCache.js'); const config = require('../lib/config'); +const logger = require('../lib/logger'); router.get('/download-results/:cacheKey.csv', async function(req, res, next) { const { cacheKey } = req.params; @@ -22,7 +23,7 @@ router.get('/download-results/:cacheKey.csv', async function(req, res, next) { return next(new Error('CSV download disabled')); } } catch (error) { - console.error(error); + logger.error(error); // TODO figure out what this sends and set manually return next(error); } @@ -50,7 +51,7 @@ router.get('/download-results/:cacheKey.xlsx', async function(req, res, next) { return next(new Error('XLSX download disabled')); } } catch (error) { - console.error(error); + logger.error(error); // TODO figure out what this sends and set manually return next(error); } @@ -75,7 +76,7 @@ router.get('/download-results/:cacheKey.json', async function(req, res, next) { return next(new Error('JSON download disabled')); } } catch (error) { - console.error(error); + logger.error(error); // TODO figure out what this sends and set manually return next(error); } diff --git a/server/routes/forgot-password.js b/server/routes/forgot-password.js index 8870fda28..44e751e04 100644 --- a/server/routes/forgot-password.js +++ b/server/routes/forgot-password.js @@ -4,6 +4,7 @@ const usersUtil = require('../models/users.js'); const email = require('../lib/email'); const sendError = require('../lib/sendError'); const config = require('../lib/config'); +const logger = require('../lib/logger'); router.post('/api/forgot-password', async function(req, res) { if (!req.body.email) { @@ -30,7 +31,7 @@ router.post('/api/forgot-password', async function(req, res) { const resetPath = `/password-reset/${user.passwordResetId}`; email .sendForgotPassword(req.body.email, resetPath) - .catch(error => console.error(error)); + .catch(error => logger.error(error)); return res.json({}); } catch (error) { diff --git a/server/routes/signup-signin-signout.js b/server/routes/signup-signin-signout.js index e497dd3f3..224e57b75 100644 --- a/server/routes/signup-signin-signout.js +++ b/server/routes/signup-signin-signout.js @@ -4,6 +4,7 @@ const checkWhitelist = require('../lib/check-whitelist'); const usersUtil = require('../models/users.js'); const sendError = require('../lib/sendError'); const config = require('../lib/config'); +const logger = require('../lib/logger'); async function handleSignup(req, res, next) { try { @@ -75,7 +76,7 @@ router.get('/api/signout', function(req, res) { } req.session.destroy(function(err) { if (err) { - console.error(err); + logger.error(err); } res.json({}); }); diff --git a/server/routes/users.js b/server/routes/users.js index 1bad84f27..d117604b7 100644 --- a/server/routes/users.js +++ b/server/routes/users.js @@ -5,6 +5,7 @@ const mustBeAdmin = require('../middleware/must-be-admin.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const sendError = require('../lib/sendError'); const config = require('../lib/config'); +const logger = require('../lib/logger'); router.get('/api/users', mustBeAuthenticated, async function(req, res) { try { @@ -28,7 +29,7 @@ router.post('/api/users', mustBeAdmin, async function(req, res) { }); if (config.smtpConfigured()) { - email.sendInvite(req.body.email).catch(error => console.error(error)); + email.sendInvite(req.body.email).catch(error => logger.error(error)); } return res.json({ user }); } catch (error) { diff --git a/server/server.js b/server/server.js index 0fb5ae7cd..1a01825c5 100755 --- a/server/server.js +++ b/server/server.js @@ -8,8 +8,16 @@ const detectPort = require('detect-port'); // Parse command line flags to see if anything special needs to happen require('./lib/cli-flow.js'); +const logger = require('./lib/logger'); const config = require('./lib/config'); +const configValidations = config.getValidations(); +configValidations.warnings.map(warning => logger.warn(warning)); +if (configValidations.errors.length > 0) { + configValidations.errors.forEach(error => logger.error(error)); + process.exit(1); +} + const app = require('./app'); const baseUrl = config.get('baseUrl'); @@ -45,13 +53,12 @@ function detectPortOrSystemd(port) { // We just crab the first socket from fd 3 since sqlpad binds only one // port. if (passedSocketCount > 0) { - console.log('Using port from Systemd'); + logger.info('Using port from Systemd'); return Promise.resolve({ fd: 3 }); } else { - console.error( - 'Warning: Systemd socket asked but not found. Trying to bind port ' + - port + - ' manually' + logger.warn( + 'Warning: Systemd socket asked but not found. Trying to bind port %d manually', + port ); } } @@ -69,8 +76,8 @@ async function startServer() { // https only const _port = await detectPortOrSystemd(httpsPort); if (!isFdObject(_port) && httpsPort !== _port) { - console.log( - '\nPort %d already occupied. Using port %d instead.', + logger.info( + 'Port %d already occupied. Using port %d instead.', httpsPort, _port ); @@ -91,41 +98,41 @@ async function startServer() { .listen(_port, ip, function() { const hostIp = ip === '0.0.0.0' ? 'localhost' : ip; const url = `https://${hostIp}:${_port}${baseUrl}`; - console.log(`\nWelcome to SQLPad!. Visit ${url} to get started`); + logger.info('Welcome to SQLPad!. Visit %s to get started', url); }); } else { // http only const _port = await detectPortOrSystemd(port); if (!isFdObject(_port) && port !== _port) { - console.log( - '\nPort %d already occupied. Using port %d instead.', + logger.info( + 'Port %d already occupied. Using port %d instead.', port, _port ); + // TODO FIXME XXX Persist the new port to the in-memory store. // config.set('port', _port) } server = http.createServer(app).listen(_port, ip, function() { const hostIp = ip === '0.0.0.0' ? 'localhost' : ip; const url = `http://${hostIp}:${_port}${baseUrl}`; - console.log(`\nWelcome to SQLPad!. Visit ${url} to get started`); + logger.info('Welcome to SQLPad! Visit %s to get started', url); }); } server.setTimeout(timeoutSeconds * 1000); } db.loadPromise.then(startServer).catch(error => { - console.log('Error starting SQLPad'); - console.error(error); + logger.error(error, 'Error starting SQLPad'); process.exit(1); }); function handleShutdownSignal(signal) { if (!server) { - console.log(`Received ${signal}, but no server to shutdown`); + logger.info('Received %s, but no server to shutdown', signal); process.exit(0); } else { - console.log(`Received ${signal}, shutting down server...`); + logger.info('Received %s, shutting down server...', signal); server.close(function() { process.exit(0); }); From 049f473912236eccac260da80fa9194697ae1bf1 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 18 Feb 2020 17:49:34 -0600 Subject: [PATCH 007/658] Remove errorhandler middleware (#534) --- server/app.js | 7 ------- server/package-lock.json | 9 --------- server/package.json | 1 - 3 files changed, 17 deletions(-) diff --git a/server/app.js b/server/app.js index f269933df..4eec6376b 100644 --- a/server/app.js +++ b/server/app.js @@ -45,7 +45,6 @@ const samlAuthContext = config.get('samlAuthContext'); const bodyParser = require('body-parser'); const favicon = require('serve-favicon'); const passport = require('passport'); -const errorhandler = require('errorhandler'); const app = express(); @@ -60,12 +59,6 @@ app.use(helmet.referrerPolicy({ policy: 'same-origin' })); app.set('env', debug ? 'development' : 'production'); -// TODO remove error handler - All it sends full stack trace and error to client, -// and that should be available in logs and other dev tooling instead -if (debug) { - app.use(errorhandler()); -} - app.use(expressPino); app.use(favicon(path.join(__dirname, '/public/favicon.ico'))); app.use(bodyParser.json()); diff --git a/server/package-lock.json b/server/package-lock.json index 7b0adaa2a..923f7d4b6 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1188,15 +1188,6 @@ "is-arrayish": "^0.2.1" } }, - "errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", - "requires": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - } - }, "es-abstract": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", diff --git a/server/package.json b/server/package.json index a30b55a40..74702969a 100644 --- a/server/package.json +++ b/server/package.json @@ -39,7 +39,6 @@ "body-parser": "^1.19.0", "cassandra-driver": "^4.4.0", "detect-port": "^1.3.0", - "errorhandler": "^1.5.1", "express": "^4.17.1", "express-pino-logger": "^4.0.0", "express-session": "^1.17.0", From 5de153b23d198d396e585c726bed3eb28ca2b49b Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 18 Feb 2020 19:18:39 -0600 Subject: [PATCH 008/658] Reorganize auth implementations (#535) --- server/app.js | 29 +---- server/middleware/passport.js | 171 +------------------------ server/routes/oauth.js | 98 ++++++++++++-- server/routes/saml.js | 81 ++++++++++-- server/routes/signup-signin-signout.js | 59 +++++++++ 5 files changed, 221 insertions(+), 217 deletions(-) diff --git a/server/app.js b/server/app.js index 4eec6376b..d635ab7fd 100644 --- a/server/app.js +++ b/server/app.js @@ -8,9 +8,6 @@ const config = require('./lib/config'); const logger = require('./lib/logger'); const baseUrl = config.get('baseUrl'); -const googleClientId = config.get('googleClientId'); -const googleClientSecret = config.get('googleClientSecret'); -const publicUrl = config.get('publicUrl'); const dbPath = config.get('dbPath'); const debug = config.get('debug'); const webLogLevel = config.get('webLogLevel'); @@ -34,12 +31,6 @@ const expressPino = require('express-pino-logger')({ } }); -const samlEntryPoint = config.get('samlEntryPoint'); -const samlIssuer = config.get('samlIssuer'); -const samlCallbackUrl = config.get('samlCallbackUrl'); -const samlCert = config.get('samlCert'); -const samlAuthContext = config.get('samlAuthContext'); - /* Express setup ============================================================================= */ const bodyParser = require('body-parser'); @@ -107,25 +98,11 @@ const routers = [ require('./routes/schema-info.js'), require('./routes/tags.js'), require('./routes/format-sql.js'), - require('./routes/signup-signin-signout.js') + require('./routes/signup-signin-signout.js'), + require('./routes/oauth.js'), + require('./routes/saml.js') ]; -if (googleClientId && googleClientSecret && publicUrl) { - logger.info('Enabling Google authentication Strategy.'); - routers.push(require('./routes/oauth.js')); -} - -if ( - samlEntryPoint && - samlIssuer && - samlCallbackUrl && - samlCert && - samlAuthContext -) { - logger.info('Enabling SAML authentication Strategy.'); - routers.push(require('./routes/saml.js')); -} - // Add all core routes to the baseUrl except for the */api/app route routers.forEach(function(router) { app.use(baseUrl, router); diff --git a/server/middleware/passport.js b/server/middleware/passport.js index 82f9f0aa6..5e5b617f3 100644 --- a/server/middleware/passport.js +++ b/server/middleware/passport.js @@ -1,25 +1,12 @@ const passport = require('passport'); -const PassportLocalStrategy = require('passport-local').Strategy; -const PassportGoogleStrategy = require('passport-google-oauth20').Strategy; -const BasicStrategy = require('passport-http').BasicStrategy; -const SamlStrategy = require('passport-saml').Strategy; const usersUtil = require('../models/users.js'); -const config = require('../lib/config'); -const logger = require('../lib/logger'); -const checkWhitelist = require('../lib/check-whitelist.js'); -const passhash = require('../lib/passhash.js'); -const baseUrl = config.get('baseUrl'); -const googleClientId = config.get('googleClientId'); -const googleClientSecret = config.get('googleClientSecret'); -const publicUrl = config.get('publicUrl'); -const disableUserpassAuth = config.get('disableUserpassAuth'); - -const samlEntryPoint = config.get('samlEntryPoint'); -const samlIssuer = config.get('samlIssuer'); -const samlCallbackUrl = config.get('samlCallbackUrl'); -const samlCert = config.get('samlCert'); -const samlAuthContext = config.get('samlAuthContext'); +// For actual passport strategy implementations, refer to related route files: +// Local & Basic: routes/signup-signin-signout.js +// Google: routes/oauth.js +// SAML: routes/saml.js +// +// The passport config below applies regardless of the strategy used. passport.serializeUser(function(user, done) { done(null, user.id); @@ -41,149 +28,3 @@ passport.deserializeUser(async function(id, done) { done(error); } }); - -if (!disableUserpassAuth) { - passport.use( - new PassportLocalStrategy( - { - usernameField: 'email' - }, - async function passportLocalStrategyHandler(email, password, done) { - try { - const user = await usersUtil.findOneByEmail(email); - if (!user) { - return done(null, false, { message: 'wrong email or password' }); - } - const isMatch = await passhash.comparePassword( - password, - user.passhash - ); - if (isMatch) { - return done(null, { - id: user._id, - _id: user._id, - role: user.role, - email: user.email - }); - } - return done(null, false, { message: 'wrong email or password' }); - } catch (error) { - done(error); - } - } - ) - ); - - passport.use( - new BasicStrategy(async function(username, password, callback) { - try { - const user = await usersUtil.findOneByEmail(username); - if (!user) { - return callback(null, false); - } - const isMatch = await passhash.comparePassword(password, user.passhash); - if (!isMatch) { - return callback(null, false); - } - return callback(null, user); - } catch (error) { - callback(error); - } - }) - ); -} - -if (config.googleAuthConfigured()) { - passport.use( - new PassportGoogleStrategy( - { - clientID: googleClientId, - clientSecret: googleClientSecret, - callbackURL: publicUrl + baseUrl + '/auth/google/callback', - // This option tells the strategy to use the userinfo endpoint instead - userProfileURL: 'https://www.googleapis.com/oauth2/v3/userinfo?alt=json' - }, - passportGoogleStrategyHandler - ) - ); -} - -if (samlEntryPoint) { - passport.use( - new SamlStrategy( - { - path: '/login/callback', - entryPoint: samlEntryPoint, - issuer: samlIssuer, - callbackUrl: samlCallbackUrl, - cert: samlCert, - authnContext: samlAuthContext, - identifierFormat: null - }, - async function(p, done) { - const email = - p[ - 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress' - ]; - const user = await usersUtil.findOneByEmail(email); - logger.info('User logged in via SAML %s', email); - if (!user) { - return done(null, false); - } - return done(null, { - id: user._id, - _id: user._id, - role: user.role, - email: user.email - }); - } - ) - ); -} - -async function passportGoogleStrategyHandler( - accessToken, - refreshToken, - profile, - done -) { - const email = profile && profile._json && profile._json.email; - - if (!email) { - return done(null, false, { - message: 'email not provided from Google' - }); - } - - try { - let [openAdminRegistration, user] = await Promise.all([ - usersUtil.adminRegistrationOpen(), - usersUtil.findOneByEmail(email) - ]); - - if (user) { - user.signupDate = new Date(); - const newUser = await usersUtil.save(user); - newUser.id = newUser._id; - return done(null, newUser); - } - const whitelistedDomains = config.get('whitelistedDomains'); - if (openAdminRegistration || checkWhitelist(whitelistedDomains, email)) { - const newUser = await usersUtil.save({ - email, - role: openAdminRegistration ? 'admin' : 'editor', - signupDate: new Date() - }); - newUser.id = newUser._id; - return done(null, newUser); - } - // at this point we don't have an error, but authentication is invalid - // per passport docs, we call done() here without an error - // instead passing false for user and a message why - return done(null, false, { - message: "You haven't been invited by an admin yet." - }); - } catch (error) { - done(error, null); - } -} diff --git a/server/routes/oauth.js b/server/routes/oauth.js index 282e99b0c..ae5653f70 100644 --- a/server/routes/oauth.js +++ b/server/routes/oauth.js @@ -1,19 +1,93 @@ const passport = require('passport'); +const PassportGoogleStrategy = require('passport-google-oauth20').Strategy; const router = require('express').Router(); const config = require('../lib/config'); +const logger = require('../lib/logger'); +const checkWhitelist = require('../lib/check-whitelist.js'); +const usersUtil = require('../models/users.js'); const baseUrl = config.get('baseUrl'); -router.get( - '/auth/google', - passport.authenticate('google', { scope: ['profile email'] }) -); - -router.get( - '/auth/google/callback', - passport.authenticate('google', { - successRedirect: baseUrl + '/', - failureRedirect: baseUrl + '/signin' - }) -); +const googleClientId = config.get('googleClientId'); +const googleClientSecret = config.get('googleClientSecret'); +const publicUrl = config.get('publicUrl'); + +async function passportGoogleStrategyHandler( + accessToken, + refreshToken, + profile, + done +) { + const email = profile && profile._json && profile._json.email; + + if (!email) { + return done(null, false, { + message: 'email not provided from Google' + }); + } + + try { + let [openAdminRegistration, user] = await Promise.all([ + usersUtil.adminRegistrationOpen(), + usersUtil.findOneByEmail(email) + ]); + + if (user) { + user.signupDate = new Date(); + const newUser = await usersUtil.save(user); + newUser.id = newUser._id; + return done(null, newUser); + } + const whitelistedDomains = config.get('whitelistedDomains'); + if (openAdminRegistration || checkWhitelist(whitelistedDomains, email)) { + const newUser = await usersUtil.save({ + email, + role: openAdminRegistration ? 'admin' : 'editor', + signupDate: new Date() + }); + newUser.id = newUser._id; + return done(null, newUser); + } + // at this point we don't have an error, but authentication is invalid + // per passport docs, we call done() here without an error + // instead passing false for user and a message why + return done(null, false, { + message: "You haven't been invited by an admin yet." + }); + } catch (error) { + done(error, null); + } +} + +if (config.googleAuthConfigured()) { + logger.info('Enabling Google authentication strategy.'); + + // Register the passport strategy + passport.use( + new PassportGoogleStrategy( + { + clientID: googleClientId, + clientSecret: googleClientSecret, + callbackURL: publicUrl + baseUrl + '/auth/google/callback', + // This option tells the strategy to use the userinfo endpoint instead + userProfileURL: 'https://www.googleapis.com/oauth2/v3/userinfo?alt=json' + }, + passportGoogleStrategyHandler + ) + ); + + // Add routes for oauth flow + router.get( + '/auth/google', + passport.authenticate('google', { scope: ['profile email'] }) + ); + + router.get( + '/auth/google/callback', + passport.authenticate('google', { + successRedirect: baseUrl + '/', + failureRedirect: baseUrl + '/signin' + }) + ); +} module.exports = router; diff --git a/server/routes/saml.js b/server/routes/saml.js index 8b107ad9c..b1e9208ce 100644 --- a/server/routes/saml.js +++ b/server/routes/saml.js @@ -1,20 +1,73 @@ const passport = require('passport'); +const SamlStrategy = require('passport-saml').Strategy; const router = require('express').Router(); +const config = require('../lib/config'); +const logger = require('../lib/logger'); +const usersUtil = require('../models/users.js'); -router.post( - '/login/callback', - passport.authenticate('saml', { failureRedirect: '/', failureFlash: true }), - function(req, res) { - res.redirect('/'); - } -); +const samlEntryPoint = config.get('samlEntryPoint'); +const samlIssuer = config.get('samlIssuer'); +const samlCallbackUrl = config.get('samlCallbackUrl'); +const samlCert = config.get('samlCert'); +const samlAuthContext = config.get('samlAuthContext'); -router.get( - '/auth/saml', - passport.authenticate('saml', { failureRedirect: '/', failureFlash: true }), - function(req, res) { - res.redirect('/'); - } -); +if ( + samlEntryPoint && + samlIssuer && + samlCallbackUrl && + samlCert && + samlAuthContext +) { + logger.info('Enabling SAML authentication strategy.'); + + // Register SAML strategy + passport.use( + new SamlStrategy( + { + path: '/login/callback', + entryPoint: samlEntryPoint, + issuer: samlIssuer, + callbackUrl: samlCallbackUrl, + cert: samlCert, + authnContext: samlAuthContext, + identifierFormat: null + }, + async function(p, done) { + const email = + p[ + 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress' + ]; + const user = await usersUtil.findOneByEmail(email); + logger.info('User logged in via SAML %s', email); + if (!user) { + return done(null, false); + } + return done(null, { + id: user._id, + _id: user._id, + role: user.role, + email: user.email + }); + } + ) + ); + + // Add SAML auth routes + router.post( + '/login/callback', + passport.authenticate('saml', { failureRedirect: '/', failureFlash: true }), + function(req, res) { + res.redirect('/'); + } + ); + + router.get( + '/auth/saml', + passport.authenticate('saml', { failureRedirect: '/', failureFlash: true }), + function(req, res) { + res.redirect('/'); + } + ); +} module.exports = router; diff --git a/server/routes/signup-signin-signout.js b/server/routes/signup-signin-signout.js index 224e57b75..5bc8df3bc 100644 --- a/server/routes/signup-signin-signout.js +++ b/server/routes/signup-signin-signout.js @@ -1,10 +1,13 @@ const passport = require('passport'); +const PassportLocalStrategy = require('passport-local').Strategy; +const BasicStrategy = require('passport-http').BasicStrategy; const router = require('express').Router(); const checkWhitelist = require('../lib/check-whitelist'); const usersUtil = require('../models/users.js'); const sendError = require('../lib/sendError'); const config = require('../lib/config'); const logger = require('../lib/logger'); +const passhash = require('../lib/passhash.js'); async function handleSignup(req, res, next) { try { @@ -58,6 +61,62 @@ function sendSuccess(req, res) { /* Some routes should only exist if userpath auth is enabled ============================================================================= */ if (!config.get('disableUserpassAuth')) { + // Register local auth strategy + // TODO: Should all authentication strategies be disabled by default, requiring SQLPad implementer to pick one? + // This might be more secure as it'd prevent SQLPad's from launching with local auth enabled and open admin registration by default + logger.info('Enabling local authentication strategy.'); + passport.use( + new PassportLocalStrategy( + { + usernameField: 'email' + }, + async function passportLocalStrategyHandler(email, password, done) { + try { + const user = await usersUtil.findOneByEmail(email); + if (!user) { + return done(null, false, { message: 'wrong email or password' }); + } + const isMatch = await passhash.comparePassword( + password, + user.passhash + ); + if (isMatch) { + return done(null, { + id: user._id, + _id: user._id, + role: user.role, + email: user.email + }); + } + return done(null, false, { message: 'wrong email or password' }); + } catch (error) { + done(error); + } + } + ) + ); + + // TODO - basic auth should perhaps be something opted into as a separate config + logger.info('Enabling basic authentication strategy.'); + passport.use( + new BasicStrategy(async function(username, password, callback) { + try { + const user = await usersUtil.findOneByEmail(username); + if (!user) { + return callback(null, false); + } + const isMatch = await passhash.comparePassword(password, user.passhash); + if (!isMatch) { + return callback(null, false); + } + return callback(null, user); + } catch (error) { + callback(error); + } + }) + ); + + // Add routes for local auth signup & signin router.post( '/api/signup', handleSignup, From 279ca4d87f31712e1c13d8135c7147423fdc58d9 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Wed, 19 Feb 2020 00:28:43 -0600 Subject: [PATCH 009/658] Move passport basic authentication to own middleware (#538) --- server/app.js | 7 +++++++ .../must-be-authenticated-or-chart-link-noauth.js | 8 +------- server/middleware/must-be-authenticated.js | 8 +------- server/middleware/passport-basic.js | 11 +++++++++++ 4 files changed, 20 insertions(+), 14 deletions(-) create mode 100644 server/middleware/passport-basic.js diff --git a/server/app.js b/server/app.js index d635ab7fd..8a3301a2d 100644 --- a/server/app.js +++ b/server/app.js @@ -36,6 +36,7 @@ const expressPino = require('express-pino-logger')({ const bodyParser = require('body-parser'); const favicon = require('serve-favicon'); const passport = require('passport'); +const passportBasic = require('./middleware/passport-basic'); const app = express(); @@ -81,6 +82,12 @@ app.use(baseUrl, express.static(path.join(__dirname, 'public'))); ============================================================================= */ require('./middleware/passport.js'); +// If local auth is not disabled, support basic auth using a user's email and password +// This is currently used for running integration tests and serves as a convenient alternative to API keys +if (!config.get('disableUserpassAuth')) { + app.use(passportBasic); +} + /* Routes ============================================================================= */ const routers = [ diff --git a/server/middleware/must-be-authenticated-or-chart-link-noauth.js b/server/middleware/must-be-authenticated-or-chart-link-noauth.js index 3dad0d9a0..43e51b291 100644 --- a/server/middleware/must-be-authenticated-or-chart-link-noauth.js +++ b/server/middleware/must-be-authenticated-or-chart-link-noauth.js @@ -1,15 +1,9 @@ -const passport = require('passport'); const config = require('../lib/config'); -// If authenticated continue -// If not and auth header is present, try authenticated with http basic -// Otherwise redirect user to signin +// If authenticated or setting allows it continue. Otherwise redirect user to signin module.exports = function mustBeAuthenticatedOrChartLinkNoAuth(req, res, next) { if (req.isAuthenticated() || !config.get('tableChartLinksRequireAuth')) { return next(); } - if (req.headers.authorization) { - return passport.authenticate('basic', { session: false })(req, res, next); - } res.redirect(config.get('baseUrl') + '/signin'); }; diff --git a/server/middleware/must-be-authenticated.js b/server/middleware/must-be-authenticated.js index ccfcdc0f7..62415d191 100644 --- a/server/middleware/must-be-authenticated.js +++ b/server/middleware/must-be-authenticated.js @@ -1,15 +1,9 @@ -const passport = require('passport'); const config = require('../lib/config'); -// If authenticated continue -// If not and auth header is present, try authenticated with http basic -// Otherwise redirect user to signin +// If authenticated continue. otherwise redirect user to signin module.exports = function mustBeAuthenticated(req, res, next) { if (req.isAuthenticated()) { return next(); } - if (req.headers.authorization) { - return passport.authenticate('basic', { session: false })(req, res, next); - } res.redirect(config.get('baseUrl') + '/signin'); }; diff --git a/server/middleware/passport-basic.js b/server/middleware/passport-basic.js new file mode 100644 index 000000000..7e2705c10 --- /dev/null +++ b/server/middleware/passport-basic.js @@ -0,0 +1,11 @@ +const passport = require('passport'); + +module.exports = function(req, res, next) { + if ( + req.headers.authorization && + req.headers.authorization.startsWith('Basic ') + ) { + return passport.authenticate('basic', { session: false })(req, res, next); + } + next(); +}; From 494ec9b3572ecdc65c04b7bb7cef974ae33f954e Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Wed, 19 Feb 2020 11:44:33 -0600 Subject: [PATCH 010/658] Inject config into express app (#539) * combine cipher/decipher * Pass config to email, app, and slack util * Reference config from req --- server/app.js | 287 ++++++++++-------- server/lib/cipher.js | 10 - server/lib/decipher.js | 13 - server/lib/email.js | 127 ++++---- server/lib/makeCipher.js | 18 ++ server/lib/pushQueryToSlack.js | 6 +- ...t-be-authenticated-or-chart-link-noauth.js | 6 +- server/middleware/must-be-authenticated.js | 4 +- ...-connection-access-or-chart-link-noauth.js | 3 +- server/models/connections.js | 6 +- server/routes/app.js | 2 +- server/routes/download-results.js | 7 +- server/routes/forgot-password.js | 7 +- server/routes/oauth.js | 154 +++++----- server/routes/queries.js | 10 +- server/routes/query-history.js | 3 +- server/routes/query-result.js | 13 +- server/routes/saml.js | 131 ++++---- server/routes/signup-signin-signout.js | 147 ++++----- server/routes/users.js | 7 +- server/server.js | 2 +- server/test/lib/email.js | 4 +- server/test/utils.js | 3 +- 23 files changed, 505 insertions(+), 465 deletions(-) delete mode 100644 server/lib/cipher.js delete mode 100644 server/lib/decipher.js create mode 100644 server/lib/makeCipher.js diff --git a/server/app.js b/server/app.js index 8a3301a2d..1e206c7fd 100644 --- a/server/app.js +++ b/server/app.js @@ -4,150 +4,167 @@ const express = require('express'); const helmet = require('helmet'); const session = require('express-session'); const FileStore = require('session-file-store')(session); -const config = require('./lib/config'); const logger = require('./lib/logger'); -const baseUrl = config.get('baseUrl'); -const dbPath = config.get('dbPath'); -const debug = config.get('debug'); -const webLogLevel = config.get('webLogLevel'); -const cookieName = config.get('cookieName'); -const cookieSecret = config.get('cookieSecret'); -const sessionMinutes = config.get('sessionMinutes'); - -const expressPino = require('express-pino-logger')({ - level: webLogLevel, - name: 'sqlpad-web', - // express-pino-logger logs all the headers by default - // Removing these for now but open to adding them back in based on feedback - redact: { - paths: [ - 'req.headers', - 'res.headers', - 'req.remoteAddress', - 'req.remotePort' - ], - remove: true +/** + * Create an express app using config + * @param {object} config + */ +function makeApp(config) { + if (typeof config.get !== 'function') { + throw new Error('config is required to create app'); } -}); -/* Express setup + const baseUrl = config.get('baseUrl'); + const dbPath = config.get('dbPath'); + const debug = config.get('debug'); + const webLogLevel = config.get('webLogLevel'); + const cookieName = config.get('cookieName'); + const cookieSecret = config.get('cookieSecret'); + const sessionMinutes = config.get('sessionMinutes'); + + const expressPino = require('express-pino-logger')({ + level: webLogLevel, + name: 'sqlpad-web', + // express-pino-logger logs all the headers by default + // Removing these for now but open to adding them back in based on feedback + redact: { + paths: [ + 'req.headers', + 'res.headers', + 'req.remoteAddress', + 'req.remotePort' + ], + remove: true + } + }); + + /* Express setup ============================================================================= */ -const bodyParser = require('body-parser'); -const favicon = require('serve-favicon'); -const passport = require('passport'); -const passportBasic = require('./middleware/passport-basic'); - -const app = express(); - -// Default helmet protections, minus frameguard (becaue of sqlpad iframe embed), adding referrerPolicy -app.use(helmet.dnsPrefetchControl()); -app.use(helmet.hidePoweredBy()); -app.use(helmet.hsts({})); -app.use(helmet.ieNoOpen()); -app.use(helmet.noSniff()); -app.use(helmet.xssFilter()); -app.use(helmet.referrerPolicy({ policy: 'same-origin' })); - -app.set('env', debug ? 'development' : 'production'); - -app.use(expressPino); -app.use(favicon(path.join(__dirname, '/public/favicon.ico'))); -app.use(bodyParser.json()); -app.use( - bodyParser.urlencoded({ - extended: true - }) -); - -app.use( - session({ - store: new FileStore({ - path: path.join(dbPath, '/sessions') - }), - saveUninitialized: false, - resave: true, - rolling: true, - cookie: { maxAge: 1000 * 60 * sessionMinutes }, - secret: cookieSecret, - name: cookieName - }) -); - -app.use(passport.initialize()); -app.use(passport.session()); -app.use(baseUrl, express.static(path.join(__dirname, 'public'))); - -/* Passport setup + const bodyParser = require('body-parser'); + const favicon = require('serve-favicon'); + const passport = require('passport'); + const passportBasic = require('./middleware/passport-basic'); + + const app = express(); + + // Default helmet protections, minus frameguard (becaue of sqlpad iframe embed), adding referrerPolicy + app.use(helmet.dnsPrefetchControl()); + app.use(helmet.hidePoweredBy()); + app.use(helmet.hsts({})); + app.use(helmet.ieNoOpen()); + app.use(helmet.noSniff()); + app.use(helmet.xssFilter()); + app.use(helmet.referrerPolicy({ policy: 'same-origin' })); + + // Add config to req.config + app.use(function(req, res, next) { + req.config = config; + next(); + }); + + app.set('env', debug ? 'development' : 'production'); + + app.use(expressPino); + app.use(favicon(path.join(__dirname, '/public/favicon.ico'))); + app.use(bodyParser.json()); + app.use( + bodyParser.urlencoded({ + extended: true + }) + ); + + app.use( + session({ + store: new FileStore({ + path: path.join(dbPath, '/sessions') + }), + saveUninitialized: false, + resave: true, + rolling: true, + cookie: { maxAge: 1000 * 60 * sessionMinutes }, + secret: cookieSecret, + name: cookieName + }) + ); + + app.use(passport.initialize()); + app.use(passport.session()); + app.use(baseUrl, express.static(path.join(__dirname, 'public'))); + + /* Passport setup ============================================================================= */ -require('./middleware/passport.js'); + require('./middleware/passport.js'); -// If local auth is not disabled, support basic auth using a user's email and password -// This is currently used for running integration tests and serves as a convenient alternative to API keys -if (!config.get('disableUserpassAuth')) { - app.use(passportBasic); -} + // If local auth is not disabled, support basic auth using a user's email and password + // This is currently used for running integration tests and serves as a convenient alternative to API keys + if (!config.get('disableUserpassAuth')) { + app.use(passportBasic); + } -/* Routes + /* Routes ============================================================================= */ -const routers = [ - require('./routes/drivers.js'), - require('./routes/users.js'), - require('./routes/forgot-password.js'), - require('./routes/password-reset.js'), - require('./routes/connections.js'), - require('./routes/connection-accesses.js'), - require('./routes/test-connection.js'), - require('./routes/queries.js'), - require('./routes/query-history.js'), - require('./routes/query-result.js'), - require('./routes/download-results.js'), // streams result download to browser - require('./routes/schema-info.js'), - require('./routes/tags.js'), - require('./routes/format-sql.js'), - require('./routes/signup-signin-signout.js'), - require('./routes/oauth.js'), - require('./routes/saml.js') -]; - -// Add all core routes to the baseUrl except for the */api/app route -routers.forEach(function(router) { - app.use(baseUrl, router); -}); - -// Add '*/api/app' route last and without baseUrl -app.use(require('./routes/app.js')); - -// For any missing api route, return a 404 -// NOTE - this cannot be a general catch-all because it might be a valid non-api route from a front-end perspective -app.use(baseUrl + '/api/', function(req, res) { - req.log.debug('reached catch all api route'); - res.sendStatus(404); -}); - -// Anything else should render the client-side app -// Client-side routing will take care of things from here -// Because index.html will be served via static plugin, -// we need to rename it to something else and switch out the URLs to consider the baseUrl -const indexPath = path.join(__dirname, 'public/index.html'); -const indexTemplatePath = path.join(__dirname, 'public/index-template.html'); - -if (fs.existsSync(indexPath)) { - fs.renameSync(indexPath, indexTemplatePath); -} + const routers = [ + require('./routes/drivers.js'), + require('./routes/users.js'), + require('./routes/forgot-password.js'), + require('./routes/password-reset.js'), + require('./routes/connections.js'), + require('./routes/connection-accesses.js'), + require('./routes/test-connection.js'), + require('./routes/queries.js'), + require('./routes/query-history.js'), + require('./routes/query-result.js'), + require('./routes/download-results.js'), // streams result download to browser + require('./routes/schema-info.js'), + require('./routes/tags.js'), + require('./routes/format-sql.js'), + require('./routes/signup-signin-signout.js')(config), + require('./routes/oauth.js')(config), + require('./routes/saml.js')(config) + ]; + + // Add all core routes to the baseUrl except for the */api/app route + routers.forEach(function(router) { + app.use(baseUrl, router); + }); + + // Add '*/api/app' route last and without baseUrl + app.use(require('./routes/app.js')); + + // For any missing api route, return a 404 + // NOTE - this cannot be a general catch-all because it might be a valid non-api route from a front-end perspective + app.use(baseUrl + '/api/', function(req, res) { + req.log.debug('reached catch all api route'); + res.sendStatus(404); + }); + + // Anything else should render the client-side app + // Client-side routing will take care of things from here + // Because index.html will be served via static plugin, + // we need to rename it to something else and switch out the URLs to consider the baseUrl + const indexPath = path.join(__dirname, 'public/index.html'); + const indexTemplatePath = path.join(__dirname, 'public/index-template.html'); + + if (fs.existsSync(indexPath)) { + fs.renameSync(indexPath, indexTemplatePath); + } + + if (fs.existsSync(indexTemplatePath)) { + const html = fs.readFileSync(indexTemplatePath, 'utf8'); + const baseUrlHtml = html + .replace(/="\/stylesheets/g, `="${baseUrl}/stylesheets`) + .replace(/="\/javascripts/g, `="${baseUrl}/javascripts`) + .replace(/="\/images/g, `="${baseUrl}/images`) + .replace(/="\/fonts/g, `="${baseUrl}/fonts`) + .replace(/="\/static/g, `="${baseUrl}/static`); + app.use((req, res) => res.send(baseUrlHtml)); + } else { + logger.warn('NO FRONT END TEMPLATE DETECTED'); + logger.warn('If not running in dev mode please report this issue.'); + } -if (fs.existsSync(indexTemplatePath)) { - const html = fs.readFileSync(indexTemplatePath, 'utf8'); - const baseUrlHtml = html - .replace(/="\/stylesheets/g, `="${baseUrl}/stylesheets`) - .replace(/="\/javascripts/g, `="${baseUrl}/javascripts`) - .replace(/="\/images/g, `="${baseUrl}/images`) - .replace(/="\/fonts/g, `="${baseUrl}/fonts`) - .replace(/="\/static/g, `="${baseUrl}/static`); - app.use((req, res) => res.send(baseUrlHtml)); -} else { - logger.warn('NO FRONT END TEMPLATE DETECTED'); - logger.warn('If not running in dev mode please report this issue.'); + return app; } -module.exports = app; +module.exports = makeApp; diff --git a/server/lib/cipher.js b/server/lib/cipher.js deleted file mode 100644 index af03dc074..000000000 --- a/server/lib/cipher.js +++ /dev/null @@ -1,10 +0,0 @@ -const crypto = require('crypto'); -const algorithm = 'aes256'; -const config = require('../lib/config'); - -const passphrase = config.get('passphrase'); - -module.exports = function(text) { - const myCipher = crypto.createCipher(algorithm, passphrase); - return myCipher.update(text, 'utf8', 'hex') + myCipher.final('hex'); -}; diff --git a/server/lib/decipher.js b/server/lib/decipher.js deleted file mode 100644 index 6bf544fe5..000000000 --- a/server/lib/decipher.js +++ /dev/null @@ -1,13 +0,0 @@ -const crypto = require('crypto'); -const algorithm = 'aes256'; -const config = require('../lib/config'); -const passphrase = config.get('passphrase'); - -/** - * @param {string} gibberish ciphered value that needs deciphering - * @returns {string} deciphered value - */ -module.exports = function decipher(gibberish) { - const myDecipher = crypto.createDecipher(algorithm, passphrase); - return myDecipher.update(gibberish, 'hex', 'utf8') + myDecipher.final('utf8'); -}; diff --git a/server/lib/email.js b/server/lib/email.js index 2dafc475f..66371acb6 100644 --- a/server/lib/email.js +++ b/server/lib/email.js @@ -1,83 +1,86 @@ const nodemailer = require('nodemailer'); const logger = require('./logger'); -const config = require('./config'); -/** - * Get full sqlpad url - * @param {string} path - path (leading slash) - */ -function fullUrl(path) { - const port = config.get('port'); - const urlPort = port === 80 ? '' : ':' + port; - const urlPublicUrl = config.get('publicUrl'); - const urlBaseUrl = config.get('baseUrl'); - return `${urlPublicUrl}${urlPort}${urlBaseUrl}${path}`; -} +function makeEmail(config) { + /** + * Get full sqlpad url + * @param {string} path - path (leading slash) + */ + function fullUrl(path) { + const port = config.get('port'); + const urlPort = port === 80 ? '' : ':' + port; + const urlPublicUrl = config.get('publicUrl'); + const urlBaseUrl = config.get('baseUrl'); + return `${urlPublicUrl}${urlPort}${urlBaseUrl}${path}`; + } -function sendForgotPassword(to, passwordResetPath) { - const url = fullUrl(passwordResetPath); - const text = `Hello! \n\nYou recently requested a password reset for your SQLPad account. \n\nTo reset your password, visit ${url}.`; - const html = ` + function sendForgotPassword(to, passwordResetPath) { + const url = fullUrl(passwordResetPath); + const text = `Hello! \n\nYou recently requested a password reset for your SQLPad account. \n\nTo reset your password, visit ${url}.`; + const html = `

Hello!

You recently requested a password reset for your SQLPad account.

To reset your password, visit ${url}.

`; - return send(to, 'SQLPad Password Reset', text, html); -} + return send(to, 'SQLPad Password Reset', text, html); + } -function sendInvite(to) { - const url = fullUrl('/signup'); - const text = `Hello! \n\nA colleague has invited you to SQLPad. \n\nTo sign up, visit ${url}.`; - const html = ` + function sendInvite(to) { + const url = fullUrl('/signup'); + const text = `Hello! \n\nA colleague has invited you to SQLPad. \n\nTo sign up, visit ${url}.`; + const html = `

Hello!

A colleague has invited you to SQLPad.

To sign up, visit '${url}.

`; - return send(to, "You've been invited to SQLPad", text, html); -} - -async function send(to, subject, text, html) { - if (!config.smtpConfigured()) { - logger.error('email.send() called without being configured'); - return; + return send(to, "You've been invited to SQLPad", text, html); } - const smtpConfig = { - host: config.get('smtpHost'), - port: config.get('smtpPort'), - secure: config.get('smtpSecure'), - auth: { - user: config.get('smtpUser'), - pass: config.get('smtpPassword') - }, - tls: { - ciphers: 'SSLv3' + async function send(to, subject, text, html) { + if (!config.smtpConfigured()) { + logger.error('email.send() called without being configured'); + return; } - }; - return new Promise((resolve, reject) => { - const transporter = nodemailer.createTransport(smtpConfig); - const mailOptions = { - from: config.get('smtpFrom'), - to, - subject, - text, - html - }; - transporter.sendMail(mailOptions, function(err, info) { - logger.info('sent email: %s', info); - if (err) { - logger.error(err); - return reject(err); + const smtpConfig = { + host: config.get('smtpHost'), + port: config.get('smtpPort'), + secure: config.get('smtpSecure'), + auth: { + user: config.get('smtpUser'), + pass: config.get('smtpPassword') + }, + tls: { + ciphers: 'SSLv3' } - resolve(info); + }; + + return new Promise((resolve, reject) => { + const transporter = nodemailer.createTransport(smtpConfig); + const mailOptions = { + from: config.get('smtpFrom'), + to, + subject, + text, + html + }; + transporter.sendMail(mailOptions, function(err, info) { + logger.info('sent email: %s', info); + if (err) { + logger.error(err); + return reject(err); + } + resolve(info); + }); }); - }); + } + + return { + fullUrl, + send, + sendForgotPassword, + sendInvite + }; } -module.exports = { - fullUrl, - send, - sendForgotPassword, - sendInvite -}; +module.exports = makeEmail; diff --git a/server/lib/makeCipher.js b/server/lib/makeCipher.js new file mode 100644 index 000000000..0a7a6afb7 --- /dev/null +++ b/server/lib/makeCipher.js @@ -0,0 +1,18 @@ +const crypto = require('crypto'); +const algorithm = 'aes256'; + +module.exports = function makeCipher(passphrase) { + return { + cipher: text => { + // TODO createCipher is deprecated + const myCipher = crypto.createCipher(algorithm, passphrase); + return myCipher.update(text, 'utf8', 'hex') + myCipher.final('hex'); + }, + decipher: gibberish => { + const myDecipher = crypto.createDecipher(algorithm, passphrase); + return ( + myDecipher.update(gibberish, 'hex', 'utf8') + myDecipher.final('utf8') + ); + } + }; +}; diff --git a/server/lib/pushQueryToSlack.js b/server/lib/pushQueryToSlack.js index caa2619db..fd75662ca 100644 --- a/server/lib/pushQueryToSlack.js +++ b/server/lib/pushQueryToSlack.js @@ -1,8 +1,7 @@ const logger = require('./logger'); -const config = require('./config'); const request = require('request'); -function pushQueryToSlack(query) { +function pushQueryToSlack(config, query) { const SLACK_WEBHOOK = config.get('slackWebhook'); if (SLACK_WEBHOOK) { const PUBLIC_URL = config.get('publicUrl'); @@ -24,8 +23,7 @@ ${'```'}` }; request(options, function(err) { if (err) { - logger.error('Something went wrong while sending to Slack.'); - logger.error(err); + logger.error(err, 'Problem sending query to slack'); } }); } diff --git a/server/middleware/must-be-authenticated-or-chart-link-noauth.js b/server/middleware/must-be-authenticated-or-chart-link-noauth.js index 43e51b291..67b47fae5 100644 --- a/server/middleware/must-be-authenticated-or-chart-link-noauth.js +++ b/server/middleware/must-be-authenticated-or-chart-link-noauth.js @@ -1,9 +1,7 @@ -const config = require('../lib/config'); - // If authenticated or setting allows it continue. Otherwise redirect user to signin module.exports = function mustBeAuthenticatedOrChartLinkNoAuth(req, res, next) { - if (req.isAuthenticated() || !config.get('tableChartLinksRequireAuth')) { + if (req.isAuthenticated() || !req.config.get('tableChartLinksRequireAuth')) { return next(); } - res.redirect(config.get('baseUrl') + '/signin'); + res.redirect(req.config.get('baseUrl') + '/signin'); }; diff --git a/server/middleware/must-be-authenticated.js b/server/middleware/must-be-authenticated.js index 62415d191..ce0521769 100644 --- a/server/middleware/must-be-authenticated.js +++ b/server/middleware/must-be-authenticated.js @@ -1,9 +1,7 @@ -const config = require('../lib/config'); - // If authenticated continue. otherwise redirect user to signin module.exports = function mustBeAuthenticated(req, res, next) { if (req.isAuthenticated()) { return next(); } - res.redirect(config.get('baseUrl') + '/signin'); + res.redirect(req.config.get('baseUrl') + '/signin'); }; diff --git a/server/middleware/must-have-connection-access-or-chart-link-noauth.js b/server/middleware/must-have-connection-access-or-chart-link-noauth.js index 588525601..b8ce3b58e 100644 --- a/server/middleware/must-have-connection-access-or-chart-link-noauth.js +++ b/server/middleware/must-have-connection-access-or-chart-link-noauth.js @@ -1,4 +1,3 @@ -const config = require('../lib/config'); const mustBeAuthenticated = require('./must-be-authenticated'); const connectionAccessesUtil = require('../models/connectionAccesses.js'); @@ -9,7 +8,7 @@ module.exports = [ async function mustHaveConnectionAccessOrChartLinkNoAuth(req, res, next) { if ( req.user.role === 'admin' || - !config.get('tableChartLinksRequireAuth') + !req.config.get('tableChartLinksRequireAuth') ) { return next(); } diff --git a/server/models/connections.js b/server/models/connections.js index e497de7c9..7ebb90850 100644 --- a/server/models/connections.js +++ b/server/models/connections.js @@ -2,12 +2,14 @@ const db = require('../lib/db.js'); const logger = require('../lib/logger'); const _ = require('lodash'); const drivers = require('../drivers'); -const cipher = require('../lib/cipher.js'); -const decipher = require('../lib/decipher'); +const makeCipher = require('../lib/makeCipher'); +const config = require('../lib/config'); const getConfigFromFile = require('../lib/config/fromFile.js'); const [configFromFile] = getConfigFromFile() || {}; +const { cipher, decipher } = makeCipher(config.get('passphrase')); + /** * Get connections from config. * diff --git a/server/routes/app.js b/server/routes/app.js index 6ae5a1a86..a63a4e9e5 100644 --- a/server/routes/app.js +++ b/server/routes/app.js @@ -2,12 +2,12 @@ const router = require('express').Router(); const packageJson = require('../package.json'); const usersUtil = require('../models/users.js'); const sendError = require('../lib/sendError'); -const config = require('../lib/config'); // NOTE: this route needs a wildcard because it is fetched as a relative url // from the front-end. The static SPA does not know if sqlpad is mounted at // the root of a domain or if there is a base-url provided in the config router.get('*/api/app', async (req, res) => { + const { config } = req; try { const adminRegistrationOpen = await usersUtil.adminRegistrationOpen(); const currentUser = diff --git a/server/routes/download-results.js b/server/routes/download-results.js index 2d72730cb..30c8dc7df 100644 --- a/server/routes/download-results.js +++ b/server/routes/download-results.js @@ -1,13 +1,12 @@ const fs = require('fs'); const router = require('express').Router(); const resultCache = require('../models/resultCache.js'); -const config = require('../lib/config'); const logger = require('../lib/logger'); router.get('/download-results/:cacheKey.csv', async function(req, res, next) { const { cacheKey } = req.params; try { - if (config.get('allowCsvDownload')) { + if (req.config.get('allowCsvDownload')) { const cache = await resultCache.findOneByCacheKey(cacheKey); if (!cache) { return next(new Error('Result cache not found')); @@ -32,7 +31,7 @@ router.get('/download-results/:cacheKey.csv', async function(req, res, next) { router.get('/download-results/:cacheKey.xlsx', async function(req, res, next) { const { cacheKey } = req.params; try { - if (config.get('allowCsvDownload')) { + if (req.config.get('allowCsvDownload')) { const cache = await resultCache.findOneByCacheKey(cacheKey); if (!cache) { return next(new Error('Result cache not found')); @@ -60,7 +59,7 @@ router.get('/download-results/:cacheKey.xlsx', async function(req, res, next) { router.get('/download-results/:cacheKey.json', async function(req, res, next) { const { cacheKey } = req.params; try { - if (config.get('allowCsvDownload')) { + if (req.config.get('allowCsvDownload')) { const cache = await resultCache.findOneByCacheKey(cacheKey); if (!cache) { return next(new Error('Result cache not found')); diff --git a/server/routes/forgot-password.js b/server/routes/forgot-password.js index 44e751e04..26d34513f 100644 --- a/server/routes/forgot-password.js +++ b/server/routes/forgot-password.js @@ -1,19 +1,20 @@ const router = require('express').Router(); const uuid = require('uuid'); const usersUtil = require('../models/users.js'); -const email = require('../lib/email'); +const makeEmail = require('../lib/email'); const sendError = require('../lib/sendError'); -const config = require('../lib/config'); const logger = require('../lib/logger'); router.post('/api/forgot-password', async function(req, res) { if (!req.body.email) { return sendError(res, null, 'Email address must be provided'); } - if (!config.smtpConfigured()) { + if (!req.config.smtpConfigured()) { return sendError(res, null, 'Email must be configured'); } + const email = makeEmail(req.config); + try { const user = await usersUtil.findOneByEmail(req.body.email); diff --git a/server/routes/oauth.js b/server/routes/oauth.js index ae5653f70..6d194fa6c 100644 --- a/server/routes/oauth.js +++ b/server/routes/oauth.js @@ -1,93 +1,101 @@ const passport = require('passport'); const PassportGoogleStrategy = require('passport-google-oauth20').Strategy; const router = require('express').Router(); -const config = require('../lib/config'); const logger = require('../lib/logger'); const checkWhitelist = require('../lib/check-whitelist.js'); const usersUtil = require('../models/users.js'); -const baseUrl = config.get('baseUrl'); -const googleClientId = config.get('googleClientId'); -const googleClientSecret = config.get('googleClientSecret'); -const publicUrl = config.get('publicUrl'); +/** + * Adds Google auth strategy and adds Google auth routes if Google auth is configured + * @param {object} config + */ +function makeGoogleAuth(config) { + const baseUrl = config.get('baseUrl'); + const googleClientId = config.get('googleClientId'); + const googleClientSecret = config.get('googleClientSecret'); + const publicUrl = config.get('publicUrl'); -async function passportGoogleStrategyHandler( - accessToken, - refreshToken, - profile, - done -) { - const email = profile && profile._json && profile._json.email; + async function passportGoogleStrategyHandler( + accessToken, + refreshToken, + profile, + done + ) { + const email = profile && profile._json && profile._json.email; - if (!email) { - return done(null, false, { - message: 'email not provided from Google' - }); - } + if (!email) { + return done(null, false, { + message: 'email not provided from Google' + }); + } - try { - let [openAdminRegistration, user] = await Promise.all([ - usersUtil.adminRegistrationOpen(), - usersUtil.findOneByEmail(email) - ]); + try { + let [openAdminRegistration, user] = await Promise.all([ + usersUtil.adminRegistrationOpen(), + usersUtil.findOneByEmail(email) + ]); - if (user) { - user.signupDate = new Date(); - const newUser = await usersUtil.save(user); - newUser.id = newUser._id; - return done(null, newUser); - } - const whitelistedDomains = config.get('whitelistedDomains'); - if (openAdminRegistration || checkWhitelist(whitelistedDomains, email)) { - const newUser = await usersUtil.save({ - email, - role: openAdminRegistration ? 'admin' : 'editor', - signupDate: new Date() + if (user) { + user.signupDate = new Date(); + const newUser = await usersUtil.save(user); + newUser.id = newUser._id; + return done(null, newUser); + } + const whitelistedDomains = config.get('whitelistedDomains'); + if (openAdminRegistration || checkWhitelist(whitelistedDomains, email)) { + const newUser = await usersUtil.save({ + email, + role: openAdminRegistration ? 'admin' : 'editor', + signupDate: new Date() + }); + newUser.id = newUser._id; + return done(null, newUser); + } + // at this point we don't have an error, but authentication is invalid + // per passport docs, we call done() here without an error + // instead passing false for user and a message why + return done(null, false, { + message: "You haven't been invited by an admin yet." }); - newUser.id = newUser._id; - return done(null, newUser); + } catch (error) { + done(error, null); } - // at this point we don't have an error, but authentication is invalid - // per passport docs, we call done() here without an error - // instead passing false for user and a message why - return done(null, false, { - message: "You haven't been invited by an admin yet." - }); - } catch (error) { - done(error, null); } -} -if (config.googleAuthConfigured()) { - logger.info('Enabling Google authentication strategy.'); + if (config.googleAuthConfigured()) { + logger.info('Enabling Google authentication strategy.'); + + // Register the passport strategy + passport.use( + new PassportGoogleStrategy( + { + clientID: googleClientId, + clientSecret: googleClientSecret, + callbackURL: publicUrl + baseUrl + '/auth/google/callback', + // This option tells the strategy to use the userinfo endpoint instead + userProfileURL: + 'https://www.googleapis.com/oauth2/v3/userinfo?alt=json' + }, + passportGoogleStrategyHandler + ) + ); - // Register the passport strategy - passport.use( - new PassportGoogleStrategy( - { - clientID: googleClientId, - clientSecret: googleClientSecret, - callbackURL: publicUrl + baseUrl + '/auth/google/callback', - // This option tells the strategy to use the userinfo endpoint instead - userProfileURL: 'https://www.googleapis.com/oauth2/v3/userinfo?alt=json' - }, - passportGoogleStrategyHandler - ) - ); + // Add routes for oauth flow + router.get( + '/auth/google', + passport.authenticate('google', { scope: ['profile email'] }) + ); - // Add routes for oauth flow - router.get( - '/auth/google', - passport.authenticate('google', { scope: ['profile email'] }) - ); + router.get( + '/auth/google/callback', + passport.authenticate('google', { + successRedirect: baseUrl + '/', + failureRedirect: baseUrl + '/signin' + }) + ); + } - router.get( - '/auth/google/callback', - passport.authenticate('google', { - successRedirect: baseUrl + '/', - failureRedirect: baseUrl + '/signin' - }) - ); + return router; } -module.exports = router; +module.exports = makeGoogleAuth; diff --git a/server/routes/queries.js b/server/routes/queries.js index 3e3f0a691..e2af1cbab 100644 --- a/server/routes/queries.js +++ b/server/routes/queries.js @@ -3,7 +3,6 @@ const queriesUtil = require('../models/queries.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const mustBeAuthenticatedOrChartLink = require('../middleware/must-be-authenticated-or-chart-link-noauth.js'); const sendError = require('../lib/sendError'); -const config = require('../lib/config'); const pushQueryToSlack = require('../lib/pushQueryToSlack'); // NOTE: this non-api route is special since it redirects legacy urls @@ -12,12 +11,13 @@ router.get('/queries/:_id', mustBeAuthenticatedOrChartLink, function( res, next ) { - const { query, params } = req; + const { query, params, config } = req; const { format } = query; + const baseUrl = config.get('baseUrl'); if (format === 'table') { - return res.redirect(config.get('baseUrl') + '/query-table/' + params._id); + return res.redirect(`${baseUrl}/query-table/${params._id}`); } else if (format === 'chart') { - return res.redirect(config.get('baseUrl') + '/query-chart/' + params._id); + return res.redirect(`${baseUrl}/query-chart/${params._id}`); } next(); }); @@ -77,7 +77,7 @@ router.post('/api/queries', mustBeAuthenticated, async function(req, res) { try { const newQuery = await queriesUtil.save(query); // This is async, but save operation doesn't care about when/if finished - pushQueryToSlack(newQuery); + pushQueryToSlack(req.config, newQuery); return res.json({ query: newQuery }); diff --git a/server/routes/query-history.js b/server/routes/query-history.js index bb8cef86d..7c3f5dd29 100644 --- a/server/routes/query-history.js +++ b/server/routes/query-history.js @@ -5,7 +5,6 @@ const queryHistoryUtil = require('../models/queryHistory.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const urlFilterToNeDbFilter = require('../lib/urlFilterToNeDbFilter'); const sendError = require('../lib/sendError'); -const config = require('../lib/config'); router.get('/api/query-history', mustBeAuthenticated, async function(req, res) { try { @@ -33,7 +32,7 @@ router.get('/api/query-history', mustBeAuthenticated, async function(req, res) { }); queryHistory.incomplete = - dbQueryHistory.length >= config.get('queryHistoryResultMaxRows'); + dbQueryHistory.length >= req.config.get('queryHistoryResultMaxRows'); queryHistory.rows = dbQueryHistory; queryHistory.stopTime = new Date(); queryHistory.queryRunTime = diff --git a/server/routes/query-result.js b/server/routes/query-result.js index 0362befb0..3a17a51ba 100644 --- a/server/routes/query-result.js +++ b/server/routes/query-result.js @@ -7,7 +7,6 @@ const queryHistory = require('../models/queryHistory'); const mustHaveConnectionAccess = require('../middleware/must-have-connection-access.js'); const mustHaveConnectionAccessOrChartLink = require('../middleware/must-have-connection-access-or-chart-link-noauth'); const sendError = require('../lib/sendError'); -const config = require('../lib/config'); // This allows executing a query relying on the saved query text // Instead of relying on an open endpoint that executes arbitrary sql @@ -30,7 +29,7 @@ router.get( }; // IMPORTANT: Send actual error here since it might have info on why the query is bad try { - const queryResult = await getQueryResult(data); + const queryResult = await getQueryResult(req, data); return res.send({ queryResult }); } catch (error) { sendError(res, error); @@ -57,26 +56,26 @@ router.post('/api/query-result', mustHaveConnectionAccess, async function( }; try { - const queryResult = await getQueryResult(data); + const queryResult = await getQueryResult(req, data); return res.send({ queryResult }); } catch (error) { sendError(res, error); } }); -async function getQueryResult(data) { +async function getQueryResult(req, data) { const { connectionId, cacheKey, queryId, queryName, queryText, user } = data; const connection = await connections.findOneById(connectionId); if (!connection) { throw new Error('Please choose a connection'); } - connection.maxRows = Number(config.get('queryResultMaxRows')); + connection.maxRows = Number(req.config.get('queryResultMaxRows')); const queryResult = await runQuery(queryText, connection, user); queryResult.cacheKey = cacheKey; - if (config.get('queryHistoryRetentionTimeInDays') > 0) { + if (req.config.get('queryHistoryRetentionTimeInDays') > 0) { await queryHistory.removeOldEntries(); await queryHistory.save({ userId: user._id, @@ -94,7 +93,7 @@ async function getQueryResult(data) { }); } - if (config.get('allowCsvDownload')) { + if (req.config.get('allowCsvDownload')) { resultCache.saveResultCache(cacheKey, queryName); await resultCache.writeXlsx(cacheKey, queryResult); await resultCache.writeCsv(cacheKey, queryResult); diff --git a/server/routes/saml.js b/server/routes/saml.js index b1e9208ce..c23b60ecf 100644 --- a/server/routes/saml.js +++ b/server/routes/saml.js @@ -1,73 +1,86 @@ const passport = require('passport'); const SamlStrategy = require('passport-saml').Strategy; const router = require('express').Router(); -const config = require('../lib/config'); const logger = require('../lib/logger'); const usersUtil = require('../models/users.js'); -const samlEntryPoint = config.get('samlEntryPoint'); -const samlIssuer = config.get('samlIssuer'); -const samlCallbackUrl = config.get('samlCallbackUrl'); -const samlCert = config.get('samlCert'); -const samlAuthContext = config.get('samlAuthContext'); +/** + * Adds passport SAML strategy and SAML auth routes if SAML is configured + * @param {object} config + */ +function makeSamlAuth(config) { + const samlEntryPoint = config.get('samlEntryPoint'); + const samlIssuer = config.get('samlIssuer'); + const samlCallbackUrl = config.get('samlCallbackUrl'); + const samlCert = config.get('samlCert'); + const samlAuthContext = config.get('samlAuthContext'); -if ( - samlEntryPoint && - samlIssuer && - samlCallbackUrl && - samlCert && - samlAuthContext -) { - logger.info('Enabling SAML authentication strategy.'); + if ( + samlEntryPoint && + samlIssuer && + samlCallbackUrl && + samlCert && + samlAuthContext + ) { + logger.info('Enabling SAML authentication strategy.'); - // Register SAML strategy - passport.use( - new SamlStrategy( - { - path: '/login/callback', - entryPoint: samlEntryPoint, - issuer: samlIssuer, - callbackUrl: samlCallbackUrl, - cert: samlCert, - authnContext: samlAuthContext, - identifierFormat: null - }, - async function(p, done) { - const email = - p[ - 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress' - ]; - const user = await usersUtil.findOneByEmail(email); - logger.info('User logged in via SAML %s', email); - if (!user) { - return done(null, false); + // Register SAML strategy + passport.use( + new SamlStrategy( + { + path: '/login/callback', + entryPoint: samlEntryPoint, + issuer: samlIssuer, + callbackUrl: samlCallbackUrl, + cert: samlCert, + authnContext: samlAuthContext, + identifierFormat: null + }, + async function(p, done) { + const email = + p[ + 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress' + ]; + const user = await usersUtil.findOneByEmail(email); + logger.info('User logged in via SAML %s', email); + if (!user) { + return done(null, false); + } + return done(null, { + id: user._id, + _id: user._id, + role: user.role, + email: user.email + }); } - return done(null, { - id: user._id, - _id: user._id, - role: user.role, - email: user.email - }); + ) + ); + + // Add SAML auth routes + router.post( + '/login/callback', + passport.authenticate('saml', { + failureRedirect: '/', + failureFlash: true + }), + function(req, res) { + res.redirect('/'); } - ) - ); + ); - // Add SAML auth routes - router.post( - '/login/callback', - passport.authenticate('saml', { failureRedirect: '/', failureFlash: true }), - function(req, res) { - res.redirect('/'); - } - ); + router.get( + '/auth/saml', + passport.authenticate('saml', { + failureRedirect: '/', + failureFlash: true + }), + function(req, res) { + res.redirect('/'); + } + ); + } - router.get( - '/auth/saml', - passport.authenticate('saml', { failureRedirect: '/', failureFlash: true }), - function(req, res) { - res.redirect('/'); - } - ); + return router; } -module.exports = router; +module.exports = makeSamlAuth; diff --git a/server/routes/signup-signin-signout.js b/server/routes/signup-signin-signout.js index 5bc8df3bc..9329a2f75 100644 --- a/server/routes/signup-signin-signout.js +++ b/server/routes/signup-signin-signout.js @@ -5,13 +5,12 @@ const router = require('express').Router(); const checkWhitelist = require('../lib/check-whitelist'); const usersUtil = require('../models/users.js'); const sendError = require('../lib/sendError'); -const config = require('../lib/config'); const logger = require('../lib/logger'); const passhash = require('../lib/passhash.js'); async function handleSignup(req, res, next) { try { - const whitelistedDomains = config.get('whitelistedDomains'); + const whitelistedDomains = req.config.get('whitelistedDomains'); if (req.body.password !== req.body.passwordConfirmation) { return sendError(res, null, 'Passwords do not match'); @@ -58,87 +57,95 @@ function sendSuccess(req, res) { res.json({}); } -/* Some routes should only exist if userpath auth is enabled -============================================================================= */ -if (!config.get('disableUserpassAuth')) { - // Register local auth strategy - // TODO: Should all authentication strategies be disabled by default, requiring SQLPad implementer to pick one? - // This might be more secure as it'd prevent SQLPad's from launching with local auth enabled and open admin registration by default - logger.info('Enabling local authentication strategy.'); - passport.use( - new PassportLocalStrategy( - { - usernameField: 'email' - }, - async function passportLocalStrategyHandler(email, password, done) { +/** + * Adds local and basic auth strategy and routes if not disabled + * @param {object} config + */ +function makeLocalAuth(config) { + if (!config.get('disableUserpassAuth')) { + // Register local auth strategy + // TODO: Should all authentication strategies be disabled by default, requiring SQLPad implementer to pick one? + // This might be more secure as it'd prevent SQLPad's from launching with local auth enabled and open admin registration by default + logger.info('Enabling local authentication strategy.'); + passport.use( + new PassportLocalStrategy( + { + usernameField: 'email' + }, + async function passportLocalStrategyHandler(email, password, done) { + try { + const user = await usersUtil.findOneByEmail(email); + if (!user) { + return done(null, false, { message: 'wrong email or password' }); + } + const isMatch = await passhash.comparePassword( + password, + user.passhash + ); + if (isMatch) { + return done(null, { + id: user._id, + _id: user._id, + role: user.role, + email: user.email + }); + } + return done(null, false, { message: 'wrong email or password' }); + } catch (error) { + done(error); + } + } + ) + ); + + // TODO - basic auth should perhaps be something opted into as a separate config + logger.info('Enabling basic authentication strategy.'); + passport.use( + new BasicStrategy(async function(username, password, callback) { try { - const user = await usersUtil.findOneByEmail(email); + const user = await usersUtil.findOneByEmail(username); if (!user) { - return done(null, false, { message: 'wrong email or password' }); + return callback(null, false); } const isMatch = await passhash.comparePassword( password, user.passhash ); - if (isMatch) { - return done(null, { - id: user._id, - _id: user._id, - role: user.role, - email: user.email - }); + if (!isMatch) { + return callback(null, false); } - return done(null, false, { message: 'wrong email or password' }); + return callback(null, user); } catch (error) { - done(error); - } - } - ) - ); - - // TODO - basic auth should perhaps be something opted into as a separate config - logger.info('Enabling basic authentication strategy.'); - passport.use( - new BasicStrategy(async function(username, password, callback) { - try { - const user = await usersUtil.findOneByEmail(username); - if (!user) { - return callback(null, false); + callback(error); } - const isMatch = await passhash.comparePassword(password, user.passhash); - if (!isMatch) { - return callback(null, false); - } - return callback(null, user); - } catch (error) { - callback(error); - } - }) - ); + }) + ); - // Add routes for local auth signup & signin - router.post( - '/api/signup', - handleSignup, - passport.authenticate('local'), - sendSuccess - ); - - router.post('/api/signin', passport.authenticate('local'), sendSuccess); -} + // Add routes for local auth signup & signin + router.post( + '/api/signup', + handleSignup, + passport.authenticate('local'), + sendSuccess + ); -/* These auth routes should always exist regardless of strategy -============================================================================= */ -router.get('/api/signout', function(req, res) { - if (!req.session) { - return res.json({}); + router.post('/api/signin', passport.authenticate('local'), sendSuccess); } - req.session.destroy(function(err) { - if (err) { - logger.error(err); + + // Sign out route should always exist + router.get('/api/signout', function(req, res) { + if (!req.session) { + return res.json({}); } - res.json({}); + req.session.destroy(function(err) { + if (err) { + logger.error(err); + } + res.json({}); + }); }); -}); -module.exports = router; + return router; +} + +module.exports = makeLocalAuth; diff --git a/server/routes/users.js b/server/routes/users.js index d117604b7..7fbd2b8ac 100644 --- a/server/routes/users.js +++ b/server/routes/users.js @@ -1,10 +1,9 @@ const router = require('express').Router(); const usersUtil = require('../models/users.js'); -const email = require('../lib/email'); +const makeEmail = require('../lib/email'); const mustBeAdmin = require('../middleware/must-be-admin.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const sendError = require('../lib/sendError'); -const config = require('../lib/config'); const logger = require('../lib/logger'); router.get('/api/users', mustBeAuthenticated, async function(req, res) { @@ -28,7 +27,9 @@ router.post('/api/users', mustBeAdmin, async function(req, res) { role: req.body.role }); - if (config.smtpConfigured()) { + const email = makeEmail(req.config); + + if (req.config.smtpConfigured()) { email.sendInvite(req.body.email).catch(error => logger.error(error)); } return res.json({ user }); diff --git a/server/server.js b/server/server.js index 1a01825c5..f4296d7fe 100755 --- a/server/server.js +++ b/server/server.js @@ -18,7 +18,7 @@ if (configValidations.errors.length > 0) { process.exit(1); } -const app = require('./app'); +const app = require('./app')(config); const baseUrl = config.get('baseUrl'); const ip = config.get('ip'); diff --git a/server/test/lib/email.js b/server/test/lib/email.js index b82b1871d..504feb091 100644 --- a/server/test/lib/email.js +++ b/server/test/lib/email.js @@ -1,8 +1,10 @@ -const email = require('../../lib/email.js'); +const makeEmail = require('../../lib/email.js'); const config = require('../../lib/config'); describe('lib/email.js', async function() { if (config.smtpConfigured() && process.env.SQLPAD_TEST_EMAIL) { + const email = makeEmail(config); + it('should send invites', function() { return email.sendInvite(process.env.SQLPAD_TEST_EMAIL); }); diff --git a/server/test/utils.js b/server/test/utils.js index ef48c7c9c..b45b3c63c 100644 --- a/server/test/utils.js +++ b/server/test/utils.js @@ -3,7 +3,8 @@ const request = require('supertest'); const usersUtil = require('../models/users'); const consts = require('../lib/consts'); const db = require('../lib/db'); -const app = require('../app'); +const config = require('../lib/config'); +const app = require('../app')(config); const users = { admin: { From 01c82df6be836eddcd261526d2bbb437dbf4cb6e Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Wed, 19 Feb 2020 17:42:35 -0600 Subject: [PATCH 011/658] Refactor: pass nedb into app and models (#540) * Restructure nedb and associated models * Move getConnectionsFromConfig out of connections model * Move cleanup scheduling to nedb init * Move ensureAdmin out into own function --- server/app.js | 8 +- server/lib/connectionsFromConfig.js | 79 +++++++ server/lib/db.js | 186 +++++++++------- server/lib/ensureAdmin.js | 48 ++++ ...-connection-access-or-chart-link-noauth.js | 5 +- .../middleware/must-have-connection-access.js | 5 +- server/middleware/passport.js | 7 +- server/models/connectionAccesses.js | 209 +++++++++--------- server/models/connections.js | 174 +++++---------- server/models/index.js | 19 ++ server/models/queries.js | 101 +++++---- server/models/queryHistory.js | 89 ++++---- server/models/resultCache.js | 119 +++++----- server/models/schemaInfo.js | 89 ++++---- server/models/users.js | 105 ++++----- server/routes/app.js | 7 +- server/routes/connection-accesses.js | 26 ++- server/routes/connections.js | 19 +- server/routes/download-results.js | 17 +- server/routes/forgot-password.js | 7 +- server/routes/oauth.js | 14 +- server/routes/password-reset.js | 7 +- server/routes/queries.js | 19 +- server/routes/query-history.js | 11 +- server/routes/query-result.js | 23 +- server/routes/saml.js | 7 +- server/routes/schema-info.js | 10 +- server/routes/signup-signin-signout.js | 20 +- server/routes/tags.js | 5 +- server/routes/users.js | 18 +- server/server.js | 22 +- server/test/api/password-reset.js | 9 +- server/test/models/connections.js | 22 +- server/test/utils.js | 40 ++-- 34 files changed, 872 insertions(+), 674 deletions(-) create mode 100644 server/lib/connectionsFromConfig.js create mode 100644 server/lib/ensureAdmin.js create mode 100644 server/models/index.js diff --git a/server/app.js b/server/app.js index 1e206c7fd..a78c59b49 100644 --- a/server/app.js +++ b/server/app.js @@ -10,10 +10,13 @@ const logger = require('./lib/logger'); * Create an express app using config * @param {object} config */ -function makeApp(config) { +function makeApp(config, nedb) { if (typeof config.get !== 'function') { throw new Error('config is required to create app'); } + if (!nedb) { + throw new Error('nedb is required to create app'); + } const baseUrl = config.get('baseUrl'); const dbPath = config.get('dbPath'); @@ -57,9 +60,10 @@ function makeApp(config) { app.use(helmet.xssFilter()); app.use(helmet.referrerPolicy({ policy: 'same-origin' })); - // Add config to req.config + // Decorate req with app things app.use(function(req, res, next) { req.config = config; + req.nedb = nedb; next(); }); diff --git a/server/lib/connectionsFromConfig.js b/server/lib/connectionsFromConfig.js new file mode 100644 index 000000000..44b7fdd6e --- /dev/null +++ b/server/lib/connectionsFromConfig.js @@ -0,0 +1,79 @@ +const _ = require('lodash'); +const logger = require('./logger'); +const drivers = require('../drivers'); +const getConfigFromFile = require('./config/fromFile.js'); +const [configFromFile] = getConfigFromFile() || {}; + +/** + * Get connections from config. + * + * For environment variables: + * connection env vars must follow the format: + * SQLPAD_CONNECTIONS____ + * + * can be any value to associate a grouping a fields to a connection instance + * If supplying a connection that was previously defined in the nedb database, + * this would map internally to connection._id object. + * + * should be a field name identified in drivers. + * + * To define connections via envvars, `driver` field should be supplied. + * _id field is not required, as it is defined in second env var fragment. + * + * Example: SQLPAD_CONNECTIONS__ab123__sqlserverEncrypt="" + * + * From file, resulting parsed configuration from file is expected to follow format `connections..` + * { + * connections: { + * ab123: { + * sqlserverEncrypt: true + * } + * } + * } + * + * @param {object} env + * @returns {array} arrayOfConnections + */ +function getConnectionsFromConfig(env = process.env) { + // Create a map of connections from parsing environment variable + const connectionsMapFromEnv = Object.keys(env) + .filter(key => key.startsWith('SQLPAD_CONNECTIONS__')) + .reduce((connectionsMap, envVar) => { + // eslint-disable-next-line no-unused-vars + const [prefix, id, field] = envVar.split('__'); + if (!connectionsMap[id]) { + connectionsMap[id] = {}; + } + connectionsMap[id][field] = env[envVar]; + return connectionsMap; + }, {}); + + // Get copy of connections from config file + const { connections } = _.cloneDeep(configFromFile); + + // connections key from file matches format that is constructed from env + // merge the 2 together then create an array out of them + const connectionsMap = { ...connectionsMapFromEnv, ...connections }; + + const connectionsFromConfig = []; + Object.keys(connectionsMap).forEach(id => { + try { + let connection = connectionsMap[id]; + connection._id = id; + connection = drivers.validateConnection(connection); + connection.editable = false; + connectionsFromConfig.push(connection); + } catch (error) { + logger.error( + error, + 'Environment connection configuration failed for %s', + id + ); + } + }); + return connectionsFromConfig; +} + +module.exports = { + getConnectionsFromConfig +}; diff --git a/server/lib/db.js b/server/lib/db.js index e4f07b983..76984fb1c 100644 --- a/server/lib/db.js +++ b/server/lib/db.js @@ -2,52 +2,82 @@ const path = require('path'); const datastore = require('nedb-promise'); const mkdirp = require('mkdirp'); const logger = require('./logger'); -const config = require('./config'); +const ensureAdmin = require('./ensureAdmin'); const consts = require('./consts'); -const passhash = require('../lib/passhash'); +const getModels = require('../models'); -const admin = config.get('admin'); -const adminPassword = config.get('adminPassword'); -const dbPath = config.get('dbPath'); -const allowConnectionAccessToEveryone = config.get( - 'allowConnectionAccessToEveryone' -); +const TEN_MINUTES = 1000 * 60 * 10; +const FIVE_MINUTES = 1000 * 60 * 5; -mkdirp.sync(path.join(dbPath, '/cache')); +/** + * Whenever possible nedb should be read from the app req object. + * Sometimes this isn't possible or convenient at the moment however. + * For those cases, this module provides access by caching the nedb instance. + * Safety measures have been added to ensure only 1 instance of nedb can be initialized per alias + */ +let instances = {}; -const db = { - users: datastore({ filename: path.join(dbPath, 'users.db') }), - connections: datastore({ - filename: path.join(dbPath, 'connections.db') - }), - connectionAccesses: datastore({ - filename: path.join(dbPath, 'connectionaccesses.db') - }), - queries: datastore({ filename: path.join(dbPath, 'queries.db') }), - queryHistory: datastore({ filename: path.join(dbPath, 'queryhistory.db') }), - cache: datastore({ filename: path.join(dbPath, 'cache.db') }), - instances: [ - 'users', - 'connections', - 'connectionAccesses', - 'queries', - 'queryHistory', - 'cache' - ] -}; +/** + * Get nedb instance for an optional alias. + * Returns promise of nedb instance + * @param {string} [instanceAlias] + */ +function getNedb(instanceAlias = 'default') { + const nedb = instances[instanceAlias]; + if (!nedb) { + throw new Error('nedb instance must be created first'); + } + // nedb will already be a promise -- this just makes it explicit + return Promise.resolve(nedb); +} + +/** + * Initialize nedb for a given config + * @param {object} config + */ +async function initNedb(config) { + const admin = config.get('admin'); + const adminPassword = config.get('adminPassword'); + const dbPath = config.get('dbPath'); + const allowConnectionAccessToEveryone = config.get( + 'allowConnectionAccessToEveryone' + ); + + mkdirp.sync(path.join(dbPath, '/cache')); -// Load dbs, migrate data, and apply indexes -async function init() { + const nedb = { + users: datastore({ filename: path.join(dbPath, 'users.db') }), + connections: datastore({ + filename: path.join(dbPath, 'connections.db') + }), + connectionAccesses: datastore({ + filename: path.join(dbPath, 'connectionaccesses.db') + }), + queries: datastore({ filename: path.join(dbPath, 'queries.db') }), + queryHistory: datastore({ filename: path.join(dbPath, 'queryhistory.db') }), + cache: datastore({ filename: path.join(dbPath, 'cache.db') }), + instances: [ + 'users', + 'connections', + 'connectionAccesses', + 'queries', + 'queryHistory', + 'cache' + ] + }; + + // Load dbs, migrate data, and apply indexes await Promise.all( - db.instances.map(dbname => { + nedb.instances.map(dbname => { logger.info('Loading %s', dbname); - return db[dbname].loadDatabase(); + return nedb[dbname].loadDatabase(); }) ); + // create default connection accesses if (allowConnectionAccessToEveryone) { logger.info('Creating access on every connection to every user...'); - await db.connectionAccesses.update( + await nedb.connectionAccesses.update( { connectionId: consts.EVERY_CONNECTION_ID, userId: consts.EVERYONE_ID @@ -65,60 +95,52 @@ async function init() { } ); } + // Apply indexes - await db.users.ensureIndex({ fieldName: 'email', unique: true }); - await db.cache.ensureIndex({ fieldName: 'cacheKey', unique: true }); - await db.connectionAccesses.ensureIndex({ fieldName: 'connectionId' }); - await db.connectionAccesses.ensureIndex({ fieldName: 'userId' }); - await db.queryHistory.ensureIndex({ fieldName: 'connectionName' }); - await db.queryHistory.ensureIndex({ fieldName: 'userEmail' }); - await db.queryHistory.ensureIndex({ fieldName: 'createdDate' }); - // set autocompaction - const tenMinutes = 1000 * 60 * 10; - db.instances.forEach(dbname => { - db[dbname].nedb.persistence.setAutocompactionInterval(tenMinutes); + await nedb.users.ensureIndex({ fieldName: 'email', unique: true }); + await nedb.cache.ensureIndex({ fieldName: 'cacheKey', unique: true }); + await nedb.connectionAccesses.ensureIndex({ fieldName: 'connectionId' }); + await nedb.connectionAccesses.ensureIndex({ fieldName: 'userId' }); + await nedb.queryHistory.ensureIndex({ fieldName: 'connectionName' }); + await nedb.queryHistory.ensureIndex({ fieldName: 'userEmail' }); + await nedb.queryHistory.ensureIndex({ fieldName: 'createdDate' }); + + // Set autocompaction + nedb.instances.forEach(dbname => { + nedb[dbname].nedb.persistence.setAutocompactionInterval(TEN_MINUTES); }); - return ensureAdmin(); -} -db.loadPromise = init(); + // Schedule cleanups + const models = getModels(nedb); + setInterval(async () => { + await models.resultCache.removeExpired(); + await models.queryHistory.removeOldEntries(); + }, FIVE_MINUTES); -async function ensureAdmin() { - const adminEmail = admin; - if (!adminEmail) { - return; - } + // Ensure admin is set as specified if provided + await ensureAdmin(nedb, admin, adminPassword); - try { - // if an admin was passed in the command line, check to see if a user exists with that email - // if so, set the admin to true - // if not, whitelist the email address. - // Then log that the person should visit the signup url to finish registration. - const user = await db.users.findOne({ email: adminEmail }); - if (user) { - const changes = { role: 'admin' }; - if (adminPassword) { - changes.passhash = await passhash.getPasshash(adminPassword); - } - await db.users.update({ _id: user._id }, { $set: changes }, {}); - logger.info('Admin access granted to %s', adminEmail); - return; - } + return nedb; +} - const newAdmin = { - email: adminEmail, - role: 'admin' - }; - if (adminPassword) { - newAdmin.passhash = await passhash.getPasshash(adminPassword); - } - await db.users.insert(newAdmin); - logger.info('Admin access granted to %s', adminEmail); - logger.info('Please visit signup to complete registration.'); - } catch (error) { - logger.error('Admin access grant failed for %s', adminEmail); - throw error; +/** + * Initializes an nedb instance for a given config. + * Ensures that this only happens once for a given alias. + * If this were called multiple times weird things could happen + * @param {object} config + * @param {string} instanceAlias + */ +function makeNedb(config, instanceAlias = 'default') { + // makeNedb should only be called once for a given alias + if (instances[instanceAlias]) { + throw new Error(`db instance ${instanceAlias} already made`); } + const dbPromise = initNedb(config); + instances[instanceAlias] = dbPromise; + return dbPromise; } -module.exports = db; +module.exports = { + makeNedb, + getNedb +}; diff --git a/server/lib/ensureAdmin.js b/server/lib/ensureAdmin.js new file mode 100644 index 000000000..a386700d7 --- /dev/null +++ b/server/lib/ensureAdmin.js @@ -0,0 +1,48 @@ +const passhash = require('./passhash'); +const logger = require('./logger'); + +/** + * Ensure admin email is a user if provided + * If password is provided, update password + * @param {object} nedb + * @param {string} adminEmail + * @param {string} adminPassword + */ +async function ensureAdmin(nedb, adminEmail, adminPassword) { + if (!adminEmail) { + return; + } + + try { + // if an admin was passed in the command line, check to see if a user exists with that email + // if so, set the admin to true + // if not, whitelist the email address. + // Then log that the person should visit the signup url to finish registration. + const user = await nedb.users.findOne({ email: adminEmail }); + if (user) { + const changes = { role: 'admin' }; + if (adminPassword) { + changes.passhash = await passhash.getPasshash(adminPassword); + } + await nedb.users.update({ _id: user._id }, { $set: changes }, {}); + logger.info('Admin access granted to %s', adminEmail); + return; + } + + const newAdmin = { + email: adminEmail, + role: 'admin' + }; + if (adminPassword) { + newAdmin.passhash = await passhash.getPasshash(adminPassword); + } + await nedb.users.insert(newAdmin); + logger.info('Admin access granted to %s', adminEmail); + logger.info('Please visit signup to complete registration.'); + } catch (error) { + logger.error('Admin access grant failed for %s', adminEmail); + throw error; + } +} + +module.exports = ensureAdmin; diff --git a/server/middleware/must-have-connection-access-or-chart-link-noauth.js b/server/middleware/must-have-connection-access-or-chart-link-noauth.js index b8ce3b58e..853a3a909 100644 --- a/server/middleware/must-have-connection-access-or-chart-link-noauth.js +++ b/server/middleware/must-have-connection-access-or-chart-link-noauth.js @@ -1,18 +1,19 @@ const mustBeAuthenticated = require('./must-be-authenticated'); -const connectionAccessesUtil = require('../models/connectionAccesses.js'); +const getModels = require('../models'); // If admin or has connection access then continue // If no access don't continue but return 200 with an error message module.exports = [ mustBeAuthenticated, async function mustHaveConnectionAccessOrChartLinkNoAuth(req, res, next) { + const models = getModels(req.nedb); if ( req.user.role === 'admin' || !req.config.get('tableChartLinksRequireAuth') ) { return next(); } - const connectionAccess = await connectionAccessesUtil.findOneActiveByConnectionIdAndUserId( + const connectionAccess = await models.connectionAccesses.findOneActiveByConnectionIdAndUserId( req.body.connectionId, req.user.id ); diff --git a/server/middleware/must-have-connection-access.js b/server/middleware/must-have-connection-access.js index 09105c7b1..82459384e 100644 --- a/server/middleware/must-have-connection-access.js +++ b/server/middleware/must-have-connection-access.js @@ -1,16 +1,17 @@ const mustBeAuthenticated = require('./must-be-authenticated'); -const connectionAccessesUtil = require('../models/connectionAccesses.js'); +const getModels = require('../models'); // If admin or has connection access then continue // If no access don't continue but return 200 with an error message module.exports = [ mustBeAuthenticated, async function mustHaveConnectionAccess(req, res, next) { + const models = getModels(req.nedb); if (req.user.role === 'admin') { return next(); } const connectionId = req.params.connectionId || req.body.connectionId; - const connectionAccess = await connectionAccessesUtil.findOneActiveByConnectionIdAndUserId( + const connectionAccess = await models.connectionAccesses.findOneActiveByConnectionIdAndUserId( connectionId, req.user.id ); diff --git a/server/middleware/passport.js b/server/middleware/passport.js index 5e5b617f3..cdbe5dac2 100644 --- a/server/middleware/passport.js +++ b/server/middleware/passport.js @@ -1,5 +1,6 @@ const passport = require('passport'); -const usersUtil = require('../models/users.js'); +const { getNedb } = require('../lib/db'); +const getModels = require('../models'); // For actual passport strategy implementations, refer to related route files: // Local & Basic: routes/signup-signin-signout.js @@ -14,7 +15,9 @@ passport.serializeUser(function(user, done) { passport.deserializeUser(async function(id, done) { try { - const user = await usersUtil.findOneById(id); + const nedb = await getNedb(); + const models = getModels(nedb); + const user = await models.users.findOneById(id); if (user) { return done(null, { id: user._id, diff --git a/server/models/connectionAccesses.js b/server/models/connectionAccesses.js index 60d0f60e1..cead176ae 100644 --- a/server/models/connectionAccesses.js +++ b/server/models/connectionAccesses.js @@ -1,5 +1,4 @@ const Joi = require('@hapi/joi'); -const db = require('../lib/db.js'); const consts = require('../lib/consts'); const schema = Joi.object({ @@ -18,123 +17,127 @@ const schema = Joi.object({ modifiedDate: Joi.date().default(Date.now) }); -async function save(data) { - if (!data.connectionId) { - throw new Error('connectionId required when saving connection access'); - } +function makeConnectionAccesses(nedb) { + async function save(data) { + if (!data.connectionId) { + throw new Error('connectionId required when saving connection access'); + } - if (!data.userId) { - throw new Error('userId required when saving connection access'); - } + if (!data.userId) { + throw new Error('userId required when saving connection access'); + } - if (data.duration > 0) { - data.expiryDate = new Date(new Date().getTime() + data.duration * 1000); - } else { - data.expiryDate = new Date().setFullYear(2099); - } + if (data.duration > 0) { + data.expiryDate = new Date(new Date().getTime() + data.duration * 1000); + } else { + data.expiryDate = new Date().setFullYear(2099); + } + + const joiResult = schema.validate(data); + if (joiResult.error) { + return Promise.reject(joiResult.error); + } - const joiResult = schema.validate(data); - if (joiResult.error) { - return Promise.reject(joiResult.error); + await nedb.connectionAccesses.update( + { + connectionId: data.connectionId, + connectionName: data.connectionName, + userId: data.userId, + userEmail: data.userEmail, + duration: data.duration, + expiryDate: data.expiryDate + }, + joiResult.value, + { + upsert: true + } + ); + return findOneActiveByConnectionIdAndUserId(data.connectionId, data.userId); } - await db.connectionAccesses.update( - { - connectionId: data.connectionId, - connectionName: data.connectionName, - userId: data.userId, - userEmail: data.userEmail, - duration: data.duration, - expiryDate: data.expiryDate - }, - joiResult.value, - { - upsert: true + async function expire(id) { + const connectionAccess = await nedb.connectionAccesses.findOne({ _id: id }); + if (!connectionAccess) { + throw new Error('Connection access not found'); } - ); - return findOneActiveByConnectionIdAndUserId(data.connectionId, data.userId); -} -async function expire(id) { - const connectionAccess = await db.connectionAccesses.findOne({ _id: id }); - if (!connectionAccess) { - throw new Error('Connection access not found'); - } + connectionAccess.expiryDate = new Date(); + connectionAccess.modifiedDate = new Date(); - connectionAccess.expiryDate = new Date(); - connectionAccess.modifiedDate = new Date(); + await nedb.connectionAccesses.update({ _id: id }, connectionAccess); + return findOneById(id); + } - await db.connectionAccesses.update({ _id: id }, connectionAccess); - return findOneById(id); -} + function findOneById(id) { + return nedb.connectionAccesses.findOne({ _id: id }); + } -function findOneById(id) { - return db.connectionAccesses.findOne({ _id: id }); -} + function findOneActiveByConnectionIdAndUserId(connectionId, userId) { + return nedb.connectionAccesses.findOne({ + $and: [ + { + $or: [ + { + connectionId: { $in: [connectionId, consts.EVERY_CONNECTION_ID] }, + userId + }, + { + connectionId, + userId: { $in: [connectionId, consts.EVERYONE_ID] } + }, + { + connectionId: consts.EVERY_CONNECTION_ID, + userId: consts.EVERYONE_ID + } + ], + expiryDate: { $gt: new Date() } + } + ] + }); + } -function findOneActiveByConnectionIdAndUserId(connectionId, userId) { - return db.connectionAccesses.findOne({ - $and: [ - { - $or: [ - { - connectionId: { $in: [connectionId, consts.EVERY_CONNECTION_ID] }, - userId - }, - { - connectionId, - userId: { $in: [connectionId, consts.EVERYONE_ID] } - }, - { - connectionId: consts.EVERY_CONNECTION_ID, - userId: consts.EVERYONE_ID - } - ], - expiryDate: { $gt: new Date() } - } - ] - }); -} + function findAllActiveByConnectionId(connectionId) { + return nedb.connectionAccesses.findOne({ + connectionId: { $in: [connectionId, consts.EVERY_CONNECTION_ID] }, + expiryDate: { $gt: new Date() } + }); + } -function findAllActiveByConnectionId(connectionId) { - return db.connectionAccesses.findOne({ - connectionId: { $in: [connectionId, consts.EVERY_CONNECTION_ID] }, - expiryDate: { $gt: new Date() } - }); -} + function findAllByConnectionId(connectionId) { + return nedb.connectionAccesses.findAll({ + connectionId: { $in: [connectionId, consts.EVERY_CONNECTION_ID] } + }); + } -function findAllByConnectionId(connectionId) { - return db.connectionAccesses.findAll({ - connectionId: { $in: [connectionId, consts.EVERY_CONNECTION_ID] } - }); -} + function findAllActive() { + return nedb.connectionAccesses + .cfind({ expiryDate: { $gt: new Date() } }) + .sort({ expiryDate: -1 }) + .exec(); + } -function findAllActive() { - return db.connectionAccesses - .cfind({ expiryDate: { $gt: new Date() } }) - .sort({ expiryDate: -1 }) - .exec(); -} + function findAll() { + return nedb.connectionAccesses + .cfind({}, {}) + .sort({ expiryDate: -1 }) + .exec(); + } -function findAll() { - return db.connectionAccesses - .cfind({}, {}) - .sort({ expiryDate: -1 }) - .exec(); -} + function removeById(id) { + return nedb.connectionAccesses.remove({ _id: id }); + } -function removeById(id) { - return db.connectionAccesses.remove({ _id: id }); + return { + findOneById, + findOneActiveByConnectionIdAndUserId, + findAllActiveByConnectionId, + findAllByConnectionId, + findAllActive, + findAll, + removeById, + expire, + save + }; } -module.exports = { - findOneById, - findOneActiveByConnectionIdAndUserId, - findAllActiveByConnectionId, - findAllByConnectionId, - findAllActive, - findAll, - removeById, - expire, - save -}; +module.exports = makeConnectionAccesses; diff --git a/server/models/connections.js b/server/models/connections.js index 7ebb90850..e9098e547 100644 --- a/server/models/connections.js +++ b/server/models/connections.js @@ -1,85 +1,12 @@ -const db = require('../lib/db.js'); -const logger = require('../lib/logger'); const _ = require('lodash'); const drivers = require('../drivers'); const makeCipher = require('../lib/makeCipher'); const config = require('../lib/config'); -const getConfigFromFile = require('../lib/config/fromFile.js'); - -const [configFromFile] = getConfigFromFile() || {}; +// TODO: during app init upsert these into db? +const { getConnectionsFromConfig } = require('../lib/connectionsFromConfig'); const { cipher, decipher } = makeCipher(config.get('passphrase')); -/** - * Get connections from config. - * - * For environment variables: - * connection env vars must follow the format: - * SQLPAD_CONNECTIONS____ - * - * can be any value to associate a grouping a fields to a connection instance - * If supplying a connection that was previously defined in the nedb database, - * this would map internally to connection._id object. - * - * should be a field name identified in drivers. - * - * To define connections via envvars, `driver` field should be supplied. - * _id field is not required, as it is defined in second env var fragment. - * - * Example: SQLPAD_CONNECTIONS__ab123__sqlserverEncrypt="" - * - * From file, resulting parsed configuration from file is expected to follow format `connections..` - * { - * connections: { - * ab123: { - * sqlserverEncrypt: true - * } - * } - * } - * - * @param {object} env - * @returns {array} arrayOfConnections - */ -function getConnectionsFromConfig(env = process.env) { - // Create a map of connections from parsing environment variable - const connectionsMapFromEnv = Object.keys(env) - .filter(key => key.startsWith('SQLPAD_CONNECTIONS__')) - .reduce((connectionsMap, envVar) => { - // eslint-disable-next-line no-unused-vars - const [prefix, id, field] = envVar.split('__'); - if (!connectionsMap[id]) { - connectionsMap[id] = {}; - } - connectionsMap[id][field] = env[envVar]; - return connectionsMap; - }, {}); - - // Get copy of connections from config file - const { connections } = _.cloneDeep(configFromFile); - - // connections key from file matches format that is constructed from env - // merge the 2 together then create an array out of them - const connectionsMap = { ...connectionsMapFromEnv, ...connections }; - - const connectionsFromConfig = []; - Object.keys(connectionsMap).forEach(id => { - try { - let connection = connectionsMap[id]; - connection._id = id; - connection = drivers.validateConnection(connection); - connection.editable = false; - connectionsFromConfig.push(connection); - } catch (error) { - logger.error( - error, - 'Environment connection configuration failed for %s', - id - ); - } - }); - return connectionsFromConfig; -} - function decipherConnection(connection) { if (connection.username) { connection.username = decipher(connection.username); @@ -90,64 +17,67 @@ function decipherConnection(connection) { return connection; } -async function findAll() { - let connectionsFromDb = await db.connections.find({}); - connectionsFromDb = connectionsFromDb.map(conn => { - conn.editable = true; - return decipherConnection(conn); - }); +function makeConnections(nedb) { + async function findAll() { + let connectionsFromDb = await nedb.connections.find({}); + connectionsFromDb = connectionsFromDb.map(conn => { + conn.editable = true; + return decipherConnection(conn); + }); - const allConnections = connectionsFromDb.concat(getConnectionsFromConfig()); - return _.sortBy(allConnections, c => c.name.toLowerCase()); -} - -async function findOneById(id) { - const connection = await db.connections.findOne({ _id: id }); - if (connection) { - connection.editable = true; - return decipherConnection(connection); + const allConnections = connectionsFromDb.concat(getConnectionsFromConfig()); + return _.sortBy(allConnections, c => c.name.toLowerCase()); } - // If connection was not found in db try env - const connectionFromEnv = getConnectionsFromConfig().find( - connection => connection._id === id - ); + async function findOneById(id) { + const connection = await nedb.connections.findOne({ _id: id }); + if (connection) { + connection.editable = true; + return decipherConnection(connection); + } - return connectionFromEnv; -} + // If connection was not found in db try env + const connectionFromEnv = getConnectionsFromConfig().find( + connection => connection._id === id + ); -async function removeOneById(id) { - return db.connections.remove({ _id: id }); -} + return connectionFromEnv; + } -async function save(connection) { - if (!connection) { - throw new Error('connections.save() requires a connection'); + async function removeOneById(id) { + return nedb.connections.remove({ _id: id }); } - connection.username = cipher(connection.username || ''); - connection.password = cipher(connection.password || ''); + async function save(connection) { + if (!connection) { + throw new Error('connections.save() requires a connection'); + } - if (!connection.createdDate) { - connection.createdDate = new Date(); - } - connection.modifiedDate = new Date(); + connection.username = cipher(connection.username || ''); + connection.password = cipher(connection.password || ''); - connection = drivers.validateConnection(connection); - const { _id } = connection; + if (!connection.createdDate) { + connection.createdDate = new Date(); + } + connection.modifiedDate = new Date(); + + connection = drivers.validateConnection(connection); + const { _id } = connection; - if (_id) { - await db.connections.update({ _id }, connection, {}); - return findOneById(_id); + if (_id) { + await nedb.connections.update({ _id }, connection, {}); + return findOneById(_id); + } + const newDoc = await nedb.connections.insert(connection); + return findOneById(newDoc._id); } - const newDoc = await db.connections.insert(connection); - return findOneById(newDoc._id); + + return { + findAll, + findOneById, + removeOneById, + save + }; } -module.exports = { - findAll, - findOneById, - removeOneById, - save, - getConnectionsFromConfig -}; +module.exports = makeConnections; diff --git a/server/models/index.js b/server/models/index.js new file mode 100644 index 000000000..84f66b8b9 --- /dev/null +++ b/server/models/index.js @@ -0,0 +1,19 @@ +const makeUsers = require('./users'); +const makeSchemaInfo = require('./schemaInfo'); +const makeResultCache = require('./resultCache'); +const makeQueryHistory = require('./queryHistory'); +const makeQueries = require('./queries'); +const makeConnections = require('./connections'); +const makeConnectionAccesses = require('./connectionAccesses'); + +module.exports = function(nedb) { + return { + users: makeUsers(nedb), + schemaInfo: makeSchemaInfo(nedb), + resultCache: makeResultCache(nedb), + queryHistory: makeQueryHistory(nedb), + queries: makeQueries(nedb), + connections: makeConnections(nedb), + connectionAccesses: makeConnectionAccesses(nedb) + }; +}; diff --git a/server/models/queries.js b/server/models/queries.js index e70f6be9e..7de003212 100644 --- a/server/models/queries.js +++ b/server/models/queries.js @@ -1,4 +1,3 @@ -const db = require('../lib/db.js'); const Joi = require('@hapi/joi'); /* @@ -44,60 +43,64 @@ const schema = Joi.object({ lastAccessDate: Joi.date().default(Date.now) }); -function findOneById(id) { - return db.queries.findOne({ _id: id }); -} +function makeQueries(nedb) { + function findOneById(id) { + return nedb.queries.findOne({ _id: id }); + } -function findAll() { - return db.queries.find({}); -} + function findAll() { + return nedb.queries.find({}); + } -function findByFilter(filter) { - return db.queries.find(filter); -} + function findByFilter(filter) { + return nedb.queries.find(filter); + } -function removeById(id) { - return db.queries.remove({ _id: id }); -} + function removeById(id) { + return nedb.queries.remove({ _id: id }); + } -/** - * Save query object - * returns saved query object - * @param {object} query - */ -async function save(query) { - query.modifiedDate = new Date(); - query.lastAccessDate = new Date(); + /** + * Save query object + * returns saved query object + * @param {object} query + */ + async function save(query) { + query.modifiedDate = new Date(); + query.lastAccessDate = new Date(); - // clean tags if present - // sqlpad v1 saved a lot of bad inputs - if (Array.isArray(query.tags)) { - query.tags = query.tags - .filter(tag => { - return typeof tag === 'string' && tag.trim() !== ''; - }) - .map(tag => { - return tag.trim(); + // clean tags if present + // sqlpad v1 saved a lot of bad inputs + if (Array.isArray(query.tags)) { + query.tags = query.tags + .filter(tag => { + return typeof tag === 'string' && tag.trim() !== ''; + }) + .map(tag => { + return tag.trim(); + }); + } + const joiResult = schema.validate(query); + if (joiResult.error) { + return Promise.reject(joiResult.error); + } + if (query._id) { + await nedb.queries.update({ _id: query._id }, joiResult.value, { + upsert: true }); + return findOneById(query._id); + } + const newQuery = await nedb.queries.insert(joiResult.value); + return newQuery; } - const joiResult = schema.validate(query); - if (joiResult.error) { - return Promise.reject(joiResult.error); - } - if (query._id) { - await db.queries.update({ _id: query._id }, joiResult.value, { - upsert: true - }); - return findOneById(query._id); - } - const newQuery = await db.queries.insert(joiResult.value); - return newQuery; + + return { + findOneById, + findAll, + findByFilter, + removeById, + save + }; } -module.exports = { - findOneById, - findAll, - findByFilter, - removeById, - save -}; +module.exports = makeQueries; diff --git a/server/models/queryHistory.js b/server/models/queryHistory.js index 77177deca..744a04717 100644 --- a/server/models/queryHistory.js +++ b/server/models/queryHistory.js @@ -1,4 +1,3 @@ -const db = require('../lib/db.js'); const Joi = require('@hapi/joi'); const config = require('../lib/config'); @@ -19,52 +18,56 @@ const schema = Joi.object({ createdDate: Joi.date().default(new Date()) }); -function findOneById(id) { - return db.queryHistory.findOne({ _id: id }); -} +function makeQueryHistory(nedb) { + function findOneById(id) { + return nedb.queryHistory.findOne({ _id: id }); + } -async function findAll() { - return db.queryHistory - .cfind({}, {}) - .sort({ startTime: -1 }) - .exec(); -} + async function findAll() { + return nedb.queryHistory + .cfind({}, {}) + .sort({ startTime: -1 }) + .exec(); + } -function findByFilter(filter) { - return db.queryHistory - .cfind(filter || {}, {}) - .sort({ startTime: -1 }) - .limit(config.get('queryHistoryResultMaxRows')) - .exec(); -} + function findByFilter(filter) { + return nedb.queryHistory + .cfind(filter || {}, {}) + .sort({ startTime: -1 }) + .limit(config.get('queryHistoryResultMaxRows')) + .exec(); + } -async function removeOldEntries() { - const days = config.get('queryHistoryRetentionTimeInDays') * 86400 * 1000; - const retentionPeriodStartTime = new Date(new Date().getTime() - days); + async function removeOldEntries() { + const days = config.get('queryHistoryRetentionTimeInDays') * 86400 * 1000; + const retentionPeriodStartTime = new Date(new Date().getTime() - days); - // Compaction function called separately in every ten minutes - return db.queryHistory.remove( - { createdDate: { $lt: retentionPeriodStartTime } }, - { multi: true } - ); -} -/** - * Save queryHistory object - * returns saved queryHistory object - * @param {object} queryHistory - */ -async function save(data) { - const joiResult = schema.validate(data); - if (joiResult.error) { - return Promise.reject(joiResult.error); + return nedb.queryHistory.remove( + { createdDate: { $lt: retentionPeriodStartTime } }, + { multi: true } + ); } - return db.queryHistory.insert(joiResult.value); + + /** + * Save queryHistory object + * returns saved queryHistory object + * @param {object} queryHistory + */ + async function save(data) { + const joiResult = schema.validate(data); + if (joiResult.error) { + return Promise.reject(joiResult.error); + } + return nedb.queryHistory.insert(joiResult.value); + } + + return { + findOneById, + findAll, + findByFilter, + removeOldEntries, + save + }; } -module.exports = { - findOneById, - findAll, - findByFilter, - removeOldEntries, - save -}; +module.exports = makeQueryHistory; diff --git a/server/models/resultCache.js b/server/models/resultCache.js index c8a395eb4..195303a6e 100644 --- a/server/models/resultCache.js +++ b/server/models/resultCache.js @@ -2,7 +2,6 @@ const fs = require('fs'); const path = require('path'); const moment = require('moment'); const sanitize = require('sanitize-filename'); -const db = require('../lib/db.js'); const logger = require('../lib/logger'); const xlsx = require('node-xlsx'); const { parse } = require('json2csv'); @@ -21,32 +20,74 @@ function jsonFilePath(cacheKey) { return path.join(dbPath, '/cache/', cacheKey + '.json'); } -async function findOneByCacheKey(cacheKey) { - return db.cache.findOne({ cacheKey }); -} - -async function saveResultCache(cacheKey, queryName) { - if (!cacheKey) { - throw new Error('cacheKey required'); +function makeResultCache(nedb) { + async function findOneByCacheKey(cacheKey) { + return nedb.cache.findOne({ cacheKey }); } - const EIGHT_HOURS = 1000 * 60 * 60 * 8; - const expiration = new Date(Date.now() + EIGHT_HOURS); - const modifiedDate = new Date(); - const savedQueryName = sanitize( - (queryName || 'SQLPad Query Results') + ' ' + moment().format('YYYY-MM-DD') - ); + async function saveResultCache(cacheKey, queryName) { + if (!cacheKey) { + throw new Error('cacheKey required'); + } + const EIGHT_HOURS = 1000 * 60 * 60 * 8; + const expiration = new Date(Date.now() + EIGHT_HOURS); + const modifiedDate = new Date(); + + const savedQueryName = sanitize( + (queryName || 'SQLPad Query Results') + + ' ' + + moment().format('YYYY-MM-DD') + ); + + const doc = { + cacheKey, + expiration, + queryName: savedQueryName, + modifiedDate + }; + + const existing = await findOneByCacheKey(cacheKey); + if (!existing) { + doc.createdDate = new Date(); + } - const doc = { cacheKey, expiration, queryName: savedQueryName, modifiedDate }; + return nedb.cache.update({ cacheKey }, doc, { + upsert: true + }); + } - const existing = await findOneByCacheKey(cacheKey); - if (!existing) { - doc.createdDate = new Date(); + async function removeExpired() { + try { + const docs = await nedb.cache.find({ expiration: { $lt: new Date() } }); + for (const doc of docs) { + const filepaths = [ + xlsxFilePath(doc.cacheKey), + csvFilePath(doc.cacheKey) + ]; + filepaths.forEach(fp => { + if (fs.existsSync(fp)) { + fs.unlinkSync(fp); + } + }); + // eslint-disable-next-line no-await-in-loop + await nedb.cache.remove({ _id: doc._id }, {}); + } + } catch (error) { + logger.error(error); + } } - return db.cache.update({ cacheKey }, doc, { - upsert: true - }); + return { + csvFilePath, + findOneByCacheKey, + jsonFilePath, + removeExpired, + saveResultCache, + writeCsv, + writeJson, + writeXlsx, + xlsxFilePath + }; } function writeXlsx(cacheKey, queryResult) { @@ -119,38 +160,4 @@ function writeJson(cacheKey, queryResult) { }); } -/* Result cache maintenance -============================================================================== */ - -async function removeExpired() { - try { - const docs = await db.cache.find({ expiration: { $lt: new Date() } }); - for (const doc of docs) { - const filepaths = [xlsxFilePath(doc.cacheKey), csvFilePath(doc.cacheKey)]; - filepaths.forEach(fp => { - if (fs.existsSync(fp)) { - fs.unlinkSync(fp); - } - }); - // eslint-disable-next-line no-await-in-loop - await db.cache.remove({ _id: doc._id }, {}); - } - } catch (error) { - logger.error(error); - } -} - -// Every five minutes check and expire cache -const FIVE_MINUTES = 1000 * 60 * 5; -setInterval(removeExpired, FIVE_MINUTES); - -module.exports = { - csvFilePath, - findOneByCacheKey, - jsonFilePath, - saveResultCache, - writeCsv, - writeJson, - writeXlsx, - xlsxFilePath -}; +module.exports = makeResultCache; diff --git a/server/models/schemaInfo.js b/server/models/schemaInfo.js index d85fb910d..1ed675481 100644 --- a/server/models/schemaInfo.js +++ b/server/models/schemaInfo.js @@ -1,55 +1,56 @@ -const db = require('../lib/db.js'); - function getCacheKey(connectionId) { return 'schemaCache:' + connectionId; } -/** - * Get schemaInfo for connection id - * @param {string} connectionId - */ -async function getSchemaInfo(connectionId) { - const cacheKey = getCacheKey(connectionId); - const doc = await db.cache.findOne({ cacheKey }); +function makeSchemaInfo(nedb) { + /** + * Get schemaInfo for connection id + * @param {string} connectionId + */ + async function getSchemaInfo(connectionId) { + const cacheKey = getCacheKey(connectionId); + const doc = await nedb.cache.findOne({ cacheKey }); - if (!doc) { - return; - } + if (!doc) { + return; + } - let schemaInfo; - try { - schemaInfo = - typeof doc.schema === 'string' ? JSON.parse(doc.schema) : doc.schema; - } catch (error) { - // do nothing. valid schema will be updated - } + let schemaInfo; + try { + schemaInfo = + typeof doc.schema === 'string' ? JSON.parse(doc.schema) : doc.schema; + } catch (error) { + // do nothing. valid schema will be updated + } - return schemaInfo; -} + return schemaInfo; + } -/** - * Save schemaInfo to cache db object - * Schema needs to be stringified as JSON - * Column names could have dots in name (incompatible with nedb) - * @param {string} connectionId - * @param {object} schemaInfo - */ -async function saveSchemaInfo(connectionId, schemaInfo) { - const cacheKey = getCacheKey(connectionId); - if (schemaInfo && Object.keys(schemaInfo).length) { - const schema = JSON.stringify(schemaInfo); - const doc = { - cacheKey, - schema, - modifiedDate: new Date() - }; - return db.cache.update({ cacheKey }, doc, { - upsert: true - }); + /** + * Save schemaInfo to cache db object + * Schema needs to be stringified as JSON + * Column names could have dots in name (incompatible with nedb) + * @param {string} connectionId + * @param {object} schemaInfo + */ + async function saveSchemaInfo(connectionId, schemaInfo) { + const cacheKey = getCacheKey(connectionId); + if (schemaInfo && Object.keys(schemaInfo).length) { + const schema = JSON.stringify(schemaInfo); + const doc = { + cacheKey, + schema, + modifiedDate: new Date() + }; + return nedb.cache.update({ cacheKey }, doc, { + upsert: true + }); + } } + return { + getSchemaInfo, + saveSchemaInfo + }; } -module.exports = { - getSchemaInfo, - saveSchemaInfo -}; +module.exports = makeSchemaInfo; diff --git a/server/models/users.js b/server/models/users.js index c444cde1b..ab859bd76 100644 --- a/server/models/users.js +++ b/server/models/users.js @@ -1,5 +1,4 @@ const Joi = require('@hapi/joi'); -const db = require('../lib/db.js'); const passhash = require('../lib/passhash.js'); const schema = Joi.object({ @@ -21,66 +20,70 @@ const schema = Joi.object({ signupDate: Joi.date().optional() }); -async function save(data) { - if (!data.email) { - throw new Error('email required when saving user'); - } +function makeUsers(nedb) { + async function save(data) { + if (!data.email) { + throw new Error('email required when saving user'); + } - data.modifiedDate = new Date(); + data.modifiedDate = new Date(); - if (data.password) { - data.passhash = await passhash.getPasshash(data.password); - } + if (data.password) { + data.passhash = await passhash.getPasshash(data.password); + } - const joiResult = schema.validate(data); - if (joiResult.error) { - return Promise.reject(joiResult.error); + const joiResult = schema.validate(data); + if (joiResult.error) { + return Promise.reject(joiResult.error); + } + + await nedb.users.update({ email: data.email }, joiResult.value, { + upsert: true + }); + return findOneByEmail(data.email); } - await db.users.update({ email: data.email }, joiResult.value, { - upsert: true - }); - return findOneByEmail(data.email); -} + function findOneByEmail(email) { + return nedb.users.findOne({ email: { $regex: new RegExp(email, 'i') } }); + } -function findOneByEmail(email) { - return db.users.findOne({ email: { $regex: new RegExp(email, 'i') } }); -} + function findOneById(id) { + return nedb.users.findOne({ _id: id }); + } -function findOneById(id) { - return db.users.findOne({ _id: id }); -} + function findOneByPasswordResetId(passwordResetId) { + return nedb.users.findOne({ passwordResetId }); + } -function findOneByPasswordResetId(passwordResetId) { - return db.users.findOne({ passwordResetId }); -} + function findAll() { + return nedb.users + .cfind({}, { password: 0, passhash: 0 }) + .sort({ email: 1 }) + .exec(); + } -function findAll() { - return db.users - .cfind({}, { password: 0, passhash: 0 }) - .sort({ email: 1 }) - .exec(); -} + /** + * Returns boolean regarding whether admin registration should be open or not + * @returns {Promise} administrationOpen + */ + async function adminRegistrationOpen() { + const doc = await nedb.users.findOne({ role: 'admin' }); + return !doc; + } -/** - * Returns boolean regarding whether admin registration should be open or not - * @returns {Promise} administrationOpen - */ -async function adminRegistrationOpen() { - const doc = await db.users.findOne({ role: 'admin' }); - return !doc; -} + function removeById(id) { + return nedb.users.remove({ _id: id }); + } -function removeById(id) { - return db.users.remove({ _id: id }); + return { + findOneByEmail, + findOneById, + findOneByPasswordResetId, + findAll, + adminRegistrationOpen, + removeById, + save + }; } -module.exports = { - findOneByEmail, - findOneById, - findOneByPasswordResetId, - findAll, - adminRegistrationOpen, - removeById, - save -}; +module.exports = makeUsers; diff --git a/server/routes/app.js b/server/routes/app.js index a63a4e9e5..fef8958e7 100644 --- a/server/routes/app.js +++ b/server/routes/app.js @@ -1,15 +1,16 @@ const router = require('express').Router(); const packageJson = require('../package.json'); -const usersUtil = require('../models/users.js'); +const getModels = require('../models'); const sendError = require('../lib/sendError'); // NOTE: this route needs a wildcard because it is fetched as a relative url // from the front-end. The static SPA does not know if sqlpad is mounted at // the root of a domain or if there is a base-url provided in the config router.get('*/api/app', async (req, res) => { - const { config } = req; + const { config, nedb } = req; try { - const adminRegistrationOpen = await usersUtil.adminRegistrationOpen(); + const models = getModels(nedb); + const adminRegistrationOpen = await models.users.adminRegistrationOpen(); const currentUser = req.isAuthenticated() && req.user ? { diff --git a/server/routes/connection-accesses.js b/server/routes/connection-accesses.js index 1053deea6..d8324af4c 100644 --- a/server/routes/connection-accesses.js +++ b/server/routes/connection-accesses.js @@ -1,8 +1,6 @@ const router = require('express').Router(); -const connectionAccessesUtil = require('../models/connectionAccesses.js'); const consts = require('../lib/consts'); -const usersUtil = require('../models/users.js'); -const connectionUtil = require('../models/connections.js'); +const getModels = require('../models'); const mustBeAdmin = require('../middleware/must-be-admin.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const sendError = require('../lib/sendError'); @@ -12,13 +10,14 @@ router.get('/api/connection-accesses', mustBeAuthenticated, async function( res ) { try { - const { query } = req; + const { query, nedb } = req; + const models = getModels(nedb); const { includeInactives } = query; let connectionAccesses; if (includeInactives) { - connectionAccesses = await connectionAccessesUtil.findAll(); + connectionAccesses = await models.connectionAccesses.findAll(); } else { - connectionAccesses = await connectionAccessesUtil.findAllActive(); + connectionAccesses = await models.connectionAccesses.findAllActive(); } return res.json({ connectionAccesses }); } catch (error) { @@ -31,7 +30,8 @@ router.get('/api/connection-accesses/:_id', mustBeAuthenticated, async function( res ) { try { - const connectionAccess = await connectionAccessesUtil.findOneById( + const models = getModels(req.nedb); + const connectionAccess = await models.connectionAccesses.findOneById( req.params._id ); if (!connectionAccess) { @@ -45,6 +45,7 @@ router.get('/api/connection-accesses/:_id', mustBeAuthenticated, async function( // crete active connection access router.post('/api/connection-accesses', mustBeAdmin, async function(req, res) { + const models = getModels(req.nedb); try { let user = { id: consts.EVERYONE_ID, @@ -56,7 +57,7 @@ router.post('/api/connection-accesses', mustBeAdmin, async function(req, res) { }; if (req.body.userId !== consts.EVERYONE_ID) { - user = await usersUtil.findOneById(req.body.userId); + user = await models.users.findOneById(req.body.userId); if (!user) { return sendError(res, null, 'User not exists'); } @@ -69,19 +70,19 @@ router.post('/api/connection-accesses', mustBeAdmin, async function(req, res) { } } if (req.body.connectionId !== consts.EVERY_CONNECTION_ID) { - connection = await connectionUtil.findOneById(req.body.connectionId); + connection = await models.connections.findOneById(req.body.connectionId); if (!connection) { return sendError(res, null, 'Connection not exists'); } } - let activeAccess = await connectionAccessesUtil.findOneActiveByConnectionIdAndUserId( + let activeAccess = await models.connectionAccesses.findOneActiveByConnectionIdAndUserId( req.body.connectionId, req.body.userId ); if (activeAccess) { return sendError(res, null, 'User has active access to connection'); } - let connectionAccess = await connectionAccessesUtil.save({ + let connectionAccess = await models.connectionAccesses.save({ connectionId: req.body.connectionId, connectionName: connection.name, userId: req.body.userId, @@ -102,8 +103,9 @@ router.put('/api/connection-accesses/:_id/expire', mustBeAdmin, async function( req, res ) { + const models = getModels(req.nedb); try { - const connectionAccess = await connectionAccessesUtil.expire( + const connectionAccess = await models.connectionAccesses.expire( req.params._id ); return res.json({ connectionAccess }); diff --git a/server/routes/connections.js b/server/routes/connections.js index 842a760b3..924def517 100644 --- a/server/routes/connections.js +++ b/server/routes/connections.js @@ -1,5 +1,5 @@ const router = require('express').Router(); -const connections = require('../models/connections.js'); +const getModels = require('../models'); const mustBeAdmin = require('../middleware/must-be-admin.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const sendError = require('../lib/sendError'); @@ -11,7 +11,8 @@ function removePassword(connection) { router.get('/api/connections', mustBeAuthenticated, async function(req, res) { try { - const docs = await connections.findAll(); + const models = getModels(req.nedb); + const docs = await models.connections.findAll(); return res.json({ connections: docs.map(removePassword) }); @@ -25,7 +26,8 @@ router.get('/api/connections/:_id', mustBeAuthenticated, async function( res ) { try { - const connection = await connections.findOneById(req.params._id); + const models = getModels(req.nedb); + const connection = await models.connections.findOneById(req.params._id); if (!connection) { return sendError(res, null, 'Connection not found'); } @@ -39,7 +41,8 @@ router.get('/api/connections/:_id', mustBeAuthenticated, async function( router.post('/api/connections', mustBeAdmin, async function(req, res) { try { - const newConnection = await connections.save(req.body); + const models = getModels(req.nedb); + const newConnection = await models.connections.save(req.body); return res.json({ connection: removePassword(newConnection) }); @@ -50,12 +53,13 @@ router.post('/api/connections', mustBeAdmin, async function(req, res) { router.put('/api/connections/:_id', mustBeAdmin, async function(req, res) { try { - let connection = await connections.findOneById(req.params._id); + const models = getModels(req.nedb); + let connection = await models.connections.findOneById(req.params._id); if (!connection) { return sendError(res, null, 'Connection not found'); } Object.assign(connection, req.body); - connection = await connections.save(connection); + connection = await models.connections.save(connection); return res.json({ connection: removePassword(connection) }); @@ -66,7 +70,8 @@ router.put('/api/connections/:_id', mustBeAdmin, async function(req, res) { router.delete('/api/connections/:_id', mustBeAdmin, async function(req, res) { try { - await connections.removeOneById(req.params._id); + const models = getModels(req.nedb); + await models.connections.removeOneById(req.params._id); return res.json({}); } catch (error) { sendError(res, error, 'Problem deleting connection'); diff --git a/server/routes/download-results.js b/server/routes/download-results.js index 30c8dc7df..e12d4afe4 100644 --- a/server/routes/download-results.js +++ b/server/routes/download-results.js @@ -1,13 +1,14 @@ const fs = require('fs'); const router = require('express').Router(); -const resultCache = require('../models/resultCache.js'); +const getModels = require('../models'); const logger = require('../lib/logger'); router.get('/download-results/:cacheKey.csv', async function(req, res, next) { const { cacheKey } = req.params; + const models = getModels(req.nedb); try { if (req.config.get('allowCsvDownload')) { - const cache = await resultCache.findOneByCacheKey(cacheKey); + const cache = await models.resultCache.findOneByCacheKey(cacheKey); if (!cache) { return next(new Error('Result cache not found')); } @@ -17,7 +18,7 @@ router.get('/download-results/:cacheKey.csv', async function(req, res, next) { 'attachment; filename="' + encodeURIComponent(filename) + '"' ); res.setHeader('Content-Type', 'text/csv'); - fs.createReadStream(resultCache.csvFilePath(cacheKey)).pipe(res); + fs.createReadStream(models.resultCache.csvFilePath(cacheKey)).pipe(res); } else { return next(new Error('CSV download disabled')); } @@ -30,9 +31,10 @@ router.get('/download-results/:cacheKey.csv', async function(req, res, next) { router.get('/download-results/:cacheKey.xlsx', async function(req, res, next) { const { cacheKey } = req.params; + const models = getModels(req.nedb); try { if (req.config.get('allowCsvDownload')) { - const cache = await resultCache.findOneByCacheKey(cacheKey); + const cache = await models.resultCache.findOneByCacheKey(cacheKey); if (!cache) { return next(new Error('Result cache not found')); } @@ -45,7 +47,7 @@ router.get('/download-results/:cacheKey.xlsx', async function(req, res, next) { 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ); - fs.createReadStream(resultCache.xlsxFilePath(cacheKey)).pipe(res); + fs.createReadStream(models.resultCache.xlsxFilePath(cacheKey)).pipe(res); } else { return next(new Error('XLSX download disabled')); } @@ -58,9 +60,10 @@ router.get('/download-results/:cacheKey.xlsx', async function(req, res, next) { router.get('/download-results/:cacheKey.json', async function(req, res, next) { const { cacheKey } = req.params; + const models = getModels(req.nedb); try { if (req.config.get('allowCsvDownload')) { - const cache = await resultCache.findOneByCacheKey(cacheKey); + const cache = await models.resultCache.findOneByCacheKey(cacheKey); if (!cache) { return next(new Error('Result cache not found')); } @@ -70,7 +73,7 @@ router.get('/download-results/:cacheKey.json', async function(req, res, next) { 'attachment; filename="' + encodeURIComponent(filename) + '"' ); res.setHeader('Content-Type', 'application/json'); - fs.createReadStream(resultCache.jsonFilePath(cacheKey)).pipe(res); + fs.createReadStream(models.resultCache.jsonFilePath(cacheKey)).pipe(res); } else { return next(new Error('JSON download disabled')); } diff --git a/server/routes/forgot-password.js b/server/routes/forgot-password.js index 26d34513f..584b0ce30 100644 --- a/server/routes/forgot-password.js +++ b/server/routes/forgot-password.js @@ -1,11 +1,12 @@ const router = require('express').Router(); const uuid = require('uuid'); -const usersUtil = require('../models/users.js'); +const getModels = require('../models'); const makeEmail = require('../lib/email'); const sendError = require('../lib/sendError'); const logger = require('../lib/logger'); router.post('/api/forgot-password', async function(req, res) { + const models = getModels(req.nedb); if (!req.body.email) { return sendError(res, null, 'Email address must be provided'); } @@ -16,7 +17,7 @@ router.post('/api/forgot-password', async function(req, res) { const email = makeEmail(req.config); try { - const user = await usersUtil.findOneByEmail(req.body.email); + const user = await models.users.findOneByEmail(req.body.email); // If user not found send success regardless // This is not a user-validation service @@ -26,7 +27,7 @@ router.post('/api/forgot-password', async function(req, res) { user.passwordResetId = uuid.v4(); - await usersUtil.save(user); + await models.users.save(user); // Send email, but do not block response const resetPath = `/password-reset/${user.passwordResetId}`; diff --git a/server/routes/oauth.js b/server/routes/oauth.js index 6d194fa6c..69d15f5ae 100644 --- a/server/routes/oauth.js +++ b/server/routes/oauth.js @@ -3,7 +3,8 @@ const PassportGoogleStrategy = require('passport-google-oauth20').Strategy; const router = require('express').Router(); const logger = require('../lib/logger'); const checkWhitelist = require('../lib/check-whitelist.js'); -const usersUtil = require('../models/users.js'); +const { getNedb } = require('../lib/db'); +const getModels = require('../models'); /** * Adds Google auth strategy and adds Google auth routes if Google auth is configured @@ -29,21 +30,24 @@ function makeGoogleAuth(config) { }); } + const nedb = await getNedb(); + const models = getModels(nedb); + try { let [openAdminRegistration, user] = await Promise.all([ - usersUtil.adminRegistrationOpen(), - usersUtil.findOneByEmail(email) + models.users.adminRegistrationOpen(), + models.users.findOneByEmail(email) ]); if (user) { user.signupDate = new Date(); - const newUser = await usersUtil.save(user); + const newUser = await models.users.save(user); newUser.id = newUser._id; return done(null, newUser); } const whitelistedDomains = config.get('whitelistedDomains'); if (openAdminRegistration || checkWhitelist(whitelistedDomains, email)) { - const newUser = await usersUtil.save({ + const newUser = await models.users.save({ email, role: openAdminRegistration ? 'admin' : 'editor', signupDate: new Date() diff --git a/server/routes/password-reset.js b/server/routes/password-reset.js index 38360a31a..33273728f 100644 --- a/server/routes/password-reset.js +++ b/server/routes/password-reset.js @@ -1,11 +1,12 @@ const router = require('express').Router(); -const usersUtil = require('../models/users.js'); +const getModels = require('../models'); const sendError = require('../lib/sendError'); // This route used to set new password given a passwordResetId router.post('/api/password-reset/:passwordResetId', async function(req, res) { try { - const user = await usersUtil.findOneByPasswordResetId( + const models = getModels(req.nedb); + const user = await models.users.findOneByPasswordResetId( req.params.passwordResetId ); @@ -20,7 +21,7 @@ router.post('/api/password-reset/:passwordResetId', async function(req, res) { } user.password = req.body.password; user.passwordResetId = ''; - await usersUtil.save(user); + await models.users.save(user); return res.json({}); } catch (error) { sendError(res, error, 'Problem querying user database'); diff --git a/server/routes/queries.js b/server/routes/queries.js index e2af1cbab..0f6cdab2c 100644 --- a/server/routes/queries.js +++ b/server/routes/queries.js @@ -1,5 +1,5 @@ const router = require('express').Router(); -const queriesUtil = require('../models/queries.js'); +const getModels = require('../models'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const mustBeAuthenticatedOrChartLink = require('../middleware/must-be-authenticated-or-chart-link-noauth.js'); const sendError = require('../lib/sendError'); @@ -27,7 +27,8 @@ router.delete('/api/queries/:_id', mustBeAuthenticated, async function( res ) { try { - await queriesUtil.removeById(req.params._id); + const models = getModels(req.nedb); + await models.queries.removeById(req.params._id); return res.json({}); } catch (error) { sendError(res, error, 'Problem deleting query'); @@ -36,7 +37,8 @@ router.delete('/api/queries/:_id', mustBeAuthenticated, async function( router.get('/api/queries', mustBeAuthenticated, async function(req, res) { try { - const queries = await queriesUtil.findAll(); + const models = getModels(req.nedb); + const queries = await models.queries.findAll(); return res.json({ queries }); } catch (error) { sendError(res, error, 'Problem querying query database'); @@ -48,7 +50,8 @@ router.get('/api/queries/:_id', mustBeAuthenticatedOrChartLink, async function( res ) { try { - const query = await queriesUtil.findOneById(req.params._id); + const models = getModels(req.nedb); + const query = await models.queries.findOneById(req.params._id); if (!query) { return res.json({ query: {} @@ -75,7 +78,8 @@ router.post('/api/queries', mustBeAuthenticated, async function(req, res) { }; try { - const newQuery = await queriesUtil.save(query); + const models = getModels(req.nedb); + const newQuery = await models.queries.save(query); // This is async, but save operation doesn't care about when/if finished pushQueryToSlack(req.config, newQuery); return res.json({ @@ -88,7 +92,8 @@ router.post('/api/queries', mustBeAuthenticated, async function(req, res) { router.put('/api/queries/:_id', mustBeAuthenticated, async function(req, res) { try { - const query = await queriesUtil.findOneById(req.params._id); + const models = getModels(req.nedb); + const query = await models.queries.findOneById(req.params._id); if (!query) { return sendError(res, null, 'Query not found'); } @@ -111,7 +116,7 @@ router.put('/api/queries/:_id', mustBeAuthenticated, async function(req, res) { modifiedBy: email }); - const newQuery = await queriesUtil.save(query); + const newQuery = await models.queries.save(query); return res.json({ query: newQuery }); } catch (error) { sendError(res, error, 'Problem saving query'); diff --git a/server/routes/query-history.js b/server/routes/query-history.js index 7c3f5dd29..16f12bd21 100644 --- a/server/routes/query-history.js +++ b/server/routes/query-history.js @@ -1,13 +1,15 @@ const router = require('express').Router(); const uuid = require('uuid'); const getMeta = require('../lib/getMeta'); -const queryHistoryUtil = require('../models/queryHistory.js'); +const getModels = require('../models'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const urlFilterToNeDbFilter = require('../lib/urlFilterToNeDbFilter'); const sendError = require('../lib/sendError'); router.get('/api/query-history', mustBeAuthenticated, async function(req, res) { try { + const models = getModels(req.nedb); + const queryHistory = { id: uuid.v4(), cacheKey: null, @@ -22,7 +24,7 @@ router.get('/api/query-history', mustBeAuthenticated, async function(req, res) { // Convert URL filter to NeDB compatible filter object const dbFilter = urlFilterToNeDbFilter(req.query.filter); - const dbQueryHistory = await queryHistoryUtil.findByFilter(dbFilter); + const dbQueryHistory = await models.queryHistory.findByFilter(dbFilter); dbQueryHistory.map(q => { delete q._id; @@ -51,7 +53,10 @@ router.get('/api/query-history/:_id', mustBeAuthenticated, async function( res ) { try { - const queryHistoryItem = await queryHistoryUtil.findOneById(req.params._id); + const models = getModels(req.nedb); + const queryHistoryItem = await models.queryHistory.findOneById( + req.params._id + ); if (!queryHistoryItem) { return sendError(res, null, 'Query history item not found'); } diff --git a/server/routes/query-result.js b/server/routes/query-result.js index 3a17a51ba..a5d35fee9 100644 --- a/server/routes/query-result.js +++ b/server/routes/query-result.js @@ -1,9 +1,6 @@ const router = require('express').Router(); const { runQuery } = require('../drivers/index'); -const connections = require('../models/connections.js'); -const resultCache = require('../models/resultCache.js'); -const queriesUtil = require('../models/queries.js'); -const queryHistory = require('../models/queryHistory'); +const getModels = require('../models'); const mustHaveConnectionAccess = require('../middleware/must-have-connection-access.js'); const mustHaveConnectionAccessOrChartLink = require('../middleware/must-have-connection-access-or-chart-link-noauth'); const sendError = require('../lib/sendError'); @@ -15,7 +12,8 @@ router.get( mustHaveConnectionAccessOrChartLink, async function(req, res) { try { - const query = await queriesUtil.findOneById(req.params._queryId); + const models = getModels(req.nedb); + const query = await models.queries.findOneById(req.params._queryId); if (!query) { return sendError(res, null, 'Query not found (save query first)'); } @@ -64,8 +62,9 @@ router.post('/api/query-result', mustHaveConnectionAccess, async function( }); async function getQueryResult(req, data) { + const models = getModels(req.nedb); const { connectionId, cacheKey, queryId, queryName, queryText, user } = data; - const connection = await connections.findOneById(connectionId); + const connection = await models.connections.findOneById(connectionId); if (!connection) { throw new Error('Please choose a connection'); @@ -76,8 +75,8 @@ async function getQueryResult(req, data) { queryResult.cacheKey = cacheKey; if (req.config.get('queryHistoryRetentionTimeInDays') > 0) { - await queryHistory.removeOldEntries(); - await queryHistory.save({ + await models.queryHistory.removeOldEntries(); + await models.queryHistory.save({ userId: user._id, userEmail: user.email, connectionId: connection._id, @@ -94,10 +93,10 @@ async function getQueryResult(req, data) { } if (req.config.get('allowCsvDownload')) { - resultCache.saveResultCache(cacheKey, queryName); - await resultCache.writeXlsx(cacheKey, queryResult); - await resultCache.writeCsv(cacheKey, queryResult); - await resultCache.writeJson(cacheKey, queryResult); + models.resultCache.saveResultCache(cacheKey, queryName); + await models.resultCache.writeXlsx(cacheKey, queryResult); + await models.resultCache.writeCsv(cacheKey, queryResult); + await models.resultCache.writeJson(cacheKey, queryResult); } return queryResult; diff --git a/server/routes/saml.js b/server/routes/saml.js index c23b60ecf..0ec0755a9 100644 --- a/server/routes/saml.js +++ b/server/routes/saml.js @@ -2,7 +2,8 @@ const passport = require('passport'); const SamlStrategy = require('passport-saml').Strategy; const router = require('express').Router(); const logger = require('../lib/logger'); -const usersUtil = require('../models/users.js'); +const { getNedb } = require('../lib/db'); +const getModels = require('../models'); /** * Adds passport SAML strategy and SAML auth routes if SAML is configured @@ -41,7 +42,9 @@ function makeSamlAuth(config) { p[ 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress' ]; - const user = await usersUtil.findOneByEmail(email); + const nedb = await getNedb(); + const models = getModels(nedb); + const user = await models.users.findOneByEmail(email); logger.info('User logged in via SAML %s', email); if (!user) { return done(null, false); diff --git a/server/routes/schema-info.js b/server/routes/schema-info.js index 540a17601..b478e72e6 100644 --- a/server/routes/schema-info.js +++ b/server/routes/schema-info.js @@ -1,6 +1,5 @@ const router = require('express').Router(); -const connections = require('../models/connections'); -const schemaInfoUtil = require('../models/schemaInfo.js'); +const getModels = require('../models'); const driver = require('../drivers'); const mustHaveConnectionAccess = require('../middleware/must-have-connection-access.js'); const sendError = require('../lib/sendError'); @@ -9,17 +8,18 @@ router.get( '/api/schema-info/:connectionId', mustHaveConnectionAccess, async function(req, res) { + const models = getModels(req.nedb); const { connectionId } = req.params; const reload = req.query.reload === 'true'; try { - const conn = await connections.findOneById(connectionId); + const conn = await models.connections.findOneById(connectionId); if (!conn) { throw new Error('Connection not found'); } - let schemaInfo = await schemaInfoUtil.getSchemaInfo(connectionId); + let schemaInfo = await models.schemaInfo.getSchemaInfo(connectionId); if (schemaInfo && !reload) { return res.json({ schemaInfo }); @@ -27,7 +27,7 @@ router.get( schemaInfo = await driver.getSchema(conn); if (Object.keys(schemaInfo).length) { - await schemaInfoUtil.saveSchemaInfo(connectionId, schemaInfo); + await models.schemaInfo.saveSchemaInfo(connectionId, schemaInfo); } return res.json({ schemaInfo }); } catch (error) { diff --git a/server/routes/signup-signin-signout.js b/server/routes/signup-signin-signout.js index 9329a2f75..a9ad30319 100644 --- a/server/routes/signup-signin-signout.js +++ b/server/routes/signup-signin-signout.js @@ -3,13 +3,15 @@ const PassportLocalStrategy = require('passport-local').Strategy; const BasicStrategy = require('passport-http').BasicStrategy; const router = require('express').Router(); const checkWhitelist = require('../lib/check-whitelist'); -const usersUtil = require('../models/users.js'); +const getModels = require('../models'); +const { getNedb } = require('../lib/db'); const sendError = require('../lib/sendError'); const logger = require('../lib/logger'); const passhash = require('../lib/passhash.js'); async function handleSignup(req, res, next) { try { + const models = getModels(req.nedb); const whitelistedDomains = req.config.get('whitelistedDomains'); if (req.body.password !== req.body.passwordConfirmation) { @@ -17,8 +19,8 @@ async function handleSignup(req, res, next) { } let [user, adminRegistrationOpen] = await Promise.all([ - usersUtil.findOneByEmail(req.body.email), - usersUtil.adminRegistrationOpen() + models.users.findOneByEmail(req.body.email), + models.users.adminRegistrationOpen() ]); if (user && user.passhash) { @@ -28,7 +30,7 @@ async function handleSignup(req, res, next) { if (user) { user.password = req.body.password; user.signupDate = new Date(); - await usersUtil.save(user); + await models.users.save(user); return next(); } @@ -38,7 +40,7 @@ async function handleSignup(req, res, next) { adminRegistrationOpen || checkWhitelist(whitelistedDomains, req.body.email) ) { - user = await usersUtil.save({ + user = await models.users.save({ email: req.body.email, password: req.body.password, role: adminRegistrationOpen ? 'admin' : 'editor', @@ -74,7 +76,9 @@ function makeLocalAuth(config) { }, async function passportLocalStrategyHandler(email, password, done) { try { - const user = await usersUtil.findOneByEmail(email); + const nedb = await getNedb(); + const models = getModels(nedb); + const user = await models.users.findOneByEmail(email); if (!user) { return done(null, false, { message: 'wrong email or password' }); } @@ -103,7 +107,9 @@ function makeLocalAuth(config) { passport.use( new BasicStrategy(async function(username, password, callback) { try { - const user = await usersUtil.findOneByEmail(username); + const nedb = await getNedb(); + const models = getModels(nedb); + const user = await models.users.findOneByEmail(username); if (!user) { return callback(null, false); } diff --git a/server/routes/tags.js b/server/routes/tags.js index 3a2aab2aa..98584d226 100644 --- a/server/routes/tags.js +++ b/server/routes/tags.js @@ -1,12 +1,13 @@ const _ = require('lodash'); const router = require('express').Router(); -const queriesUtil = require('../models/queries.js'); +const getModels = require('../models'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const sendError = require('../lib/sendError'); router.get('/api/tags', mustBeAuthenticated, async function(req, res) { try { - const queries = await queriesUtil.findAll(); + const models = getModels(req.nedb); + const queries = await models.queries.findAll(); const tags = _.uniq(_.flatten(_.map(queries, 'tags'))) .sort() .filter(t => t); diff --git a/server/routes/users.js b/server/routes/users.js index 7fbd2b8ac..662bb8c7b 100644 --- a/server/routes/users.js +++ b/server/routes/users.js @@ -1,5 +1,5 @@ const router = require('express').Router(); -const usersUtil = require('../models/users.js'); +const getModels = require('../models'); const makeEmail = require('../lib/email'); const mustBeAdmin = require('../middleware/must-be-admin.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); @@ -8,7 +8,8 @@ const logger = require('../lib/logger'); router.get('/api/users', mustBeAuthenticated, async function(req, res) { try { - const users = await usersUtil.findAll(); + const models = getModels(req.nedb); + const users = await models.users.findAll(); return res.json({ users }); } catch (error) { sendError(res, error, 'Problem getting uers'); @@ -18,11 +19,12 @@ router.get('/api/users', mustBeAuthenticated, async function(req, res) { // create/whitelist/invite user router.post('/api/users', mustBeAdmin, async function(req, res) { try { - let user = await usersUtil.findOneByEmail(req.body.email); + const models = getModels(req.nedb); + let user = await models.users.findOneByEmail(req.body.email); if (user) { return sendError(res, null, 'User already exists'); } - user = await usersUtil.save({ + user = await models.users.save({ email: req.body.email.toLowerCase(), role: req.body.role }); @@ -44,7 +46,8 @@ router.put('/api/users/:_id', mustBeAdmin, async function(req, res) { return sendError(res, null, "You can't unadmin yourself"); } try { - const updateUser = await usersUtil.findOneById(params._id); + const models = getModels(req.nedb); + const updateUser = await models.users.findOneById(params._id); if (!updateUser) { return sendError(res, null, 'user not found'); } @@ -56,7 +59,7 @@ router.put('/api/users/:_id', mustBeAdmin, async function(req, res) { if (body.passwordResetId != null) { updateUser.passwordResetId = body.passwordResetId; } - const updatedUser = await usersUtil.save(updateUser); + const updatedUser = await models.users.save(updateUser); return res.json({ user: updatedUser }); } catch (error) { sendError(res, error, 'Problem saving user'); @@ -68,7 +71,8 @@ router.delete('/api/users/:_id', mustBeAdmin, async function(req, res) { return sendError(res, null, "You can't delete yourself"); } try { - await usersUtil.removeById(req.params._id); + const models = getModels(req.nedb); + await models.users.removeById(req.params._id); return res.json({}); } catch (error) { sendError(res, error, 'Problem deleting user'); diff --git a/server/server.js b/server/server.js index f4296d7fe..f9da527f2 100755 --- a/server/server.js +++ b/server/server.js @@ -4,12 +4,16 @@ const fs = require('fs'); const http = require('http'); const https = require('https'); const detectPort = require('detect-port'); +const makeApp = require('./app'); // Parse command line flags to see if anything special needs to happen require('./lib/cli-flow.js'); const logger = require('./lib/logger'); const config = require('./lib/config'); +const { makeNedb } = require('./lib/db'); + +const dbPromise = makeNedb(config); const configValidations = config.getValidations(); configValidations.warnings.map(warning => logger.warn(warning)); @@ -18,8 +22,6 @@ if (configValidations.errors.length > 0) { process.exit(1); } -const app = require('./app')(config); - const baseUrl = config.get('baseUrl'); const ip = config.get('ip'); const port = config.get('port'); @@ -30,8 +32,6 @@ const certPath = config.get('certPath'); const systemdSocket = config.get('systemdSocket'); const timeoutSeconds = config.get('timeoutSeconds'); -const db = require('./lib/db'); - function isFdObject(ob) { return ob && typeof ob.fd === 'number'; } @@ -70,7 +70,9 @@ function detectPortOrSystemd(port) { ============================================================================= */ let server; -async function startServer() { +async function startServer(nedb) { + const app = makeApp(config, nedb); + // determine if key pair exists for certs if (keyPath && certPath) { // https only @@ -122,10 +124,12 @@ async function startServer() { server.setTimeout(timeoutSeconds * 1000); } -db.loadPromise.then(startServer).catch(error => { - logger.error(error, 'Error starting SQLPad'); - process.exit(1); -}); +dbPromise + .then(nedb => startServer(nedb)) + .catch(error => { + logger.error(error, 'Error starting SQLPad'); + process.exit(1); + }); function handleShutdownSignal(signal) { if (!server) { diff --git a/server/test/api/password-reset.js b/server/test/api/password-reset.js index db4de75b5..9c2e95214 100644 --- a/server/test/api/password-reset.js +++ b/server/test/api/password-reset.js @@ -1,13 +1,16 @@ const assert = require('assert'); const utils = require('../utils'); const uuid = require('uuid'); -const usersUtil = require('../../models/users'); +const { getNedb } = require('../../lib/db'); +const getModels = require('../../models'); async function setReset() { - const user = await usersUtil.findOneByEmail('admin@test.com'); + const nedb = await getNedb(); + const models = getModels(nedb); + const user = await models.users.findOneByEmail('admin@test.com'); const passwordResetId = uuid.v4(); user.passwordResetId = passwordResetId; - await usersUtil.save(user); + await models.users.save(user); return passwordResetId; } diff --git a/server/test/models/connections.js b/server/test/models/connections.js index b37418a80..ec47afeea 100644 --- a/server/test/models/connections.js +++ b/server/test/models/connections.js @@ -1,14 +1,24 @@ const assert = require('assert'); -const connections = require('../../models/connections.js'); +const { getNedb } = require('../../lib/db'); +const { getConnectionsFromConfig } = require('../../lib/connectionsFromConfig'); +const getModels = require('../../models'); describe('getConnectionsFromConfig', function() { + let nedb; + let models; + + before(async function() { + nedb = await getNedb(); + models = getModels(nedb); + }); + it('handles empty object', function() { - const cs = connections.getConnectionsFromConfig({}); + const cs = getConnectionsFromConfig({}); assert(Array.isArray(cs)); }); it('skips partial connections', function() { - const cs = connections.getConnectionsFromConfig({ + const cs = getConnectionsFromConfig({ SQLPAD_CONNECTIONS__abc__driver: 'postgres' }); assert(Array.isArray(cs)); @@ -16,7 +26,7 @@ describe('getConnectionsFromConfig', function() { }); it('parses connection properly', function() { - const cs = connections.getConnectionsFromConfig({ + const cs = getConnectionsFromConfig({ SQLPAD_CONNECTIONS__abc__driver: 'postgres', SQLPAD_CONNECTIONS__abc__name: 'env-postgres', SQLPAD_CONNECTIONS__abc__host: 'localhost', @@ -42,7 +52,7 @@ describe('getConnectionsFromConfig', function() { process.env.SQLPAD_CONNECTIONS__abc__port = '5432'; process.env.SQLPAD_CONNECTIONS__abc__postgresSsl = 'true'; - const allConnections = await connections.findAll(); + const allConnections = await models.connections.findAll(); const connection = allConnections.find(c => c._id === 'abc'); assert.strictEqual(connection.name, 'env-postgres', 'connection.name'); assert.strictEqual(connection.editable, false, 'connection.editable'); @@ -61,7 +71,7 @@ describe('getConnectionsFromConfig', function() { process.env.SQLPAD_CONNECTIONS__abc__port = '5432'; process.env.SQLPAD_CONNECTIONS__abc__postgresSsl = 'true'; - const connection = await connections.findOneById('abc'); + const connection = await models.connections.findOneById('abc'); assert.strictEqual(connection.name, 'env-postgres', 'connection.name'); assert.strictEqual(connection.editable, false, 'connection.editable'); diff --git a/server/test/utils.js b/server/test/utils.js index b45b3c63c..c9cdf17d7 100644 --- a/server/test/utils.js +++ b/server/test/utils.js @@ -1,10 +1,13 @@ const assert = require('assert'); const request = require('supertest'); -const usersUtil = require('../models/users'); +const getModels = require('../models'); const consts = require('../lib/consts'); -const db = require('../lib/db'); const config = require('../lib/config'); -const app = require('../app')(config); +const { makeNedb } = require('../lib/db'); +const makeApp = require('../app'); + +const dbPromise = makeNedb(config); +let app; const users = { admin: { @@ -25,13 +28,14 @@ function expectKeys(data, expectedKeys) { ); } -function reset() { +async function reset() { + const nedb = await dbPromise; return Promise.all([ - db.users.remove({}, { multi: true }), - db.queries.remove({}, { multi: true }), - db.queryHistory.remove({}, { multi: true }), - db.connections.remove({}, { multi: true }), - db.connectionAccesses.remove( + nedb.users.remove({}, { multi: true }), + nedb.queries.remove({}, { multi: true }), + nedb.queryHistory.remove({}, { multi: true }), + nedb.connections.remove({}, { multi: true }), + nedb.connectionAccesses.remove( { $not: { $and: [ @@ -47,8 +51,10 @@ function reset() { async function resetWithUser() { await reset(); + const nedb = await dbPromise; + const models = getModels(nedb); const saves = Object.keys(users).map(key => { - return usersUtil.save(users[key]); + return models.users.save(users[key]); }); return Promise.all(saves); } @@ -63,6 +69,7 @@ function addAuth(req, role) { } async function del(role, url, statusCode = 200) { + await dbPromise; let req = request(app).delete(url); req = addAuth(req, role); const response = await req.expect(statusCode); @@ -70,6 +77,7 @@ async function del(role, url, statusCode = 200) { } async function get(role, url, statusCode = 200) { + await dbPromise; let req = request(app).get(url); req = addAuth(req, role); const response = await req.expect(statusCode); @@ -77,6 +85,7 @@ async function get(role, url, statusCode = 200) { } async function post(role, url, body, statusCode = 200) { + await dbPromise; let req = request(app).post(url); req = addAuth(req, role); const response = await req.send(body).expect(statusCode); @@ -84,16 +93,21 @@ async function post(role, url, body, statusCode = 200) { } async function put(role, url, body, statusCode = 200) { + await dbPromise; let req = request(app).put(url); req = addAuth(req, role); const response = await req.send(body).expect(statusCode); return response.body; } -// Sometimes config test is flaky because API returns a forbidden. -// Is it because db is not ready? This will ensure that for tests. before(async function() { - await db.loadPromise; + const nedb = await dbPromise; + app = makeApp(config, nedb); + + assert.throws(() => { + makeNedb(config); + }, 'ensure nedb can be made once'); + return resetWithUser(); }); From 4e0f61ff4ad25e42d1ece9e03122695549ae5e32 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 20 Feb 2020 00:04:32 -0600 Subject: [PATCH 012/658] Passport/auth refinements (#541) * Reference req in deserializeUser * Use passReqToCallback for strategy verification * Separate local auth routes from signout route --- server/app.js | 3 +- server/middleware/passport.js | 24 +++---- ...signup-signin-signout.js => local-auth.js} | 65 +++++++++---------- server/routes/oauth.js | 6 +- server/routes/saml.js | 7 +- server/routes/signout.js | 18 +++++ 6 files changed, 69 insertions(+), 54 deletions(-) rename server/routes/{signup-signin-signout.js => local-auth.js} (77%) create mode 100644 server/routes/signout.js diff --git a/server/app.js b/server/app.js index a78c59b49..d28900307 100644 --- a/server/app.js +++ b/server/app.js @@ -123,7 +123,8 @@ function makeApp(config, nedb) { require('./routes/schema-info.js'), require('./routes/tags.js'), require('./routes/format-sql.js'), - require('./routes/signup-signin-signout.js')(config), + require('./routes/signout.js'), + require('./routes/local-auth.js')(config), require('./routes/oauth.js')(config), require('./routes/saml.js')(config) ]; diff --git a/server/middleware/passport.js b/server/middleware/passport.js index cdbe5dac2..4fe1bde26 100644 --- a/server/middleware/passport.js +++ b/server/middleware/passport.js @@ -1,5 +1,4 @@ const passport = require('passport'); -const { getNedb } = require('../lib/db'); const getModels = require('../models'); // For actual passport strategy implementations, refer to related route files: @@ -9,22 +8,25 @@ const getModels = require('../models'); // // The passport config below applies regardless of the strategy used. +// Given a user object, extract the id to use for session +// nedb objects use `._id`, but some auth implementations at one point used `.id` passport.serializeUser(function(user, done) { - done(null, user.id); + done(null, user.id || user._id); }); -passport.deserializeUser(async function(id, done) { +// deserializeUser takes the id from the session and turns it into a user object. +// This user object will decorate req.user +// Note: while passport docs only reference this function taking 2 arguments, +// it can take 3, one of which being the req object +// https://github.com/jaredhanson/passport/issues/743 +// https://github.com/passport/www.passportjs.org/pull/83/files +passport.deserializeUser(async function(req, id, done) { try { - const nedb = await getNedb(); - const models = getModels(nedb); + const models = getModels(req.nedb); const user = await models.users.findOneById(id); if (user) { - return done(null, { - id: user._id, - _id: user._id, - role: user.role, - email: user.email - }); + // decorate req.user with full user object, plus `id` aliased for _id + return done(null, { ...user, id: user._id }); } done(null, false); } catch (error) { diff --git a/server/routes/signup-signin-signout.js b/server/routes/local-auth.js similarity index 77% rename from server/routes/signup-signin-signout.js rename to server/routes/local-auth.js index a9ad30319..5f9735c2f 100644 --- a/server/routes/signup-signin-signout.js +++ b/server/routes/local-auth.js @@ -4,7 +4,6 @@ const BasicStrategy = require('passport-http').BasicStrategy; const router = require('express').Router(); const checkWhitelist = require('../lib/check-whitelist'); const getModels = require('../models'); -const { getNedb } = require('../lib/db'); const sendError = require('../lib/sendError'); const logger = require('../lib/logger'); const passhash = require('../lib/passhash.js'); @@ -72,12 +71,17 @@ function makeLocalAuth(config) { passport.use( new PassportLocalStrategy( { + passReqToCallback: true, usernameField: 'email' }, - async function passportLocalStrategyHandler(email, password, done) { + async function passportLocalStrategyHandler( + req, + email, + password, + done + ) { try { - const nedb = await getNedb(); - const models = getModels(nedb); + const models = getModels(req.nedb); const user = await models.users.findOneByEmail(email); if (!user) { return done(null, false, { message: 'wrong email or password' }); @@ -105,26 +109,30 @@ function makeLocalAuth(config) { // TODO - basic auth should perhaps be something opted into as a separate config logger.info('Enabling basic authentication strategy.'); passport.use( - new BasicStrategy(async function(username, password, callback) { - try { - const nedb = await getNedb(); - const models = getModels(nedb); - const user = await models.users.findOneByEmail(username); - if (!user) { - return callback(null, false); - } - const isMatch = await passhash.comparePassword( - password, - user.passhash - ); - if (!isMatch) { - return callback(null, false); + new BasicStrategy( + { + passReqToCallback: true + }, + async function(req, username, password, callback) { + try { + const models = getModels(req.nedb); + const user = await models.users.findOneByEmail(username); + if (!user) { + return callback(null, false); + } + const isMatch = await passhash.comparePassword( + password, + user.passhash + ); + if (!isMatch) { + return callback(null, false); + } + return callback(null, user); + } catch (error) { + callback(error); } - return callback(null, user); - } catch (error) { - callback(error); } - }) + ) ); // Add routes for local auth signup & signin @@ -138,19 +146,6 @@ function makeLocalAuth(config) { router.post('/api/signin', passport.authenticate('local'), sendSuccess); } - // Sign out route should always exist - router.get('/api/signout', function(req, res) { - if (!req.session) { - return res.json({}); - } - req.session.destroy(function(err) { - if (err) { - logger.error(err); - } - res.json({}); - }); - }); - return router; } diff --git a/server/routes/oauth.js b/server/routes/oauth.js index 69d15f5ae..3c4aab434 100644 --- a/server/routes/oauth.js +++ b/server/routes/oauth.js @@ -3,7 +3,6 @@ const PassportGoogleStrategy = require('passport-google-oauth20').Strategy; const router = require('express').Router(); const logger = require('../lib/logger'); const checkWhitelist = require('../lib/check-whitelist.js'); -const { getNedb } = require('../lib/db'); const getModels = require('../models'); /** @@ -17,6 +16,7 @@ function makeGoogleAuth(config) { const publicUrl = config.get('publicUrl'); async function passportGoogleStrategyHandler( + req, accessToken, refreshToken, profile, @@ -30,8 +30,7 @@ function makeGoogleAuth(config) { }); } - const nedb = await getNedb(); - const models = getModels(nedb); + const models = getModels(req.nedb); try { let [openAdminRegistration, user] = await Promise.all([ @@ -73,6 +72,7 @@ function makeGoogleAuth(config) { passport.use( new PassportGoogleStrategy( { + passReqToCallback: true, clientID: googleClientId, clientSecret: googleClientSecret, callbackURL: publicUrl + baseUrl + '/auth/google/callback', diff --git a/server/routes/saml.js b/server/routes/saml.js index 0ec0755a9..0389f37a1 100644 --- a/server/routes/saml.js +++ b/server/routes/saml.js @@ -2,7 +2,6 @@ const passport = require('passport'); const SamlStrategy = require('passport-saml').Strategy; const router = require('express').Router(); const logger = require('../lib/logger'); -const { getNedb } = require('../lib/db'); const getModels = require('../models'); /** @@ -29,6 +28,7 @@ function makeSamlAuth(config) { passport.use( new SamlStrategy( { + passReqToCallback: true, path: '/login/callback', entryPoint: samlEntryPoint, issuer: samlIssuer, @@ -37,13 +37,12 @@ function makeSamlAuth(config) { authnContext: samlAuthContext, identifierFormat: null }, - async function(p, done) { + async function(req, p, done) { const email = p[ 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress' ]; - const nedb = await getNedb(); - const models = getModels(nedb); + const models = getModels(req.nedb); const user = await models.users.findOneByEmail(email); logger.info('User logged in via SAML %s', email); if (!user) { diff --git a/server/routes/signout.js b/server/routes/signout.js new file mode 100644 index 000000000..921160acb --- /dev/null +++ b/server/routes/signout.js @@ -0,0 +1,18 @@ +const router = require('express').Router(); +const logger = require('../lib/logger'); + +// Regardless of authentication strategy, signout route should always exist +// It clears out the session which is used regardless of strategy +router.get('/api/signout', function(req, res) { + if (!req.session) { + return res.json({}); + } + req.session.destroy(function(err) { + if (err) { + logger.error(err); + } + res.json({}); + }); +}); + +module.exports = router; From 5a63bfb98a31e73198992c7f5c5267dc71b42bf7 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 20 Feb 2020 14:21:20 -0600 Subject: [PATCH 013/658] Add model classes and middleware (#542) * ConnectionAccesses class * Typedefs proof of concept * Users class * SchemaInfo class * ResultCache class * Classes for the rest of models * Add type definitions for remaining models * Reference req.models in routes --- server/app.js | 9 +- ...-connection-access-or-chart-link-noauth.js | 3 +- .../middleware/must-have-connection-access.js | 3 +- server/middleware/passport.js | 3 +- server/models/connectionAccesses.js | 67 +++---- server/models/connections.js | 37 ++-- server/models/index.js | 28 +-- server/models/queries.js | 40 ++-- server/models/queryHistory.js | 36 ++-- server/models/resultCache.js | 183 +++++++++--------- server/models/schemaInfo.js | 20 +- server/models/users.js | 50 +++-- server/routes/app.js | 4 +- server/routes/connection-accesses.js | 75 ++++--- server/routes/connections.js | 11 +- server/routes/download-results.js | 7 +- server/routes/forgot-password.js | 3 +- server/routes/local-auth.js | 7 +- server/routes/oauth.js | 4 +- server/routes/password-reset.js | 3 +- server/routes/queries.js | 11 +- server/routes/query-history.js | 6 +- server/routes/query-result.js | 5 +- server/routes/saml.js | 3 +- server/routes/schema-info.js | 3 +- server/routes/tags.js | 3 +- server/routes/users.js | 10 +- server/typedefs.js | 17 ++ 28 files changed, 326 insertions(+), 325 deletions(-) create mode 100644 server/typedefs.js diff --git a/server/app.js b/server/app.js index d28900307..58864b0cc 100644 --- a/server/app.js +++ b/server/app.js @@ -5,6 +5,7 @@ const helmet = require('helmet'); const session = require('express-session'); const FileStore = require('session-file-store')(session); const logger = require('./lib/logger'); +const getModels = require('./models'); /** * Create an express app using config @@ -43,7 +44,7 @@ function makeApp(config, nedb) { }); /* Express setup -============================================================================= */ + ============================================================================= */ const bodyParser = require('body-parser'); const favicon = require('serve-favicon'); const passport = require('passport'); @@ -63,7 +64,7 @@ function makeApp(config, nedb) { // Decorate req with app things app.use(function(req, res, next) { req.config = config; - req.nedb = nedb; + req.models = getModels(nedb); next(); }); @@ -97,7 +98,7 @@ function makeApp(config, nedb) { app.use(baseUrl, express.static(path.join(__dirname, 'public'))); /* Passport setup -============================================================================= */ + ============================================================================= */ require('./middleware/passport.js'); // If local auth is not disabled, support basic auth using a user's email and password @@ -107,7 +108,7 @@ function makeApp(config, nedb) { } /* Routes -============================================================================= */ + ============================================================================= */ const routers = [ require('./routes/drivers.js'), require('./routes/users.js'), diff --git a/server/middleware/must-have-connection-access-or-chart-link-noauth.js b/server/middleware/must-have-connection-access-or-chart-link-noauth.js index 853a3a909..389b2ad5a 100644 --- a/server/middleware/must-have-connection-access-or-chart-link-noauth.js +++ b/server/middleware/must-have-connection-access-or-chart-link-noauth.js @@ -1,12 +1,11 @@ const mustBeAuthenticated = require('./must-be-authenticated'); -const getModels = require('../models'); // If admin or has connection access then continue // If no access don't continue but return 200 with an error message module.exports = [ mustBeAuthenticated, async function mustHaveConnectionAccessOrChartLinkNoAuth(req, res, next) { - const models = getModels(req.nedb); + const { models } = req; if ( req.user.role === 'admin' || !req.config.get('tableChartLinksRequireAuth') diff --git a/server/middleware/must-have-connection-access.js b/server/middleware/must-have-connection-access.js index 82459384e..fb81e9c23 100644 --- a/server/middleware/must-have-connection-access.js +++ b/server/middleware/must-have-connection-access.js @@ -1,12 +1,11 @@ const mustBeAuthenticated = require('./must-be-authenticated'); -const getModels = require('../models'); // If admin or has connection access then continue // If no access don't continue but return 200 with an error message module.exports = [ mustBeAuthenticated, async function mustHaveConnectionAccess(req, res, next) { - const models = getModels(req.nedb); + const { models } = req; if (req.user.role === 'admin') { return next(); } diff --git a/server/middleware/passport.js b/server/middleware/passport.js index 4fe1bde26..41603b93a 100644 --- a/server/middleware/passport.js +++ b/server/middleware/passport.js @@ -1,5 +1,4 @@ const passport = require('passport'); -const getModels = require('../models'); // For actual passport strategy implementations, refer to related route files: // Local & Basic: routes/signup-signin-signout.js @@ -21,8 +20,8 @@ passport.serializeUser(function(user, done) { // https://github.com/jaredhanson/passport/issues/743 // https://github.com/passport/www.passportjs.org/pull/83/files passport.deserializeUser(async function(req, id, done) { + const { models } = req; try { - const models = getModels(req.nedb); const user = await models.users.findOneById(id); if (user) { // decorate req.user with full user object, plus `id` aliased for _id diff --git a/server/models/connectionAccesses.js b/server/models/connectionAccesses.js index cead176ae..825a2a33b 100644 --- a/server/models/connectionAccesses.js +++ b/server/models/connectionAccesses.js @@ -17,8 +17,12 @@ const schema = Joi.object({ modifiedDate: Joi.date().default(Date.now) }); -function makeConnectionAccesses(nedb) { - async function save(data) { +class ConnectionAccesses { + constructor(nedb) { + this.nedb = nedb; + } + + async save(data) { if (!data.connectionId) { throw new Error('connectionId required when saving connection access'); } @@ -38,7 +42,7 @@ function makeConnectionAccesses(nedb) { return Promise.reject(joiResult.error); } - await nedb.connectionAccesses.update( + await this.nedb.connectionAccesses.update( { connectionId: data.connectionId, connectionName: data.connectionName, @@ -52,11 +56,16 @@ function makeConnectionAccesses(nedb) { upsert: true } ); - return findOneActiveByConnectionIdAndUserId(data.connectionId, data.userId); + return this.findOneActiveByConnectionIdAndUserId( + data.connectionId, + data.userId + ); } - async function expire(id) { - const connectionAccess = await nedb.connectionAccesses.findOne({ _id: id }); + async expire(id) { + const connectionAccess = await this.nedb.connectionAccesses.findOne({ + _id: id + }); if (!connectionAccess) { throw new Error('Connection access not found'); } @@ -64,16 +73,16 @@ function makeConnectionAccesses(nedb) { connectionAccess.expiryDate = new Date(); connectionAccess.modifiedDate = new Date(); - await nedb.connectionAccesses.update({ _id: id }, connectionAccess); - return findOneById(id); + await this.nedb.connectionAccesses.update({ _id: id }, connectionAccess); + return this.findOneById(id); } - function findOneById(id) { - return nedb.connectionAccesses.findOne({ _id: id }); + findOneById(id) { + return this.nedb.connectionAccesses.findOne({ _id: id }); } - function findOneActiveByConnectionIdAndUserId(connectionId, userId) { - return nedb.connectionAccesses.findOne({ + findOneActiveByConnectionIdAndUserId(connectionId, userId) { + return this.nedb.connectionAccesses.findOne({ $and: [ { $or: [ @@ -96,48 +105,36 @@ function makeConnectionAccesses(nedb) { }); } - function findAllActiveByConnectionId(connectionId) { - return nedb.connectionAccesses.findOne({ + findAllActiveByConnectionId(connectionId) { + return this.nedb.connectionAccesses.findOne({ connectionId: { $in: [connectionId, consts.EVERY_CONNECTION_ID] }, expiryDate: { $gt: new Date() } }); } - function findAllByConnectionId(connectionId) { - return nedb.connectionAccesses.findAll({ + findAllByConnectionId(connectionId) { + return this.nedb.connectionAccesses.findAll({ connectionId: { $in: [connectionId, consts.EVERY_CONNECTION_ID] } }); } - function findAllActive() { - return nedb.connectionAccesses + findAllActive() { + return this.nedb.connectionAccesses .cfind({ expiryDate: { $gt: new Date() } }) .sort({ expiryDate: -1 }) .exec(); } - function findAll() { - return nedb.connectionAccesses + findAll() { + return this.nedb.connectionAccesses .cfind({}, {}) .sort({ expiryDate: -1 }) .exec(); } - function removeById(id) { - return nedb.connectionAccesses.remove({ _id: id }); + removeById(id) { + return this.nedb.connectionAccesses.remove({ _id: id }); } - - return { - findOneById, - findOneActiveByConnectionIdAndUserId, - findAllActiveByConnectionId, - findAllByConnectionId, - findAllActive, - findAll, - removeById, - expire, - save - }; } -module.exports = makeConnectionAccesses; +module.exports = ConnectionAccesses; diff --git a/server/models/connections.js b/server/models/connections.js index e9098e547..3dfd35d49 100644 --- a/server/models/connections.js +++ b/server/models/connections.js @@ -17,9 +17,13 @@ function decipherConnection(connection) { return connection; } -function makeConnections(nedb) { - async function findAll() { - let connectionsFromDb = await nedb.connections.find({}); +class Connections { + constructor(nedb) { + this.nedb = nedb; + } + + async findAll() { + let connectionsFromDb = await this.nedb.connections.find({}); connectionsFromDb = connectionsFromDb.map(conn => { conn.editable = true; return decipherConnection(conn); @@ -29,8 +33,8 @@ function makeConnections(nedb) { return _.sortBy(allConnections, c => c.name.toLowerCase()); } - async function findOneById(id) { - const connection = await nedb.connections.findOne({ _id: id }); + async findOneById(id) { + const connection = await this.nedb.connections.findOne({ _id: id }); if (connection) { connection.editable = true; return decipherConnection(connection); @@ -44,11 +48,11 @@ function makeConnections(nedb) { return connectionFromEnv; } - async function removeOneById(id) { - return nedb.connections.remove({ _id: id }); + async removeOneById(id) { + return this.nedb.connections.remove({ _id: id }); } - async function save(connection) { + async save(connection) { if (!connection) { throw new Error('connections.save() requires a connection'); } @@ -65,19 +69,12 @@ function makeConnections(nedb) { const { _id } = connection; if (_id) { - await nedb.connections.update({ _id }, connection, {}); - return findOneById(_id); + await this.nedb.connections.update({ _id }, connection, {}); + return this.findOneById(_id); } - const newDoc = await nedb.connections.insert(connection); - return findOneById(newDoc._id); + const newDoc = await this.nedb.connections.insert(connection); + return this.findOneById(newDoc._id); } - - return { - findAll, - findOneById, - removeOneById, - save - }; } -module.exports = makeConnections; +module.exports = Connections; diff --git a/server/models/index.js b/server/models/index.js index 84f66b8b9..b3cd2d54d 100644 --- a/server/models/index.js +++ b/server/models/index.js @@ -1,19 +1,19 @@ -const makeUsers = require('./users'); -const makeSchemaInfo = require('./schemaInfo'); -const makeResultCache = require('./resultCache'); -const makeQueryHistory = require('./queryHistory'); -const makeQueries = require('./queries'); -const makeConnections = require('./connections'); -const makeConnectionAccesses = require('./connectionAccesses'); +const Users = require('./users'); +const SchemaInfo = require('./schemaInfo'); +const ResultCache = require('./resultCache'); +const QueryHistory = require('./queryHistory'); +const Queries = require('./queries'); +const Connections = require('./connections'); +const ConnectionAccesses = require('./connectionAccesses'); module.exports = function(nedb) { return { - users: makeUsers(nedb), - schemaInfo: makeSchemaInfo(nedb), - resultCache: makeResultCache(nedb), - queryHistory: makeQueryHistory(nedb), - queries: makeQueries(nedb), - connections: makeConnections(nedb), - connectionAccesses: makeConnectionAccesses(nedb) + users: new Users(nedb), + schemaInfo: new SchemaInfo(nedb), + resultCache: new ResultCache(nedb), + queryHistory: new QueryHistory(nedb), + queries: new Queries(nedb), + connections: new Connections(nedb), + connectionAccesses: new ConnectionAccesses(nedb) }; }; diff --git a/server/models/queries.js b/server/models/queries.js index 7de003212..9d4ed9fdd 100644 --- a/server/models/queries.js +++ b/server/models/queries.js @@ -43,21 +43,25 @@ const schema = Joi.object({ lastAccessDate: Joi.date().default(Date.now) }); -function makeQueries(nedb) { - function findOneById(id) { - return nedb.queries.findOne({ _id: id }); +class Queries { + constructor(nedb) { + this.nedb = nedb; } - function findAll() { - return nedb.queries.find({}); + findOneById(id) { + return this.nedb.queries.findOne({ _id: id }); } - function findByFilter(filter) { - return nedb.queries.find(filter); + findAll() { + return this.nedb.queries.find({}); } - function removeById(id) { - return nedb.queries.remove({ _id: id }); + findByFilter(filter) { + return this.nedb.queries.find(filter); + } + + removeById(id) { + return this.nedb.queries.remove({ _id: id }); } /** @@ -65,7 +69,7 @@ function makeQueries(nedb) { * returns saved query object * @param {object} query */ - async function save(query) { + async save(query) { query.modifiedDate = new Date(); query.lastAccessDate = new Date(); @@ -85,22 +89,14 @@ function makeQueries(nedb) { return Promise.reject(joiResult.error); } if (query._id) { - await nedb.queries.update({ _id: query._id }, joiResult.value, { + await this.nedb.queries.update({ _id: query._id }, joiResult.value, { upsert: true }); - return findOneById(query._id); + return this.findOneById(query._id); } - const newQuery = await nedb.queries.insert(joiResult.value); + const newQuery = await this.nedb.queries.insert(joiResult.value); return newQuery; } - - return { - findOneById, - findAll, - findByFilter, - removeById, - save - }; } -module.exports = makeQueries; +module.exports = Queries; diff --git a/server/models/queryHistory.js b/server/models/queryHistory.js index 744a04717..7924facfe 100644 --- a/server/models/queryHistory.js +++ b/server/models/queryHistory.js @@ -18,31 +18,35 @@ const schema = Joi.object({ createdDate: Joi.date().default(new Date()) }); -function makeQueryHistory(nedb) { - function findOneById(id) { - return nedb.queryHistory.findOne({ _id: id }); +class QueryHistory { + constructor(nedb) { + this.nedb = nedb; } - async function findAll() { - return nedb.queryHistory + findOneById(id) { + return this.nedb.queryHistory.findOne({ _id: id }); + } + + async findAll() { + return this.nedb.queryHistory .cfind({}, {}) .sort({ startTime: -1 }) .exec(); } - function findByFilter(filter) { - return nedb.queryHistory + findByFilter(filter) { + return this.nedb.queryHistory .cfind(filter || {}, {}) .sort({ startTime: -1 }) .limit(config.get('queryHistoryResultMaxRows')) .exec(); } - async function removeOldEntries() { + async removeOldEntries() { const days = config.get('queryHistoryRetentionTimeInDays') * 86400 * 1000; const retentionPeriodStartTime = new Date(new Date().getTime() - days); - return nedb.queryHistory.remove( + return this.nedb.queryHistory.remove( { createdDate: { $lt: retentionPeriodStartTime } }, { multi: true } ); @@ -53,21 +57,13 @@ function makeQueryHistory(nedb) { * returns saved queryHistory object * @param {object} queryHistory */ - async function save(data) { + async save(data) { const joiResult = schema.validate(data); if (joiResult.error) { return Promise.reject(joiResult.error); } - return nedb.queryHistory.insert(joiResult.value); + return this.nedb.queryHistory.insert(joiResult.value); } - - return { - findOneById, - findAll, - findByFilter, - removeOldEntries, - save - }; } -module.exports = makeQueryHistory; +module.exports = QueryHistory; diff --git a/server/models/resultCache.js b/server/models/resultCache.js index 195303a6e..6e6783cfa 100644 --- a/server/models/resultCache.js +++ b/server/models/resultCache.js @@ -1,3 +1,4 @@ +/* eslint-disable class-methods-use-this */ const fs = require('fs'); const path = require('path'); const moment = require('moment'); @@ -8,24 +9,39 @@ const { parse } = require('json2csv'); const config = require('../lib/config'); const dbPath = config.get('dbPath'); -function xlsxFilePath(cacheKey) { - return path.join(dbPath, '/cache/', cacheKey + '.xlsx'); -} +// This is a workaround till BigInt is fully supported by the standard +// See https://tc39.es/ecma262/#sec-ecmascript-language-types-bigint-type +// and https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt +// If this is not done, then a JSON.stringify(BigInt) throws +// "TypeError: Do not know how to serialize a BigInt" +/* global BigInt:writable */ +/* eslint no-extend-native: ["error", { "exceptions": ["BigInt"] }] */ +BigInt.prototype.toJSON = function() { + return this.toString(); +}; -function csvFilePath(cacheKey) { - return path.join(dbPath, '/cache/', cacheKey + '.csv'); -} +class ResultCache { + constructor(nedb) { + this.nedb = nedb; + } -function jsonFilePath(cacheKey) { - return path.join(dbPath, '/cache/', cacheKey + '.json'); -} + xlsxFilePath(cacheKey) { + return path.join(dbPath, '/cache/', cacheKey + '.xlsx'); + } + + csvFilePath(cacheKey) { + return path.join(dbPath, '/cache/', cacheKey + '.csv'); + } + + jsonFilePath(cacheKey) { + return path.join(dbPath, '/cache/', cacheKey + '.json'); + } -function makeResultCache(nedb) { - async function findOneByCacheKey(cacheKey) { - return nedb.cache.findOne({ cacheKey }); + async findOneByCacheKey(cacheKey) { + return this.nedb.cache.findOne({ cacheKey }); } - async function saveResultCache(cacheKey, queryName) { + async saveResultCache(cacheKey, queryName) { if (!cacheKey) { throw new Error('cacheKey required'); } @@ -46,23 +62,25 @@ function makeResultCache(nedb) { modifiedDate }; - const existing = await findOneByCacheKey(cacheKey); + const existing = await this.findOneByCacheKey(cacheKey); if (!existing) { doc.createdDate = new Date(); } - return nedb.cache.update({ cacheKey }, doc, { + return this.nedb.cache.update({ cacheKey }, doc, { upsert: true }); } - async function removeExpired() { + async removeExpired() { try { - const docs = await nedb.cache.find({ expiration: { $lt: new Date() } }); + const docs = await this.nedb.cache.find({ + expiration: { $lt: new Date() } + }); for (const doc of docs) { const filepaths = [ - xlsxFilePath(doc.cacheKey), - csvFilePath(doc.cacheKey) + this.xlsxFilePath(doc.cacheKey), + this.csvFilePath(doc.cacheKey) ]; filepaths.forEach(fp => { if (fs.existsSync(fp)) { @@ -70,94 +88,73 @@ function makeResultCache(nedb) { } }); // eslint-disable-next-line no-await-in-loop - await nedb.cache.remove({ _id: doc._id }, {}); + await this.nedb.cache.remove({ _id: doc._id }, {}); } } catch (error) { logger.error(error); } } - return { - csvFilePath, - findOneByCacheKey, - jsonFilePath, - removeExpired, - saveResultCache, - writeCsv, - writeJson, - writeXlsx, - xlsxFilePath - }; -} - -function writeXlsx(cacheKey, queryResult) { - // loop through rows and build out an array of arrays - const resultArray = []; - resultArray.push(queryResult.fields); - for (let i = 0; i < queryResult.rows.length; i++) { - const row = []; - for (let c = 0; c < queryResult.fields.length; c++) { - const fieldName = queryResult.fields[c]; - row.push(queryResult.rows[i][fieldName]); - } - resultArray.push(row); - } - const xlsxBuffer = xlsx.build([{ name: 'query-results', data: resultArray }]); - return new Promise(resolve => { - fs.writeFile(xlsxFilePath(cacheKey), xlsxBuffer, function(err) { - // if there's an error log it but otherwise continue on - // we can still send results even if download file failed to create - if (err) { - logger.error(err); + writeXlsx(cacheKey, queryResult) { + // loop through rows and build out an array of arrays + const resultArray = []; + resultArray.push(queryResult.fields); + for (let i = 0; i < queryResult.rows.length; i++) { + const row = []; + for (let c = 0; c < queryResult.fields.length; c++) { + const fieldName = queryResult.fields[c]; + row.push(queryResult.rows[i][fieldName]); } - return resolve(); - }); - }); -} - -function writeCsv(cacheKey, queryResult) { - return new Promise(resolve => { - try { - const csv = parse(queryResult.rows, { fields: queryResult.fields }); - fs.writeFile(csvFilePath(cacheKey), csv, function(err) { + resultArray.push(row); + } + const xlsxBuffer = xlsx.build([ + { name: 'query-results', data: resultArray } + ]); + return new Promise(resolve => { + fs.writeFile(this.xlsxFilePath(cacheKey), xlsxBuffer, function(err) { + // if there's an error log it but otherwise continue on + // we can still send results even if download file failed to create if (err) { logger.error(err); } return resolve(); }); - } catch (error) { - logger.error(error); - return resolve(); - } - }); -} + }); + } -// This is a workaround till BigInt is fully supported by the standard -// See https://tc39.es/ecma262/#sec-ecmascript-language-types-bigint-type -// and https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt -// If this is not done, then a JSON.stringify(BigInt) throws -// "TypeError: Do not know how to serialize a BigInt" -/* global BigInt:writable */ -/* eslint no-extend-native: ["error", { "exceptions": ["BigInt"] }] */ -BigInt.prototype.toJSON = function() { - return this.toString(); -}; + writeCsv(cacheKey, queryResult) { + return new Promise(resolve => { + try { + const csv = parse(queryResult.rows, { fields: queryResult.fields }); + fs.writeFile(this.csvFilePath(cacheKey), csv, function(err) { + if (err) { + logger.error(err); + } + return resolve(); + }); + } catch (error) { + logger.error(error); + return resolve(); + } + }); + } -function writeJson(cacheKey, queryResult) { - return new Promise(resolve => { - try { - const json = JSON.stringify(queryResult.rows); - fs.writeFile(jsonFilePath(cacheKey), json, function(err) { - if (err) { - logger.error(err); - } + writeJson(cacheKey, queryResult) { + return new Promise(resolve => { + try { + const json = JSON.stringify(queryResult.rows); + fs.writeFile(this.jsonFilePath(cacheKey), json, function(err) { + if (err) { + logger.error(err); + } + return resolve(); + }); + } catch (error) { + logger.error(error); return resolve(); - }); - } catch (error) { - logger.error(error); - return resolve(); - } - }); + } + }); + } } -module.exports = makeResultCache; +module.exports = ResultCache; diff --git a/server/models/schemaInfo.js b/server/models/schemaInfo.js index 1ed675481..e286f2051 100644 --- a/server/models/schemaInfo.js +++ b/server/models/schemaInfo.js @@ -2,14 +2,18 @@ function getCacheKey(connectionId) { return 'schemaCache:' + connectionId; } -function makeSchemaInfo(nedb) { +class SchemaInfo { + constructor(nedb) { + this.nedb = nedb; + } + /** * Get schemaInfo for connection id * @param {string} connectionId */ - async function getSchemaInfo(connectionId) { + async getSchemaInfo(connectionId) { const cacheKey = getCacheKey(connectionId); - const doc = await nedb.cache.findOne({ cacheKey }); + const doc = await this.nedb.cache.findOne({ cacheKey }); if (!doc) { return; @@ -33,7 +37,7 @@ function makeSchemaInfo(nedb) { * @param {string} connectionId * @param {object} schemaInfo */ - async function saveSchemaInfo(connectionId, schemaInfo) { + async saveSchemaInfo(connectionId, schemaInfo) { const cacheKey = getCacheKey(connectionId); if (schemaInfo && Object.keys(schemaInfo).length) { const schema = JSON.stringify(schemaInfo); @@ -42,15 +46,11 @@ function makeSchemaInfo(nedb) { schema, modifiedDate: new Date() }; - return nedb.cache.update({ cacheKey }, doc, { + return this.nedb.cache.update({ cacheKey }, doc, { upsert: true }); } } - return { - getSchemaInfo, - saveSchemaInfo - }; } -module.exports = makeSchemaInfo; +module.exports = SchemaInfo; diff --git a/server/models/users.js b/server/models/users.js index ab859bd76..bd7fafc05 100644 --- a/server/models/users.js +++ b/server/models/users.js @@ -20,8 +20,12 @@ const schema = Joi.object({ signupDate: Joi.date().optional() }); -function makeUsers(nedb) { - async function save(data) { +class Users { + constructor(nedb) { + this.nedb = nedb; + } + + async save(data) { if (!data.email) { throw new Error('email required when saving user'); } @@ -37,26 +41,28 @@ function makeUsers(nedb) { return Promise.reject(joiResult.error); } - await nedb.users.update({ email: data.email }, joiResult.value, { + await this.nedb.users.update({ email: data.email }, joiResult.value, { upsert: true }); - return findOneByEmail(data.email); + return this.findOneByEmail(data.email); } - function findOneByEmail(email) { - return nedb.users.findOne({ email: { $regex: new RegExp(email, 'i') } }); + findOneByEmail(email) { + return this.nedb.users.findOne({ + email: { $regex: new RegExp(email, 'i') } + }); } - function findOneById(id) { - return nedb.users.findOne({ _id: id }); + findOneById(id) { + return this.nedb.users.findOne({ _id: id }); } - function findOneByPasswordResetId(passwordResetId) { - return nedb.users.findOne({ passwordResetId }); + findOneByPasswordResetId(passwordResetId) { + return this.nedb.users.findOne({ passwordResetId }); } - function findAll() { - return nedb.users + findAll() { + return this.nedb.users .cfind({}, { password: 0, passhash: 0 }) .sort({ email: 1 }) .exec(); @@ -66,24 +72,14 @@ function makeUsers(nedb) { * Returns boolean regarding whether admin registration should be open or not * @returns {Promise} administrationOpen */ - async function adminRegistrationOpen() { - const doc = await nedb.users.findOne({ role: 'admin' }); + async adminRegistrationOpen() { + const doc = await this.nedb.users.findOne({ role: 'admin' }); return !doc; } - function removeById(id) { - return nedb.users.remove({ _id: id }); + removeById(id) { + return this.nedb.users.remove({ _id: id }); } - - return { - findOneByEmail, - findOneById, - findOneByPasswordResetId, - findAll, - adminRegistrationOpen, - removeById, - save - }; } -module.exports = makeUsers; +module.exports = Users; diff --git a/server/routes/app.js b/server/routes/app.js index fef8958e7..f858797d4 100644 --- a/server/routes/app.js +++ b/server/routes/app.js @@ -1,15 +1,13 @@ const router = require('express').Router(); const packageJson = require('../package.json'); -const getModels = require('../models'); const sendError = require('../lib/sendError'); // NOTE: this route needs a wildcard because it is fetched as a relative url // from the front-end. The static SPA does not know if sqlpad is mounted at // the root of a domain or if there is a base-url provided in the config router.get('*/api/app', async (req, res) => { - const { config, nedb } = req; + const { config, models } = req; try { - const models = getModels(nedb); const adminRegistrationOpen = await models.users.adminRegistrationOpen(); const currentUser = req.isAuthenticated() && req.user diff --git a/server/routes/connection-accesses.js b/server/routes/connection-accesses.js index d8324af4c..a10b9edd0 100644 --- a/server/routes/connection-accesses.js +++ b/server/routes/connection-accesses.js @@ -1,18 +1,18 @@ +require('../typedefs'); const router = require('express').Router(); const consts = require('../lib/consts'); -const getModels = require('../models'); const mustBeAdmin = require('../middleware/must-be-admin.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const sendError = require('../lib/sendError'); -router.get('/api/connection-accesses', mustBeAuthenticated, async function( - req, - res -) { +/** + * @param {Req} req + * @param {*} res + */ +async function listConnectionAccesses(req, res) { + const { models } = req; try { - const { query, nedb } = req; - const models = getModels(nedb); - const { includeInactives } = query; + const { includeInactives } = req.query; let connectionAccesses; if (includeInactives) { connectionAccesses = await models.connectionAccesses.findAll(); @@ -23,14 +23,21 @@ router.get('/api/connection-accesses', mustBeAuthenticated, async function( } catch (error) { sendError(res, error, 'Problem getting connection accesses'); } -}); +} -router.get('/api/connection-accesses/:_id', mustBeAuthenticated, async function( - req, - res -) { +router.get( + '/api/connection-accesses', + mustBeAuthenticated, + listConnectionAccesses +); + +/** + * @param {Req} req + * @param {*} res + */ +async function getConnectionAccess(req, res) { + const { models } = req; try { - const models = getModels(req.nedb); const connectionAccess = await models.connectionAccesses.findOneById( req.params._id ); @@ -41,11 +48,20 @@ router.get('/api/connection-accesses/:_id', mustBeAuthenticated, async function( } catch (error) { sendError(res, error, 'Problem querying connection access'); } -}); +} + +router.get( + '/api/connection-accesses/:_id', + mustBeAuthenticated, + getConnectionAccess +); -// crete active connection access -router.post('/api/connection-accesses', mustBeAdmin, async function(req, res) { - const models = getModels(req.nedb); +/** + * @param {Req} req + * @param {*} res + */ +async function createConnectionAccess(req, res) { + const { models } = req; try { let user = { id: consts.EVERYONE_ID, @@ -97,13 +113,16 @@ router.post('/api/connection-accesses', mustBeAdmin, async function(req, res) { sendError(res, error, 'Problem saving connection'); } } -}); +} -router.put('/api/connection-accesses/:_id/expire', mustBeAdmin, async function( - req, - res -) { - const models = getModels(req.nedb); +router.post('/api/connection-accesses', mustBeAdmin, createConnectionAccess); + +/** + * @param {Req} req + * @param {*} res + */ +async function updateConnectionAccess(req, res) { + const { models } = req; try { const connectionAccess = await models.connectionAccesses.expire( req.params._id @@ -112,6 +131,12 @@ router.put('/api/connection-accesses/:_id/expire', mustBeAdmin, async function( } catch (error) { sendError(res, error, 'Problem expiring connection accesses'); } -}); +} + +router.put( + '/api/connection-accesses/:_id/expire', + mustBeAdmin, + updateConnectionAccess +); module.exports = router; diff --git a/server/routes/connections.js b/server/routes/connections.js index 924def517..efc0157fd 100644 --- a/server/routes/connections.js +++ b/server/routes/connections.js @@ -1,5 +1,4 @@ const router = require('express').Router(); -const getModels = require('../models'); const mustBeAdmin = require('../middleware/must-be-admin.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const sendError = require('../lib/sendError'); @@ -10,8 +9,8 @@ function removePassword(connection) { } router.get('/api/connections', mustBeAuthenticated, async function(req, res) { + const { models } = req; try { - const models = getModels(req.nedb); const docs = await models.connections.findAll(); return res.json({ connections: docs.map(removePassword) @@ -25,8 +24,8 @@ router.get('/api/connections/:_id', mustBeAuthenticated, async function( req, res ) { + const { models } = req; try { - const models = getModels(req.nedb); const connection = await models.connections.findOneById(req.params._id); if (!connection) { return sendError(res, null, 'Connection not found'); @@ -40,8 +39,8 @@ router.get('/api/connections/:_id', mustBeAuthenticated, async function( }); router.post('/api/connections', mustBeAdmin, async function(req, res) { + const { models } = req; try { - const models = getModels(req.nedb); const newConnection = await models.connections.save(req.body); return res.json({ connection: removePassword(newConnection) @@ -52,8 +51,8 @@ router.post('/api/connections', mustBeAdmin, async function(req, res) { }); router.put('/api/connections/:_id', mustBeAdmin, async function(req, res) { + const { models } = req; try { - const models = getModels(req.nedb); let connection = await models.connections.findOneById(req.params._id); if (!connection) { return sendError(res, null, 'Connection not found'); @@ -69,8 +68,8 @@ router.put('/api/connections/:_id', mustBeAdmin, async function(req, res) { }); router.delete('/api/connections/:_id', mustBeAdmin, async function(req, res) { + const { models } = req; try { - const models = getModels(req.nedb); await models.connections.removeOneById(req.params._id); return res.json({}); } catch (error) { diff --git a/server/routes/download-results.js b/server/routes/download-results.js index e12d4afe4..4fa5097a0 100644 --- a/server/routes/download-results.js +++ b/server/routes/download-results.js @@ -1,11 +1,10 @@ const fs = require('fs'); const router = require('express').Router(); -const getModels = require('../models'); const logger = require('../lib/logger'); router.get('/download-results/:cacheKey.csv', async function(req, res, next) { + const { models } = req; const { cacheKey } = req.params; - const models = getModels(req.nedb); try { if (req.config.get('allowCsvDownload')) { const cache = await models.resultCache.findOneByCacheKey(cacheKey); @@ -30,8 +29,8 @@ router.get('/download-results/:cacheKey.csv', async function(req, res, next) { }); router.get('/download-results/:cacheKey.xlsx', async function(req, res, next) { + const { models } = req; const { cacheKey } = req.params; - const models = getModels(req.nedb); try { if (req.config.get('allowCsvDownload')) { const cache = await models.resultCache.findOneByCacheKey(cacheKey); @@ -59,8 +58,8 @@ router.get('/download-results/:cacheKey.xlsx', async function(req, res, next) { }); router.get('/download-results/:cacheKey.json', async function(req, res, next) { + const { models } = req; const { cacheKey } = req.params; - const models = getModels(req.nedb); try { if (req.config.get('allowCsvDownload')) { const cache = await models.resultCache.findOneByCacheKey(cacheKey); diff --git a/server/routes/forgot-password.js b/server/routes/forgot-password.js index 584b0ce30..662134503 100644 --- a/server/routes/forgot-password.js +++ b/server/routes/forgot-password.js @@ -1,12 +1,11 @@ const router = require('express').Router(); const uuid = require('uuid'); -const getModels = require('../models'); const makeEmail = require('../lib/email'); const sendError = require('../lib/sendError'); const logger = require('../lib/logger'); router.post('/api/forgot-password', async function(req, res) { - const models = getModels(req.nedb); + const { models } = req; if (!req.body.email) { return sendError(res, null, 'Email address must be provided'); } diff --git a/server/routes/local-auth.js b/server/routes/local-auth.js index 5f9735c2f..032f7a79f 100644 --- a/server/routes/local-auth.js +++ b/server/routes/local-auth.js @@ -3,14 +3,13 @@ const PassportLocalStrategy = require('passport-local').Strategy; const BasicStrategy = require('passport-http').BasicStrategy; const router = require('express').Router(); const checkWhitelist = require('../lib/check-whitelist'); -const getModels = require('../models'); const sendError = require('../lib/sendError'); const logger = require('../lib/logger'); const passhash = require('../lib/passhash.js'); async function handleSignup(req, res, next) { + const { models } = req; try { - const models = getModels(req.nedb); const whitelistedDomains = req.config.get('whitelistedDomains'); if (req.body.password !== req.body.passwordConfirmation) { @@ -81,7 +80,7 @@ function makeLocalAuth(config) { done ) { try { - const models = getModels(req.nedb); + const { models } = req; const user = await models.users.findOneByEmail(email); if (!user) { return done(null, false, { message: 'wrong email or password' }); @@ -115,7 +114,7 @@ function makeLocalAuth(config) { }, async function(req, username, password, callback) { try { - const models = getModels(req.nedb); + const { models } = req; const user = await models.users.findOneByEmail(username); if (!user) { return callback(null, false); diff --git a/server/routes/oauth.js b/server/routes/oauth.js index 3c4aab434..60ab112bd 100644 --- a/server/routes/oauth.js +++ b/server/routes/oauth.js @@ -3,7 +3,6 @@ const PassportGoogleStrategy = require('passport-google-oauth20').Strategy; const router = require('express').Router(); const logger = require('../lib/logger'); const checkWhitelist = require('../lib/check-whitelist.js'); -const getModels = require('../models'); /** * Adds Google auth strategy and adds Google auth routes if Google auth is configured @@ -22,6 +21,7 @@ function makeGoogleAuth(config) { profile, done ) { + const { models } = req; const email = profile && profile._json && profile._json.email; if (!email) { @@ -30,8 +30,6 @@ function makeGoogleAuth(config) { }); } - const models = getModels(req.nedb); - try { let [openAdminRegistration, user] = await Promise.all([ models.users.adminRegistrationOpen(), diff --git a/server/routes/password-reset.js b/server/routes/password-reset.js index 33273728f..8e97c6e8f 100644 --- a/server/routes/password-reset.js +++ b/server/routes/password-reset.js @@ -1,11 +1,10 @@ const router = require('express').Router(); -const getModels = require('../models'); const sendError = require('../lib/sendError'); // This route used to set new password given a passwordResetId router.post('/api/password-reset/:passwordResetId', async function(req, res) { try { - const models = getModels(req.nedb); + const { models } = req; const user = await models.users.findOneByPasswordResetId( req.params.passwordResetId ); diff --git a/server/routes/queries.js b/server/routes/queries.js index 0f6cdab2c..729194a98 100644 --- a/server/routes/queries.js +++ b/server/routes/queries.js @@ -1,5 +1,4 @@ const router = require('express').Router(); -const getModels = require('../models'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const mustBeAuthenticatedOrChartLink = require('../middleware/must-be-authenticated-or-chart-link-noauth.js'); const sendError = require('../lib/sendError'); @@ -26,8 +25,8 @@ router.delete('/api/queries/:_id', mustBeAuthenticated, async function( req, res ) { + const { models } = req; try { - const models = getModels(req.nedb); await models.queries.removeById(req.params._id); return res.json({}); } catch (error) { @@ -36,8 +35,8 @@ router.delete('/api/queries/:_id', mustBeAuthenticated, async function( }); router.get('/api/queries', mustBeAuthenticated, async function(req, res) { + const { models } = req; try { - const models = getModels(req.nedb); const queries = await models.queries.findAll(); return res.json({ queries }); } catch (error) { @@ -49,8 +48,8 @@ router.get('/api/queries/:_id', mustBeAuthenticatedOrChartLink, async function( req, res ) { + const { models } = req; try { - const models = getModels(req.nedb); const query = await models.queries.findOneById(req.params._id); if (!query) { return res.json({ @@ -64,6 +63,7 @@ router.get('/api/queries/:_id', mustBeAuthenticatedOrChartLink, async function( }); router.post('/api/queries', mustBeAuthenticated, async function(req, res) { + const { models } = req; const { name, tags, connectionId, queryText, chartConfiguration } = req.body; const { email } = req.user; @@ -78,7 +78,6 @@ router.post('/api/queries', mustBeAuthenticated, async function(req, res) { }; try { - const models = getModels(req.nedb); const newQuery = await models.queries.save(query); // This is async, but save operation doesn't care about when/if finished pushQueryToSlack(req.config, newQuery); @@ -91,8 +90,8 @@ router.post('/api/queries', mustBeAuthenticated, async function(req, res) { }); router.put('/api/queries/:_id', mustBeAuthenticated, async function(req, res) { + const { models } = req; try { - const models = getModels(req.nedb); const query = await models.queries.findOneById(req.params._id); if (!query) { return sendError(res, null, 'Query not found'); diff --git a/server/routes/query-history.js b/server/routes/query-history.js index 16f12bd21..97bdab89c 100644 --- a/server/routes/query-history.js +++ b/server/routes/query-history.js @@ -1,15 +1,13 @@ const router = require('express').Router(); const uuid = require('uuid'); const getMeta = require('../lib/getMeta'); -const getModels = require('../models'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const urlFilterToNeDbFilter = require('../lib/urlFilterToNeDbFilter'); const sendError = require('../lib/sendError'); router.get('/api/query-history', mustBeAuthenticated, async function(req, res) { + const { models } = req; try { - const models = getModels(req.nedb); - const queryHistory = { id: uuid.v4(), cacheKey: null, @@ -52,8 +50,8 @@ router.get('/api/query-history/:_id', mustBeAuthenticated, async function( req, res ) { + const { models } = req; try { - const models = getModels(req.nedb); const queryHistoryItem = await models.queryHistory.findOneById( req.params._id ); diff --git a/server/routes/query-result.js b/server/routes/query-result.js index a5d35fee9..b0ae003b5 100644 --- a/server/routes/query-result.js +++ b/server/routes/query-result.js @@ -1,6 +1,5 @@ const router = require('express').Router(); const { runQuery } = require('../drivers/index'); -const getModels = require('../models'); const mustHaveConnectionAccess = require('../middleware/must-have-connection-access.js'); const mustHaveConnectionAccessOrChartLink = require('../middleware/must-have-connection-access-or-chart-link-noauth'); const sendError = require('../lib/sendError'); @@ -11,8 +10,8 @@ router.get( '/api/query-result/:_queryId', mustHaveConnectionAccessOrChartLink, async function(req, res) { + const { models } = req; try { - const models = getModels(req.nedb); const query = await models.queries.findOneById(req.params._queryId); if (!query) { return sendError(res, null, 'Query not found (save query first)'); @@ -62,7 +61,7 @@ router.post('/api/query-result', mustHaveConnectionAccess, async function( }); async function getQueryResult(req, data) { - const models = getModels(req.nedb); + const { models } = req; const { connectionId, cacheKey, queryId, queryName, queryText, user } = data; const connection = await models.connections.findOneById(connectionId); diff --git a/server/routes/saml.js b/server/routes/saml.js index 0389f37a1..0af742972 100644 --- a/server/routes/saml.js +++ b/server/routes/saml.js @@ -2,7 +2,6 @@ const passport = require('passport'); const SamlStrategy = require('passport-saml').Strategy; const router = require('express').Router(); const logger = require('../lib/logger'); -const getModels = require('../models'); /** * Adds passport SAML strategy and SAML auth routes if SAML is configured @@ -42,7 +41,7 @@ function makeSamlAuth(config) { p[ 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress' ]; - const models = getModels(req.nedb); + const { models } = req; const user = await models.users.findOneByEmail(email); logger.info('User logged in via SAML %s', email); if (!user) { diff --git a/server/routes/schema-info.js b/server/routes/schema-info.js index b478e72e6..c3600f530 100644 --- a/server/routes/schema-info.js +++ b/server/routes/schema-info.js @@ -1,5 +1,4 @@ const router = require('express').Router(); -const getModels = require('../models'); const driver = require('../drivers'); const mustHaveConnectionAccess = require('../middleware/must-have-connection-access.js'); const sendError = require('../lib/sendError'); @@ -8,7 +7,7 @@ router.get( '/api/schema-info/:connectionId', mustHaveConnectionAccess, async function(req, res) { - const models = getModels(req.nedb); + const { models } = req; const { connectionId } = req.params; const reload = req.query.reload === 'true'; diff --git a/server/routes/tags.js b/server/routes/tags.js index 98584d226..793a6d45e 100644 --- a/server/routes/tags.js +++ b/server/routes/tags.js @@ -1,12 +1,11 @@ const _ = require('lodash'); const router = require('express').Router(); -const getModels = require('../models'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const sendError = require('../lib/sendError'); router.get('/api/tags', mustBeAuthenticated, async function(req, res) { + const { models } = req; try { - const models = getModels(req.nedb); const queries = await models.queries.findAll(); const tags = _.uniq(_.flatten(_.map(queries, 'tags'))) .sort() diff --git a/server/routes/users.js b/server/routes/users.js index 662bb8c7b..c63c79695 100644 --- a/server/routes/users.js +++ b/server/routes/users.js @@ -1,5 +1,4 @@ const router = require('express').Router(); -const getModels = require('../models'); const makeEmail = require('../lib/email'); const mustBeAdmin = require('../middleware/must-be-admin.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); @@ -7,8 +6,8 @@ const sendError = require('../lib/sendError'); const logger = require('../lib/logger'); router.get('/api/users', mustBeAuthenticated, async function(req, res) { + const { models } = req; try { - const models = getModels(req.nedb); const users = await models.users.findAll(); return res.json({ users }); } catch (error) { @@ -18,8 +17,8 @@ router.get('/api/users', mustBeAuthenticated, async function(req, res) { // create/whitelist/invite user router.post('/api/users', mustBeAdmin, async function(req, res) { + const { models } = req; try { - const models = getModels(req.nedb); let user = await models.users.findOneByEmail(req.body.email); if (user) { return sendError(res, null, 'User already exists'); @@ -41,12 +40,11 @@ router.post('/api/users', mustBeAdmin, async function(req, res) { }); router.put('/api/users/:_id', mustBeAdmin, async function(req, res) { - const { params, body, user } = req; + const { params, body, user, models } = req; if (user._id === params._id && user.role === 'admin' && body.role != null) { return sendError(res, null, "You can't unadmin yourself"); } try { - const models = getModels(req.nedb); const updateUser = await models.users.findOneById(params._id); if (!updateUser) { return sendError(res, null, 'user not found'); @@ -67,11 +65,11 @@ router.put('/api/users/:_id', mustBeAdmin, async function(req, res) { }); router.delete('/api/users/:_id', mustBeAdmin, async function(req, res) { + const { models } = req; if (req.user._id === req.params._id) { return sendError(res, null, "You can't delete yourself"); } try { - const models = getModels(req.nedb); await models.users.removeById(req.params._id); return res.json({}); } catch (error) { diff --git a/server/typedefs.js b/server/typedefs.js new file mode 100644 index 000000000..61cc1f0e8 --- /dev/null +++ b/server/typedefs.js @@ -0,0 +1,17 @@ +/** + * A collection of data access objects + * @typedef {Object} Models + * @property {import('./models/connectionAccesses')} connectionAccesses - connection accesses DAO + * @property {import('./models/connections')} connections - connections DAO + * @property {import('./models/queries')} queries - queries DAO + * @property {import('./models/queryHistory')} queryHistory - queryHistory DAO + * @property {import('./models/resultCache')} resultCache - resultCache DAO + * @property {import('./models/schemaInfo')} schemaInfo - schemaInfo DAO + * @property {import('./models/users')} users - users DAO + */ + +/** + * The expressjs Request object plus decorations + * @typedef {Object} Req + * @property {Models} models - Collection of data access objects + */ From 04f757f92738b70b051546df795a55aa21c13ccb Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 20 Feb 2020 15:31:17 -0600 Subject: [PATCH 014/658] Add config to model classes (#543) * Pass config to all models * Initialize models with nedb * Use Models class * Remove unnecessary getNedb calls * Rename make/getNedb to make/getDb --- server/app.js | 9 ++++--- server/lib/db.js | 27 +++++++++++---------- server/models/connectionAccesses.js | 3 ++- server/models/connections.js | 37 +++++++++++++++-------------- server/models/index.js | 24 ++++++++++--------- server/models/queries.js | 3 ++- server/models/queryHistory.js | 9 +++---- server/models/resultCache.js | 13 +++++----- server/models/schemaInfo.js | 3 ++- server/models/users.js | 3 ++- server/server.js | 12 +++++----- server/test/api/password-reset.js | 6 ++--- server/test/models/connections.js | 8 +++---- server/test/utils.js | 20 ++++++---------- server/typedefs.js | 14 +---------- 15 files changed, 88 insertions(+), 103 deletions(-) diff --git a/server/app.js b/server/app.js index 58864b0cc..0de4b94ef 100644 --- a/server/app.js +++ b/server/app.js @@ -5,18 +5,17 @@ const helmet = require('helmet'); const session = require('express-session'); const FileStore = require('session-file-store')(session); const logger = require('./lib/logger'); -const getModels = require('./models'); /** * Create an express app using config * @param {object} config */ -function makeApp(config, nedb) { +function makeApp(config, models) { if (typeof config.get !== 'function') { throw new Error('config is required to create app'); } - if (!nedb) { - throw new Error('nedb is required to create app'); + if (!models) { + throw new Error('models is required to create app'); } const baseUrl = config.get('baseUrl'); @@ -64,7 +63,7 @@ function makeApp(config, nedb) { // Decorate req with app things app.use(function(req, res, next) { req.config = config; - req.models = getModels(nedb); + req.models = models; next(); }); diff --git a/server/lib/db.js b/server/lib/db.js index 76984fb1c..7f52500f9 100644 --- a/server/lib/db.js +++ b/server/lib/db.js @@ -4,7 +4,7 @@ const mkdirp = require('mkdirp'); const logger = require('./logger'); const ensureAdmin = require('./ensureAdmin'); const consts = require('./consts'); -const getModels = require('../models'); +const Models = require('../models'); const TEN_MINUTES = 1000 * 60 * 10; const FIVE_MINUTES = 1000 * 60 * 5; @@ -22,13 +22,14 @@ let instances = {}; * Returns promise of nedb instance * @param {string} [instanceAlias] */ -function getNedb(instanceAlias = 'default') { - const nedb = instances[instanceAlias]; - if (!nedb) { - throw new Error('nedb instance must be created first'); +async function getDb(instanceAlias = 'default') { + const instancePromise = instances[instanceAlias]; + if (!instancePromise) { + throw new Error('db instance must be created first'); } // nedb will already be a promise -- this just makes it explicit - return Promise.resolve(nedb); + const { nedb, models } = await instancePromise; + return { nedb, models }; } /** @@ -111,7 +112,7 @@ async function initNedb(config) { }); // Schedule cleanups - const models = getModels(nedb); + const models = new Models(nedb, config); setInterval(async () => { await models.resultCache.removeExpired(); await models.queryHistory.removeOldEntries(); @@ -120,7 +121,7 @@ async function initNedb(config) { // Ensure admin is set as specified if provided await ensureAdmin(nedb, admin, adminPassword); - return nedb; + return { nedb, models }; } /** @@ -130,17 +131,17 @@ async function initNedb(config) { * @param {object} config * @param {string} instanceAlias */ -function makeNedb(config, instanceAlias = 'default') { - // makeNedb should only be called once for a given alias +function makeDb(config, instanceAlias = 'default') { + // makeDb should only be called once for a given alias if (instances[instanceAlias]) { throw new Error(`db instance ${instanceAlias} already made`); } const dbPromise = initNedb(config); instances[instanceAlias] = dbPromise; - return dbPromise; + return true; } module.exports = { - makeNedb, - getNedb + makeDb, + getDb }; diff --git a/server/models/connectionAccesses.js b/server/models/connectionAccesses.js index 825a2a33b..44efd360e 100644 --- a/server/models/connectionAccesses.js +++ b/server/models/connectionAccesses.js @@ -18,8 +18,9 @@ const schema = Joi.object({ }); class ConnectionAccesses { - constructor(nedb) { + constructor(nedb, config) { this.nedb = nedb; + this.config = config; } async save(data) { diff --git a/server/models/connections.js b/server/models/connections.js index 3dfd35d49..906ca8aea 100644 --- a/server/models/connections.js +++ b/server/models/connections.js @@ -1,32 +1,33 @@ const _ = require('lodash'); const drivers = require('../drivers'); const makeCipher = require('../lib/makeCipher'); -const config = require('../lib/config'); // TODO: during app init upsert these into db? const { getConnectionsFromConfig } = require('../lib/connectionsFromConfig'); -const { cipher, decipher } = makeCipher(config.get('passphrase')); - -function decipherConnection(connection) { - if (connection.username) { - connection.username = decipher(connection.username); - } - if (connection.password) { - connection.password = decipher(connection.password); - } - return connection; -} - class Connections { - constructor(nedb) { + constructor(nedb, config) { this.nedb = nedb; + this.config = config; + const { cipher, decipher } = makeCipher(config.get('passphrase')); + this.cipher = cipher; + this.decipher = decipher; + } + + decipherConnection(connection) { + if (connection.username) { + connection.username = this.decipher(connection.username); + } + if (connection.password) { + connection.password = this.decipher(connection.password); + } + return connection; } async findAll() { let connectionsFromDb = await this.nedb.connections.find({}); connectionsFromDb = connectionsFromDb.map(conn => { conn.editable = true; - return decipherConnection(conn); + return this.decipherConnection(conn); }); const allConnections = connectionsFromDb.concat(getConnectionsFromConfig()); @@ -37,7 +38,7 @@ class Connections { const connection = await this.nedb.connections.findOne({ _id: id }); if (connection) { connection.editable = true; - return decipherConnection(connection); + return this.decipherConnection(connection); } // If connection was not found in db try env @@ -57,8 +58,8 @@ class Connections { throw new Error('connections.save() requires a connection'); } - connection.username = cipher(connection.username || ''); - connection.password = cipher(connection.password || ''); + connection.username = this.cipher(connection.username || ''); + connection.password = this.cipher(connection.password || ''); if (!connection.createdDate) { connection.createdDate = new Date(); diff --git a/server/models/index.js b/server/models/index.js index b3cd2d54d..5a8d8d9fe 100644 --- a/server/models/index.js +++ b/server/models/index.js @@ -6,14 +6,16 @@ const Queries = require('./queries'); const Connections = require('./connections'); const ConnectionAccesses = require('./connectionAccesses'); -module.exports = function(nedb) { - return { - users: new Users(nedb), - schemaInfo: new SchemaInfo(nedb), - resultCache: new ResultCache(nedb), - queryHistory: new QueryHistory(nedb), - queries: new Queries(nedb), - connections: new Connections(nedb), - connectionAccesses: new ConnectionAccesses(nedb) - }; -}; +class Models { + constructor(nedb, config) { + this.users = new Users(nedb, config); + this.schemaInfo = new SchemaInfo(nedb, config); + this.resultCache = new ResultCache(nedb, config); + this.queryHistory = new QueryHistory(nedb, config); + this.queries = new Queries(nedb, config); + this.connections = new Connections(nedb, config); + this.connectionAccesses = new ConnectionAccesses(nedb, config); + } +} + +module.exports = Models; diff --git a/server/models/queries.js b/server/models/queries.js index 9d4ed9fdd..1a6823d6f 100644 --- a/server/models/queries.js +++ b/server/models/queries.js @@ -44,8 +44,9 @@ const schema = Joi.object({ }); class Queries { - constructor(nedb) { + constructor(nedb, config) { this.nedb = nedb; + this.config = config; } findOneById(id) { diff --git a/server/models/queryHistory.js b/server/models/queryHistory.js index 7924facfe..61bb89545 100644 --- a/server/models/queryHistory.js +++ b/server/models/queryHistory.js @@ -1,5 +1,4 @@ const Joi = require('@hapi/joi'); -const config = require('../lib/config'); const schema = Joi.object({ _id: Joi.string().optional(), // generated by nedb @@ -19,8 +18,9 @@ const schema = Joi.object({ }); class QueryHistory { - constructor(nedb) { + constructor(nedb, config) { this.nedb = nedb; + this.config = config; } findOneById(id) { @@ -38,12 +38,13 @@ class QueryHistory { return this.nedb.queryHistory .cfind(filter || {}, {}) .sort({ startTime: -1 }) - .limit(config.get('queryHistoryResultMaxRows')) + .limit(this.config.get('queryHistoryResultMaxRows')) .exec(); } async removeOldEntries() { - const days = config.get('queryHistoryRetentionTimeInDays') * 86400 * 1000; + const days = + this.config.get('queryHistoryRetentionTimeInDays') * 86400 * 1000; const retentionPeriodStartTime = new Date(new Date().getTime() - days); return this.nedb.queryHistory.remove( diff --git a/server/models/resultCache.js b/server/models/resultCache.js index 6e6783cfa..767da9406 100644 --- a/server/models/resultCache.js +++ b/server/models/resultCache.js @@ -1,4 +1,3 @@ -/* eslint-disable class-methods-use-this */ const fs = require('fs'); const path = require('path'); const moment = require('moment'); @@ -6,8 +5,6 @@ const sanitize = require('sanitize-filename'); const logger = require('../lib/logger'); const xlsx = require('node-xlsx'); const { parse } = require('json2csv'); -const config = require('../lib/config'); -const dbPath = config.get('dbPath'); // This is a workaround till BigInt is fully supported by the standard // See https://tc39.es/ecma262/#sec-ecmascript-language-types-bigint-type @@ -21,20 +18,22 @@ BigInt.prototype.toJSON = function() { }; class ResultCache { - constructor(nedb) { + constructor(nedb, config) { this.nedb = nedb; + this.config = config; + this.dbPath = config.get('dbPath'); } xlsxFilePath(cacheKey) { - return path.join(dbPath, '/cache/', cacheKey + '.xlsx'); + return path.join(this.dbPath, '/cache/', cacheKey + '.xlsx'); } csvFilePath(cacheKey) { - return path.join(dbPath, '/cache/', cacheKey + '.csv'); + return path.join(this.dbPath, '/cache/', cacheKey + '.csv'); } jsonFilePath(cacheKey) { - return path.join(dbPath, '/cache/', cacheKey + '.json'); + return path.join(this.dbPath, '/cache/', cacheKey + '.json'); } async findOneByCacheKey(cacheKey) { diff --git a/server/models/schemaInfo.js b/server/models/schemaInfo.js index e286f2051..13f96daac 100644 --- a/server/models/schemaInfo.js +++ b/server/models/schemaInfo.js @@ -3,8 +3,9 @@ function getCacheKey(connectionId) { } class SchemaInfo { - constructor(nedb) { + constructor(nedb, config) { this.nedb = nedb; + this.config = config; } /** diff --git a/server/models/users.js b/server/models/users.js index bd7fafc05..cda322134 100644 --- a/server/models/users.js +++ b/server/models/users.js @@ -21,8 +21,9 @@ const schema = Joi.object({ }); class Users { - constructor(nedb) { + constructor(nedb, config) { this.nedb = nedb; + this.config = config; } async save(data) { diff --git a/server/server.js b/server/server.js index f9da527f2..cd5f1e0c0 100755 --- a/server/server.js +++ b/server/server.js @@ -11,9 +11,9 @@ require('./lib/cli-flow.js'); const logger = require('./lib/logger'); const config = require('./lib/config'); -const { makeNedb } = require('./lib/db'); +const { makeDb, getDb } = require('./lib/db'); -const dbPromise = makeNedb(config); +makeDb(config); const configValidations = config.getValidations(); configValidations.warnings.map(warning => logger.warn(warning)); @@ -70,8 +70,8 @@ function detectPortOrSystemd(port) { ============================================================================= */ let server; -async function startServer(nedb) { - const app = makeApp(config, nedb); +async function startServer(models) { + const app = makeApp(config, models); // determine if key pair exists for certs if (keyPath && certPath) { @@ -124,8 +124,8 @@ async function startServer(nedb) { server.setTimeout(timeoutSeconds * 1000); } -dbPromise - .then(nedb => startServer(nedb)) +getDb() + .then(db => startServer(db.models)) .catch(error => { logger.error(error, 'Error starting SQLPad'); process.exit(1); diff --git a/server/test/api/password-reset.js b/server/test/api/password-reset.js index 9c2e95214..f25471bf5 100644 --- a/server/test/api/password-reset.js +++ b/server/test/api/password-reset.js @@ -1,12 +1,10 @@ const assert = require('assert'); const utils = require('../utils'); const uuid = require('uuid'); -const { getNedb } = require('../../lib/db'); -const getModels = require('../../models'); +const { getDb } = require('../../lib/db'); async function setReset() { - const nedb = await getNedb(); - const models = getModels(nedb); + const { models } = await getDb(); const user = await models.users.findOneByEmail('admin@test.com'); const passwordResetId = uuid.v4(); user.passwordResetId = passwordResetId; diff --git a/server/test/models/connections.js b/server/test/models/connections.js index ec47afeea..a7edc11e3 100644 --- a/server/test/models/connections.js +++ b/server/test/models/connections.js @@ -1,15 +1,13 @@ const assert = require('assert'); -const { getNedb } = require('../../lib/db'); +const { getDb } = require('../../lib/db'); const { getConnectionsFromConfig } = require('../../lib/connectionsFromConfig'); -const getModels = require('../../models'); describe('getConnectionsFromConfig', function() { - let nedb; let models; before(async function() { - nedb = await getNedb(); - models = getModels(nedb); + const db = await getDb(); + models = db.models; }); it('handles empty object', function() { diff --git a/server/test/utils.js b/server/test/utils.js index c9cdf17d7..30b62a3c1 100644 --- a/server/test/utils.js +++ b/server/test/utils.js @@ -1,12 +1,11 @@ const assert = require('assert'); const request = require('supertest'); -const getModels = require('../models'); const consts = require('../lib/consts'); const config = require('../lib/config'); -const { makeNedb } = require('../lib/db'); +const { makeDb, getDb } = require('../lib/db'); const makeApp = require('../app'); -const dbPromise = makeNedb(config); +makeDb(config); let app; const users = { @@ -29,7 +28,7 @@ function expectKeys(data, expectedKeys) { } async function reset() { - const nedb = await dbPromise; + const { nedb } = await getDb(); return Promise.all([ nedb.users.remove({}, { multi: true }), nedb.queries.remove({}, { multi: true }), @@ -51,8 +50,7 @@ async function reset() { async function resetWithUser() { await reset(); - const nedb = await dbPromise; - const models = getModels(nedb); + const { models } = await getDb(); const saves = Object.keys(users).map(key => { return models.users.save(users[key]); }); @@ -69,7 +67,6 @@ function addAuth(req, role) { } async function del(role, url, statusCode = 200) { - await dbPromise; let req = request(app).delete(url); req = addAuth(req, role); const response = await req.expect(statusCode); @@ -77,7 +74,6 @@ async function del(role, url, statusCode = 200) { } async function get(role, url, statusCode = 200) { - await dbPromise; let req = request(app).get(url); req = addAuth(req, role); const response = await req.expect(statusCode); @@ -85,7 +81,6 @@ async function get(role, url, statusCode = 200) { } async function post(role, url, body, statusCode = 200) { - await dbPromise; let req = request(app).post(url); req = addAuth(req, role); const response = await req.send(body).expect(statusCode); @@ -93,7 +88,6 @@ async function post(role, url, body, statusCode = 200) { } async function put(role, url, body, statusCode = 200) { - await dbPromise; let req = request(app).put(url); req = addAuth(req, role); const response = await req.send(body).expect(statusCode); @@ -101,11 +95,11 @@ async function put(role, url, body, statusCode = 200) { } before(async function() { - const nedb = await dbPromise; - app = makeApp(config, nedb); + const { models } = await getDb(); + app = makeApp(config, models); assert.throws(() => { - makeNedb(config); + makeDb(config); }, 'ensure nedb can be made once'); return resetWithUser(); diff --git a/server/typedefs.js b/server/typedefs.js index 61cc1f0e8..f3dcab335 100644 --- a/server/typedefs.js +++ b/server/typedefs.js @@ -1,17 +1,5 @@ -/** - * A collection of data access objects - * @typedef {Object} Models - * @property {import('./models/connectionAccesses')} connectionAccesses - connection accesses DAO - * @property {import('./models/connections')} connections - connections DAO - * @property {import('./models/queries')} queries - queries DAO - * @property {import('./models/queryHistory')} queryHistory - queryHistory DAO - * @property {import('./models/resultCache')} resultCache - resultCache DAO - * @property {import('./models/schemaInfo')} schemaInfo - schemaInfo DAO - * @property {import('./models/users')} users - users DAO - */ - /** * The expressjs Request object plus decorations * @typedef {Object} Req - * @property {Models} models - Collection of data access objects + * @property {import('./models')} models - Collection of data access objects */ From a610b352772dc061d9dd7f159d334bafc5bd8b0c Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 20 Feb 2020 17:39:38 -0600 Subject: [PATCH 015/658] Allow referencing user data in connections via templates (#544) --- server/drivers/index.js | 44 +++++++++++++++++++++++++++----- server/models/users.js | 8 +++++- server/routes/schema-info.js | 4 +-- server/routes/test-connection.js | 3 +-- server/test/drivers.js | 29 +++++++++++++++++++++ 5 files changed, 77 insertions(+), 11 deletions(-) diff --git a/server/drivers/index.js b/server/drivers/index.js index 147758c4b..1544c9382 100644 --- a/server/drivers/index.js +++ b/server/drivers/index.js @@ -1,4 +1,5 @@ const uuid = require('uuid'); +const _ = require('lodash'); const config = require('../lib/config'); const utils = require('./utils'); const getMeta = require('../lib/getMeta'); @@ -35,6 +36,30 @@ function validateArray(path, driver, arrayName) { } } +/** + * Iterates over connection object, replacing any template strings with values from user + * This allows dynamic values inserted based on logged in user + * This uses a mustache-like syntax, using double mustaches. + * User variables can be referenced in connection strings using dot notation + * Example: {{user.someKey}} and {{user.data.someKey}} + * @param {object} connection + * @param {object} user + */ +function renderConnection(connection, user) { + const replaced = {}; + Object.keys(connection).forEach(key => { + const value = connection[key]; + if (typeof value === 'string') { + _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; + const compiled = _.template(value); + replaced[key] = compiled({ user }); + } else { + replaced[key] = value; + } + }); + return replaced; +} + /** * Require driver implementation for provided path * and validate that it meets implementation spec as possible @@ -127,7 +152,9 @@ function runQuery(query, connection, user) { rows: [] }; - return driver.runQuery(query, connection).then(results => { + const renderedConnection = renderConnection(connection, user); + + return driver.runQuery(query, renderedConnection).then(results => { const { rows, incomplete } = results; if (!Array.isArray(rows)) { throw new Error(`${connection.driver}.runQuery() must return rows array`); @@ -140,7 +167,7 @@ function runQuery(query, connection, user) { queryResult.meta = getMeta(rows); queryResult.fields = Object.keys(queryResult.meta); - const connectionName = connection.name; + const connectionName = renderedConnection.name; const rowCount = rows.length; const { startTime, stopTime, queryRunTime } = queryResult; @@ -165,22 +192,26 @@ function runQuery(query, connection, user) { * As long as promise resolves without error * it is considered a successful connection config * @param {object} connection + * @param {object} user */ -function testConnection(connection) { +function testConnection(connection, user) { const driver = drivers[connection.driver]; - return driver.testConnection(connection); + const renderedConnection = renderConnection(connection, user); + return driver.testConnection(renderedConnection); } /** * Gets schema (sometimes called schemaInfo) for connection * This data is used by client to build schema tree in editor sidebar * @param {object} connection + * @param {object} user * @returns {Promise} */ -function getSchema(connection) { +function getSchema(connection, user) { connection.maxRows = Number.MAX_SAFE_INTEGER; const driver = drivers[connection.driver]; - return driver.getSchema(connection); + const renderedConnection = renderConnection(connection, user); + return driver.getSchema(renderedConnection); } /** @@ -243,6 +274,7 @@ function validateConnection(connection) { module.exports = { getDrivers, getSchema, + renderConnection, runQuery, testConnection, validateConnection diff --git a/server/models/users.js b/server/models/users.js index cda322134..93d33db89 100644 --- a/server/models/users.js +++ b/server/models/users.js @@ -4,6 +4,7 @@ const passhash = require('../lib/passhash.js'); const schema = Joi.object({ _id: Joi.string().optional(), // will be auto-gen by nedb email: Joi.string().required(), + name: Joi.string().optional(), role: Joi.string() .lowercase() .allow('admin', 'editor', 'viewer'), @@ -17,7 +18,12 @@ const schema = Joi.object({ .strip(), createdDate: Joi.date().default(Date.now), modifiedDate: Joi.date().default(Date.now), - signupDate: Joi.date().optional() + signupDate: Joi.date().optional(), + // `data` field is intended to be something end users populate via various means + // That is data can be anything, managed by user, not by SQLPad + // The data object's primary purpose will be to store values for replacement in connection templates + // For any official SQLPad use, fields should be specified on user object + data: Joi.object().optional() }); class Users { diff --git a/server/routes/schema-info.js b/server/routes/schema-info.js index c3600f530..0f746f187 100644 --- a/server/routes/schema-info.js +++ b/server/routes/schema-info.js @@ -7,7 +7,7 @@ router.get( '/api/schema-info/:connectionId', mustHaveConnectionAccess, async function(req, res) { - const { models } = req; + const { models, user } = req; const { connectionId } = req.params; const reload = req.query.reload === 'true'; @@ -24,7 +24,7 @@ router.get( return res.json({ schemaInfo }); } - schemaInfo = await driver.getSchema(conn); + schemaInfo = await driver.getSchema(conn, user); if (Object.keys(schemaInfo).length) { await models.schemaInfo.saveSchemaInfo(connectionId, schemaInfo); } diff --git a/server/routes/test-connection.js b/server/routes/test-connection.js index 5db944735..cf5e6cb70 100644 --- a/server/routes/test-connection.js +++ b/server/routes/test-connection.js @@ -7,9 +7,8 @@ const sendError = require('../lib/sendError'); * A non-error response is considered a success or valid connection config */ router.post('/api/test-connection', mustBeAdmin, async function(req, res) { - const { body } = req; try { - await testConnection(body); + await testConnection(req.body, req.user); res.send({ success: true }); } catch (error) { sendError(res, error); diff --git a/server/test/drivers.js b/server/test/drivers.js index ba0ea1051..546d122b9 100644 --- a/server/test/drivers.js +++ b/server/test/drivers.js @@ -71,4 +71,33 @@ describe('drivers', function() { }); }, 'boolean not convertable throws error'); }); + + it('renders connection with user', function() { + const secret = '123<>!@#$%^&*()-_+='; + const user = { + data: { + secret + } + }; + const connection = { + connectionString: '{{user.data.secret}}', + singleStache: '{single}', + port: 6543 + }; + const rendered = drivers.renderConnection(connection, user); + assert.strictEqual(rendered.connectionString, secret); + assert.strictEqual(rendered.singleStache, '{single}', 'single left alone'); + assert.strictEqual(rendered.port, 6543, 'number left alone'); + }); + + it('renders connection without user', function() { + const connection = { + connectionString: 'test', + singleStache: '{single}', + port: 6543 + }; + const rendered = drivers.renderConnection(connection); + assert.strictEqual(rendered.connectionString, 'test'); + assert.strictEqual(rendered.singleStache, '{single}'); + }); }); From 08485e9c6eb269e714d0c1c12f41f5509739da59 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 20 Feb 2020 23:01:43 -0600 Subject: [PATCH 016/658] Remove config reference from drivers (#545) --- server/drivers/index.js | 32 ++++++++++++-------------------- server/routes/drivers.js | 14 +++++++++++--- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/server/drivers/index.js b/server/drivers/index.js index 1544c9382..b8337470f 100644 --- a/server/drivers/index.js +++ b/server/drivers/index.js @@ -1,12 +1,9 @@ const uuid = require('uuid'); const _ = require('lodash'); -const config = require('../lib/config'); const utils = require('./utils'); const getMeta = require('../lib/getMeta'); const logger = require('../lib/logger'); -const debug = config.get('debug'); - const drivers = {}; /** @@ -112,23 +109,18 @@ function requireValidate(path, optional = false) { // Loads and validates drivers // Will populate drivers {} map -requireValidate('../drivers/crate'); -requireValidate('../drivers/drill'); -requireValidate('../drivers/hdb'); -requireValidate('../drivers/mysql'); -requireValidate('../drivers/postgres'); -requireValidate('../drivers/presto'); -requireValidate('../drivers/sqlserver'); -requireValidate('../drivers/unixodbc', true); -requireValidate('../drivers/vertica'); -requireValidate('../drivers/cassandra'); -requireValidate('../drivers/snowflake'); - -// If debug is turned on also add in mock drivers -// This is used for test cases, and is also useful for end-user debugging -if (debug) { - requireValidate('../drivers/mock'); -} +requireValidate('./crate'); +requireValidate('./drill'); +requireValidate('./hdb'); +requireValidate('./mysql'); +requireValidate('./postgres'); +requireValidate('./presto'); +requireValidate('./sqlserver'); +requireValidate('./unixodbc', true); +requireValidate('./vertica'); +requireValidate('./cassandra'); +requireValidate('./snowflake'); +requireValidate('./mock'); /** * Run query using driver implementation of connection diff --git a/server/routes/drivers.js b/server/routes/drivers.js index 01d13864c..6bf6f78f4 100644 --- a/server/routes/drivers.js +++ b/server/routes/drivers.js @@ -1,13 +1,21 @@ const router = require('express').Router(); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); -const drivers = require('../drivers'); +const driversUtil = require('../drivers'); const sendError = require('../lib/sendError'); router.get('/api/drivers', mustBeAuthenticated, function(req, res) { + const { config } = req; + const debug = config.get('debug'); + try { - return res.json({ - drivers: drivers.getDrivers() + // If debug is turned on show all drivers, otherwise exclude mock driver + // The mock driver is used for test cases, and is also useful for end-user debugging + // TODO - deprecate debug for a config to enable mock + const drivers = driversUtil.getDrivers().filter(driver => { + return debug || driver.id !== 'mock'; }); + + return res.json({ drivers }); } catch (error) { return sendError(res, error, 'Error getting drivers'); } From 97bc98c912391dbad7cbf0f9bb4552494b4f385c Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 21 Feb 2020 11:27:06 -0600 Subject: [PATCH 017/658] Wrap pino logger for app logging (#547) * Implement pino logger wrapper * Reference appLog * Better type hint * Set log level when testing * Move comment --- server/app.js | 7 ++-- server/drivers/cassandra/index.js | 6 ++-- server/drivers/drill/drill.js | 4 +-- server/drivers/drill/index.js | 6 ++-- server/drivers/hdb/index.js | 6 ++-- server/drivers/index.js | 18 +++++----- server/drivers/mysql/index.js | 4 +-- server/drivers/postgres/index.js | 6 ++-- server/drivers/unixodbc/index.js | 6 ++-- server/lib/appLog.js | 4 +++ server/lib/cli-flow.js | 6 ++-- server/lib/connectionsFromConfig.js | 4 +-- server/lib/db.js | 6 ++-- server/lib/email.js | 8 ++--- server/lib/ensureAdmin.js | 10 +++--- server/lib/logger.js | 52 ++++++++++++++++++++++++---- server/lib/pushQueryToSlack.js | 4 +-- server/lib/sendError.js | 4 +-- server/models/resultCache.js | 14 ++++---- server/routes/connection-accesses.js | 8 ++--- server/routes/download-results.js | 13 ++++--- server/routes/forgot-password.js | 5 ++- server/routes/local-auth.js | 6 ++-- server/routes/oauth.js | 4 +-- server/routes/saml.js | 6 ++-- server/routes/signout.js | 4 +-- server/routes/users.js | 5 ++- server/server.js | 26 +++++++------- server/test/utils.js | 2 ++ server/typedefs.js | 3 ++ 30 files changed, 152 insertions(+), 105 deletions(-) create mode 100644 server/lib/appLog.js diff --git a/server/app.js b/server/app.js index 0de4b94ef..b54d79476 100644 --- a/server/app.js +++ b/server/app.js @@ -4,7 +4,7 @@ const express = require('express'); const helmet = require('helmet'); const session = require('express-session'); const FileStore = require('session-file-store')(session); -const logger = require('./lib/logger'); +const appLog = require('./lib/appLog'); /** * Create an express app using config @@ -64,6 +64,7 @@ function makeApp(config, models) { app.use(function(req, res, next) { req.config = config; req.models = models; + req.appLog = appLog; next(); }); @@ -165,8 +166,8 @@ function makeApp(config, models) { .replace(/="\/static/g, `="${baseUrl}/static`); app.use((req, res) => res.send(baseUrlHtml)); } else { - logger.warn('NO FRONT END TEMPLATE DETECTED'); - logger.warn('If not running in dev mode please report this issue.'); + appLog.warn('NO FRONT END TEMPLATE DETECTED'); + appLog.warn('If not running in dev mode please report this issue.'); } return app; diff --git a/server/drivers/cassandra/index.js b/server/drivers/cassandra/index.js index 66a494de7..9ec76b80a 100644 --- a/server/drivers/cassandra/index.js +++ b/server/drivers/cassandra/index.js @@ -1,5 +1,5 @@ const cassandra = require('cassandra-driver'); -const logger = require('../../lib/logger'); +const appLog = require('../../lib/appLog'); const { formatSchemaQueryResults } = require('../utils'); const id = 'cassandra'; @@ -21,8 +21,8 @@ const SCHEMA_SQL = ` */ function shutdownClient(client) { client.shutdown().catch(error => { - logger.error('Error shutting down cassandra connection'); - logger.error(error); + appLog.error('Error shutting down cassandra connection'); + appLog.error(error); }); } diff --git a/server/drivers/drill/drill.js b/server/drivers/drill/drill.js index 7071bd189..b28180eff 100644 --- a/server/drivers/drill/drill.js +++ b/server/drivers/drill/drill.js @@ -1,7 +1,7 @@ const fetch = require('node-fetch'); let request = require('request'); let url = require('url'); -const logger = require('../../lib/logger'); +const appLog = require('../../lib/appLog'); exports.version = '1.0'; @@ -72,7 +72,7 @@ Client.prototype.query = function(config, query) { }) .catch(function(e) { // TODO Send error message to JSON - logger.error(e); + appLog.error(e); return e; }); }; diff --git a/server/drivers/drill/index.js b/server/drivers/drill/index.js index 2e0ebfaba..1bc3c8df1 100644 --- a/server/drivers/drill/index.js +++ b/server/drivers/drill/index.js @@ -1,5 +1,5 @@ const drill = require('./drill.js'); -const logger = require('../../lib/logger'); +const appLog = require('../../lib/appLog'); const { formatSchemaQueryResults } = require('../utils'); const id = 'drill'; @@ -50,8 +50,8 @@ function runQuery(query, connection) { if (!result) { throw new Error('No result returned'); } else if (result.errorMessage && result.errorMessage.length > 0) { - logger.info('Error with query: %s', query); - logger.info(result.errorMessage); + appLog.info('Error with query: %s', query); + appLog.info(result.errorMessage); throw new Error(result.errorMessage.split('\n')[0]); } if (result.length > connection.maxRows) { diff --git a/server/drivers/hdb/index.js b/server/drivers/hdb/index.js index 0e77f809e..40605efbe 100644 --- a/server/drivers/hdb/index.js +++ b/server/drivers/hdb/index.js @@ -1,5 +1,5 @@ const hdb = require('hdb'); -const logger = require('../../lib/logger'); +const appLog = require('../../lib/appLog'); const { formatSchemaQueryResults } = require('../utils'); const id = 'hdb'; @@ -42,13 +42,13 @@ function runQuery(query, connection) { }); client.on('error', err => { - logger.error(err, 'Network connection error'); + appLog.error(err, 'Network connection error'); return reject(err); }); client.connect(err => { if (err) { - logger.error(err, 'Connect error'); + appLog.error(err, 'Connect error'); return reject(err); } return client.execute(query, function(err, rs) { diff --git a/server/drivers/index.js b/server/drivers/index.js index b8337470f..19f2f3eb5 100644 --- a/server/drivers/index.js +++ b/server/drivers/index.js @@ -2,7 +2,7 @@ const uuid = require('uuid'); const _ = require('lodash'); const utils = require('./utils'); const getMeta = require('../lib/getMeta'); -const logger = require('../lib/logger'); +const appLog = require('../lib/appLog'); const drivers = {}; @@ -14,7 +14,7 @@ const drivers = {}; */ function validateFunction(path, driver, functionName) { if (typeof driver[functionName] !== 'function') { - logger.error('%s missing .%s() implementation', path, functionName); + appLog.error('%s missing .%s() implementation', path, functionName); process.exit(1); } } @@ -28,7 +28,7 @@ function validateFunction(path, driver, functionName) { function validateArray(path, driver, arrayName) { const arr = driver[arrayName]; if (!Array.isArray(arr)) { - logger.error('%s missing %s array', path, arrayName); + appLog.error('%s missing %s array', path, arrayName); process.exit(1); } } @@ -69,7 +69,7 @@ function requireValidate(path, optional = false) { driver = require(path); } catch (er) { if (optional) { - logger.info('optional driver %s not available', path); + appLog.info('optional driver %s not available', path); return; } else { // rethrow @@ -78,18 +78,18 @@ function requireValidate(path, optional = false) { } if (!driver.id) { - logger.error('%s must export a unique id', path); + appLog.error('%s must export a unique id', path); process.exit(1); } if (!driver.name) { - logger.error('%s must export a name', path); + appLog.error('%s must export a name', path); process.exit(1); } if (drivers[driver.id]) { - logger.error(`Driver with id ${driver.id} already loaded`); - logger.error(`Ensure ${path} has a unique id exported`); + appLog.error(`Driver with id ${driver.id} already loaded`); + appLog.error(`Ensure ${path} has a unique id exported`); process.exit(1); } @@ -163,7 +163,7 @@ function runQuery(query, connection, user) { const rowCount = rows.length; const { startTime, stopTime, queryRunTime } = queryResult; - logger.info({ + appLog.info({ userId: user && user._id, userEmail: user && user.email, connectionId: connection._id, diff --git a/server/drivers/mysql/index.js b/server/drivers/mysql/index.js index 781a79db8..208f7c34b 100644 --- a/server/drivers/mysql/index.js +++ b/server/drivers/mysql/index.js @@ -1,6 +1,6 @@ const fs = require('fs'); const mysql = require('mysql'); -const logger = require('../../lib/logger'); +const appLog = require('../../lib/appLog'); const { formatSchemaQueryResults } = require('../utils'); const id = 'mysql'; @@ -125,7 +125,7 @@ function runQuery(query, connection) { if (params.closeConnection) { myConnection.end(error => { if (error) { - logger.error(error, 'Error ending MySQL connection'); + appLog.error(error, 'Error ending MySQL connection'); } continueOn(); }); diff --git a/server/drivers/postgres/index.js b/server/drivers/postgres/index.js index ada6ff2f2..027c50b55 100644 --- a/server/drivers/postgres/index.js +++ b/server/drivers/postgres/index.js @@ -3,7 +3,7 @@ const pg = require('pg'); const _ = require('lodash'); const PgCursor = require('pg-cursor'); const SocksConnection = require('socksjs'); -const logger = require('../../lib/logger'); +const appLog = require('../../lib/appLog'); const { formatSchemaQueryResults } = require('../utils'); const id = 'postgres'; @@ -136,13 +136,13 @@ function runQuery(query, connection) { if (params.closeConnection) { cursor.close(err => { if (err) { - logger.error(err, 'error closing pg-cursor'); + appLog.error(err, 'error closing pg-cursor'); } // Calling end() without setImmediate causes error within node-pg setImmediate(() => { client.end(error => { if (error) { - logger.error(error); + appLog.error(error); } }); }); diff --git a/server/drivers/unixodbc/index.js b/server/drivers/unixodbc/index.js index 5f8a7e000..ce647ac85 100644 --- a/server/drivers/unixodbc/index.js +++ b/server/drivers/unixodbc/index.js @@ -1,5 +1,5 @@ const odbc = require('odbc'); -const logger = require('../../lib/logger'); +const appLog = require('../../lib/appLog'); const { formatSchemaQueryResults } = require('../utils'); const id = 'unixodbc'; @@ -81,7 +81,7 @@ async function runQuery(query, connection) { return { rows, incomplete }; } catch (error) { - logger.error(error); + appLog.error(error); try { if (connectionInstance && connectionInstance.close) { await connectionInstance.close(); @@ -89,7 +89,7 @@ async function runQuery(query, connection) { } catch (error) { // Do nothing here. // An error already happened we're just trying to ensure it closed okay - logger.error(error, 'error closing connection after error'); + appLog.error(error, 'error closing connection after error'); } throw error; } diff --git a/server/lib/appLog.js b/server/lib/appLog.js new file mode 100644 index 000000000..7d7674921 --- /dev/null +++ b/server/lib/appLog.js @@ -0,0 +1,4 @@ +const Logger = require('./logger'); +const appLog = new Logger(); + +module.exports = appLog; diff --git a/server/lib/cli-flow.js b/server/lib/cli-flow.js index 31e25ae54..5ad3f3565 100644 --- a/server/lib/cli-flow.js +++ b/server/lib/cli-flow.js @@ -1,6 +1,6 @@ const minimist = require('minimist'); const argv = minimist(process.argv.slice(2)); -const logger = require('./logger'); +const appLog = require('./appLog'); const packageJson = require('../package.json'); const configItems = require('./config/configItems'); @@ -27,12 +27,12 @@ ${configItems // If version is requested show version then exit if (argv.v || argv.version) { - logger.info('SQLPad version %s', packageJson.version); + appLog.info('SQLPad version %s', packageJson.version); process.exit(); } // If help is requested show help if (argv.h || argv.help) { - logger.info(helpText); + appLog.info(helpText); process.exit(); } diff --git a/server/lib/connectionsFromConfig.js b/server/lib/connectionsFromConfig.js index 44b7fdd6e..cd38751d1 100644 --- a/server/lib/connectionsFromConfig.js +++ b/server/lib/connectionsFromConfig.js @@ -1,5 +1,5 @@ const _ = require('lodash'); -const logger = require('./logger'); +const appLog = require('./appLog'); const drivers = require('../drivers'); const getConfigFromFile = require('./config/fromFile.js'); const [configFromFile] = getConfigFromFile() || {}; @@ -64,7 +64,7 @@ function getConnectionsFromConfig(env = process.env) { connection.editable = false; connectionsFromConfig.push(connection); } catch (error) { - logger.error( + appLog.error( error, 'Environment connection configuration failed for %s', id diff --git a/server/lib/db.js b/server/lib/db.js index 7f52500f9..d014c0157 100644 --- a/server/lib/db.js +++ b/server/lib/db.js @@ -1,7 +1,7 @@ const path = require('path'); const datastore = require('nedb-promise'); const mkdirp = require('mkdirp'); -const logger = require('./logger'); +const appLog = require('./appLog'); const ensureAdmin = require('./ensureAdmin'); const consts = require('./consts'); const Models = require('../models'); @@ -70,14 +70,14 @@ async function initNedb(config) { // Load dbs, migrate data, and apply indexes await Promise.all( nedb.instances.map(dbname => { - logger.info('Loading %s', dbname); + appLog.info('Loading %s', dbname); return nedb[dbname].loadDatabase(); }) ); // create default connection accesses if (allowConnectionAccessToEveryone) { - logger.info('Creating access on every connection to every user...'); + appLog.info('Creating access on every connection to every user...'); await nedb.connectionAccesses.update( { connectionId: consts.EVERY_CONNECTION_ID, diff --git a/server/lib/email.js b/server/lib/email.js index 66371acb6..7611d8f10 100644 --- a/server/lib/email.js +++ b/server/lib/email.js @@ -1,5 +1,5 @@ const nodemailer = require('nodemailer'); -const logger = require('./logger'); +const appLog = require('./appLog'); function makeEmail(config) { /** @@ -38,7 +38,7 @@ function makeEmail(config) { async function send(to, subject, text, html) { if (!config.smtpConfigured()) { - logger.error('email.send() called without being configured'); + appLog.error('email.send() called without being configured'); return; } @@ -65,9 +65,9 @@ function makeEmail(config) { html }; transporter.sendMail(mailOptions, function(err, info) { - logger.info('sent email: %s', info); + appLog.info('sent email: %s', info); if (err) { - logger.error(err); + appLog.error(err); return reject(err); } resolve(info); diff --git a/server/lib/ensureAdmin.js b/server/lib/ensureAdmin.js index a386700d7..2190c2e62 100644 --- a/server/lib/ensureAdmin.js +++ b/server/lib/ensureAdmin.js @@ -1,5 +1,5 @@ const passhash = require('./passhash'); -const logger = require('./logger'); +const appLog = require('./appLog'); /** * Ensure admin email is a user if provided @@ -25,7 +25,7 @@ async function ensureAdmin(nedb, adminEmail, adminPassword) { changes.passhash = await passhash.getPasshash(adminPassword); } await nedb.users.update({ _id: user._id }, { $set: changes }, {}); - logger.info('Admin access granted to %s', adminEmail); + appLog.info('Admin access granted to %s', adminEmail); return; } @@ -37,10 +37,10 @@ async function ensureAdmin(nedb, adminEmail, adminPassword) { newAdmin.passhash = await passhash.getPasshash(adminPassword); } await nedb.users.insert(newAdmin); - logger.info('Admin access granted to %s', adminEmail); - logger.info('Please visit signup to complete registration.'); + appLog.info('Admin access granted to %s', adminEmail); + appLog.info('Please visit signup to complete registration.'); } catch (error) { - logger.error('Admin access grant failed for %s', adminEmail); + appLog.error('Admin access grant failed for %s', adminEmail); throw error; } } diff --git a/server/lib/logger.js b/server/lib/logger.js index 00abe54cf..cf7adba1b 100644 --- a/server/lib/logger.js +++ b/server/lib/logger.js @@ -1,11 +1,49 @@ -const config = require('./config'); +const pino = require('pino'); // Log levels https://github.com/pinojs/pino/issues/123 -const appLogLevel = config.get('appLogLevel'); +const levels = ['fatal', 'error', 'warn', 'info', 'debug', 'silent']; -const logger = require('pino')({ - name: 'sqlpad-app', - level: appLogLevel -}); +class Logger { + constructor(logLevel = 'warn') { + if (!levels.includes(logLevel)) { + throw new Error(`Unknown log level ${logLevel}`); + } + this.logLevel = logLevel; + this.logger = pino({ + name: 'sqlpad-app', + level: logLevel + }); + } -module.exports = logger; + setLevel(logLevel) { + if (!levels.includes(logLevel)) { + throw new Error(`Unknown log level ${logLevel}`); + } + this.logger = pino({ + name: 'sqlpad-app', + level: logLevel + }); + } + + fatal(...args) { + this.logger.fatal(...args); + } + + error(...args) { + this.logger.error(...args); + } + + warn(...args) { + this.logger.warn(...args); + } + + info(...args) { + this.logger.info(...args); + } + + debug(...args) { + this.logger.debug(...args); + } +} + +module.exports = Logger; diff --git a/server/lib/pushQueryToSlack.js b/server/lib/pushQueryToSlack.js index fd75662ca..4a4541406 100644 --- a/server/lib/pushQueryToSlack.js +++ b/server/lib/pushQueryToSlack.js @@ -1,4 +1,4 @@ -const logger = require('./logger'); +const appLog = require('./appLog'); const request = require('request'); function pushQueryToSlack(config, query) { @@ -23,7 +23,7 @@ ${'```'}` }; request(options, function(err) { if (err) { - logger.error(err, 'Problem sending query to slack'); + appLog.error(err, 'Problem sending query to slack'); } }); } diff --git a/server/lib/sendError.js b/server/lib/sendError.js index aa30e6d93..63a4f515a 100644 --- a/server/lib/sendError.js +++ b/server/lib/sendError.js @@ -1,4 +1,4 @@ -const logger = require('./logger'); +const appLog = require('./appLog'); /** * Logs actual error and sends standard error response @@ -8,7 +8,7 @@ const logger = require('./logger'); */ module.exports = function sendError(res, error, message) { if (error) { - logger.error(error); + appLog.error(error); } return res.json({ error: message || (error ? error.toString() : 'Something happened') diff --git a/server/models/resultCache.js b/server/models/resultCache.js index 767da9406..40b621d3b 100644 --- a/server/models/resultCache.js +++ b/server/models/resultCache.js @@ -2,7 +2,7 @@ const fs = require('fs'); const path = require('path'); const moment = require('moment'); const sanitize = require('sanitize-filename'); -const logger = require('../lib/logger'); +const appLog = require('../lib/appLog'); const xlsx = require('node-xlsx'); const { parse } = require('json2csv'); @@ -90,7 +90,7 @@ class ResultCache { await this.nedb.cache.remove({ _id: doc._id }, {}); } } catch (error) { - logger.error(error); + appLog.error(error); } } @@ -114,7 +114,7 @@ class ResultCache { // if there's an error log it but otherwise continue on // we can still send results even if download file failed to create if (err) { - logger.error(err); + appLog.error(err); } return resolve(); }); @@ -127,12 +127,12 @@ class ResultCache { const csv = parse(queryResult.rows, { fields: queryResult.fields }); fs.writeFile(this.csvFilePath(cacheKey), csv, function(err) { if (err) { - logger.error(err); + appLog.error(err); } return resolve(); }); } catch (error) { - logger.error(error); + appLog.error(error); return resolve(); } }); @@ -144,12 +144,12 @@ class ResultCache { const json = JSON.stringify(queryResult.rows); fs.writeFile(this.jsonFilePath(cacheKey), json, function(err) { if (err) { - logger.error(err); + appLog.error(err); } return resolve(); }); } catch (error) { - logger.error(error); + appLog.error(error); return resolve(); } }); diff --git a/server/routes/connection-accesses.js b/server/routes/connection-accesses.js index a10b9edd0..5aeb74aeb 100644 --- a/server/routes/connection-accesses.js +++ b/server/routes/connection-accesses.js @@ -6,7 +6,7 @@ const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const sendError = require('../lib/sendError'); /** - * @param {Req} req + * @param {import('express').Request & Req} req * @param {*} res */ async function listConnectionAccesses(req, res) { @@ -32,7 +32,7 @@ router.get( ); /** - * @param {Req} req + * @param {import('express').Request & Req} req * @param {*} res */ async function getConnectionAccess(req, res) { @@ -57,7 +57,7 @@ router.get( ); /** - * @param {Req} req + * @param {import('express').Request & Req} req * @param {*} res */ async function createConnectionAccess(req, res) { @@ -118,7 +118,7 @@ async function createConnectionAccess(req, res) { router.post('/api/connection-accesses', mustBeAdmin, createConnectionAccess); /** - * @param {Req} req + * @param {import('express').Request & Req} req * @param {*} res */ async function updateConnectionAccess(req, res) { diff --git a/server/routes/download-results.js b/server/routes/download-results.js index 4fa5097a0..b4efdab90 100644 --- a/server/routes/download-results.js +++ b/server/routes/download-results.js @@ -1,9 +1,8 @@ const fs = require('fs'); const router = require('express').Router(); -const logger = require('../lib/logger'); router.get('/download-results/:cacheKey.csv', async function(req, res, next) { - const { models } = req; + const { models, appLog } = req; const { cacheKey } = req.params; try { if (req.config.get('allowCsvDownload')) { @@ -22,14 +21,14 @@ router.get('/download-results/:cacheKey.csv', async function(req, res, next) { return next(new Error('CSV download disabled')); } } catch (error) { - logger.error(error); + appLog.error(error); // TODO figure out what this sends and set manually return next(error); } }); router.get('/download-results/:cacheKey.xlsx', async function(req, res, next) { - const { models } = req; + const { models, appLog } = req; const { cacheKey } = req.params; try { if (req.config.get('allowCsvDownload')) { @@ -51,14 +50,14 @@ router.get('/download-results/:cacheKey.xlsx', async function(req, res, next) { return next(new Error('XLSX download disabled')); } } catch (error) { - logger.error(error); + appLog.error(error); // TODO figure out what this sends and set manually return next(error); } }); router.get('/download-results/:cacheKey.json', async function(req, res, next) { - const { models } = req; + const { models, appLog } = req; const { cacheKey } = req.params; try { if (req.config.get('allowCsvDownload')) { @@ -77,7 +76,7 @@ router.get('/download-results/:cacheKey.json', async function(req, res, next) { return next(new Error('JSON download disabled')); } } catch (error) { - logger.error(error); + appLog.error(error); // TODO figure out what this sends and set manually return next(error); } diff --git a/server/routes/forgot-password.js b/server/routes/forgot-password.js index 662134503..5d6cb2603 100644 --- a/server/routes/forgot-password.js +++ b/server/routes/forgot-password.js @@ -2,10 +2,9 @@ const router = require('express').Router(); const uuid = require('uuid'); const makeEmail = require('../lib/email'); const sendError = require('../lib/sendError'); -const logger = require('../lib/logger'); router.post('/api/forgot-password', async function(req, res) { - const { models } = req; + const { models, appLog } = req; if (!req.body.email) { return sendError(res, null, 'Email address must be provided'); } @@ -32,7 +31,7 @@ router.post('/api/forgot-password', async function(req, res) { const resetPath = `/password-reset/${user.passwordResetId}`; email .sendForgotPassword(req.body.email, resetPath) - .catch(error => logger.error(error)); + .catch(error => appLog.error(error)); return res.json({}); } catch (error) { diff --git a/server/routes/local-auth.js b/server/routes/local-auth.js index 032f7a79f..8558db391 100644 --- a/server/routes/local-auth.js +++ b/server/routes/local-auth.js @@ -4,7 +4,7 @@ const BasicStrategy = require('passport-http').BasicStrategy; const router = require('express').Router(); const checkWhitelist = require('../lib/check-whitelist'); const sendError = require('../lib/sendError'); -const logger = require('../lib/logger'); +const appLog = require('../lib/appLog'); const passhash = require('../lib/passhash.js'); async function handleSignup(req, res, next) { @@ -66,7 +66,7 @@ function makeLocalAuth(config) { // Register local auth strategy // TODO: Should all authentication strategies be disabled by default, requiring SQLPad implementer to pick one? // This might be more secure as it'd prevent SQLPad's from launching with local auth enabled and open admin registration by default - logger.info('Enabling local authentication strategy.'); + appLog.info('Enabling local authentication strategy.'); passport.use( new PassportLocalStrategy( { @@ -106,7 +106,7 @@ function makeLocalAuth(config) { ); // TODO - basic auth should perhaps be something opted into as a separate config - logger.info('Enabling basic authentication strategy.'); + appLog.info('Enabling basic authentication strategy.'); passport.use( new BasicStrategy( { diff --git a/server/routes/oauth.js b/server/routes/oauth.js index 60ab112bd..b56baa9df 100644 --- a/server/routes/oauth.js +++ b/server/routes/oauth.js @@ -1,7 +1,7 @@ const passport = require('passport'); const PassportGoogleStrategy = require('passport-google-oauth20').Strategy; const router = require('express').Router(); -const logger = require('../lib/logger'); +const appLog = require('../lib/appLog'); const checkWhitelist = require('../lib/check-whitelist.js'); /** @@ -64,7 +64,7 @@ function makeGoogleAuth(config) { } if (config.googleAuthConfigured()) { - logger.info('Enabling Google authentication strategy.'); + appLog.info('Enabling Google authentication strategy.'); // Register the passport strategy passport.use( diff --git a/server/routes/saml.js b/server/routes/saml.js index 0af742972..b7f18d6e4 100644 --- a/server/routes/saml.js +++ b/server/routes/saml.js @@ -1,7 +1,7 @@ const passport = require('passport'); const SamlStrategy = require('passport-saml').Strategy; const router = require('express').Router(); -const logger = require('../lib/logger'); +const appLog = require('../lib/appLog'); /** * Adds passport SAML strategy and SAML auth routes if SAML is configured @@ -21,7 +21,7 @@ function makeSamlAuth(config) { samlCert && samlAuthContext ) { - logger.info('Enabling SAML authentication strategy.'); + appLog.info('Enabling SAML authentication strategy.'); // Register SAML strategy passport.use( @@ -43,7 +43,7 @@ function makeSamlAuth(config) { ]; const { models } = req; const user = await models.users.findOneByEmail(email); - logger.info('User logged in via SAML %s', email); + appLog.info('User logged in via SAML %s', email); if (!user) { return done(null, false); } diff --git a/server/routes/signout.js b/server/routes/signout.js index 921160acb..d0edc7388 100644 --- a/server/routes/signout.js +++ b/server/routes/signout.js @@ -1,5 +1,5 @@ const router = require('express').Router(); -const logger = require('../lib/logger'); +const appLog = require('../lib/appLog'); // Regardless of authentication strategy, signout route should always exist // It clears out the session which is used regardless of strategy @@ -9,7 +9,7 @@ router.get('/api/signout', function(req, res) { } req.session.destroy(function(err) { if (err) { - logger.error(err); + appLog.error(err); } res.json({}); }); diff --git a/server/routes/users.js b/server/routes/users.js index c63c79695..450bb334b 100644 --- a/server/routes/users.js +++ b/server/routes/users.js @@ -3,7 +3,6 @@ const makeEmail = require('../lib/email'); const mustBeAdmin = require('../middleware/must-be-admin.js'); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const sendError = require('../lib/sendError'); -const logger = require('../lib/logger'); router.get('/api/users', mustBeAuthenticated, async function(req, res) { const { models } = req; @@ -17,7 +16,7 @@ router.get('/api/users', mustBeAuthenticated, async function(req, res) { // create/whitelist/invite user router.post('/api/users', mustBeAdmin, async function(req, res) { - const { models } = req; + const { models, appLog } = req; try { let user = await models.users.findOneByEmail(req.body.email); if (user) { @@ -31,7 +30,7 @@ router.post('/api/users', mustBeAdmin, async function(req, res) { const email = makeEmail(req.config); if (req.config.smtpConfigured()) { - email.sendInvite(req.body.email).catch(error => logger.error(error)); + email.sendInvite(req.body.email).catch(error => appLog.error(error)); } return res.json({ user }); } catch (error) { diff --git a/server/server.js b/server/server.js index cd5f1e0c0..a5b059577 100755 --- a/server/server.js +++ b/server/server.js @@ -9,16 +9,18 @@ const makeApp = require('./app'); // Parse command line flags to see if anything special needs to happen require('./lib/cli-flow.js'); -const logger = require('./lib/logger'); +const appLog = require('./lib/appLog'); const config = require('./lib/config'); const { makeDb, getDb } = require('./lib/db'); +appLog.setLevel(config.get('appLogLevel')); + makeDb(config); const configValidations = config.getValidations(); -configValidations.warnings.map(warning => logger.warn(warning)); +configValidations.warnings.map(warning => appLog.warn(warning)); if (configValidations.errors.length > 0) { - configValidations.errors.forEach(error => logger.error(error)); + configValidations.errors.forEach(error => appLog.error(error)); process.exit(1); } @@ -53,10 +55,10 @@ function detectPortOrSystemd(port) { // We just crab the first socket from fd 3 since sqlpad binds only one // port. if (passedSocketCount > 0) { - logger.info('Using port from Systemd'); + appLog.info('Using port from Systemd'); return Promise.resolve({ fd: 3 }); } else { - logger.warn( + appLog.warn( 'Warning: Systemd socket asked but not found. Trying to bind port %d manually', port ); @@ -78,7 +80,7 @@ async function startServer(models) { // https only const _port = await detectPortOrSystemd(httpsPort); if (!isFdObject(_port) && httpsPort !== _port) { - logger.info( + appLog.info( 'Port %d already occupied. Using port %d instead.', httpsPort, _port @@ -100,13 +102,13 @@ async function startServer(models) { .listen(_port, ip, function() { const hostIp = ip === '0.0.0.0' ? 'localhost' : ip; const url = `https://${hostIp}:${_port}${baseUrl}`; - logger.info('Welcome to SQLPad!. Visit %s to get started', url); + appLog.info('Welcome to SQLPad!. Visit %s to get started', url); }); } else { // http only const _port = await detectPortOrSystemd(port); if (!isFdObject(_port) && port !== _port) { - logger.info( + appLog.info( 'Port %d already occupied. Using port %d instead.', port, _port @@ -118,7 +120,7 @@ async function startServer(models) { server = http.createServer(app).listen(_port, ip, function() { const hostIp = ip === '0.0.0.0' ? 'localhost' : ip; const url = `http://${hostIp}:${_port}${baseUrl}`; - logger.info('Welcome to SQLPad! Visit %s to get started', url); + appLog.info('Welcome to SQLPad! Visit %s to get started', url); }); } server.setTimeout(timeoutSeconds * 1000); @@ -127,16 +129,16 @@ async function startServer(models) { getDb() .then(db => startServer(db.models)) .catch(error => { - logger.error(error, 'Error starting SQLPad'); + appLog.error(error, 'Error starting SQLPad'); process.exit(1); }); function handleShutdownSignal(signal) { if (!server) { - logger.info('Received %s, but no server to shutdown', signal); + appLog.info('Received %s, but no server to shutdown', signal); process.exit(0); } else { - logger.info('Received %s, shutting down server...', signal); + appLog.info('Received %s, shutting down server...', signal); server.close(function() { process.exit(0); }); diff --git a/server/test/utils.js b/server/test/utils.js index 30b62a3c1..800026c42 100644 --- a/server/test/utils.js +++ b/server/test/utils.js @@ -2,6 +2,7 @@ const assert = require('assert'); const request = require('supertest'); const consts = require('../lib/consts'); const config = require('../lib/config'); +const appLog = require('../lib/appLog'); const { makeDb, getDb } = require('../lib/db'); const makeApp = require('../app'); @@ -96,6 +97,7 @@ async function put(role, url, body, statusCode = 200) { before(async function() { const { models } = await getDb(); + appLog.setLevel(config.get('appLogLevel')); app = makeApp(config, models); assert.throws(() => { diff --git a/server/typedefs.js b/server/typedefs.js index f3dcab335..ab0b33bc7 100644 --- a/server/typedefs.js +++ b/server/typedefs.js @@ -1,5 +1,8 @@ /** * The expressjs Request object plus decorations * @typedef {Object} Req + * @property {Object} config + * @property {Object} log - Pino web logger. Same as appLog but no setLevel + * @property {import('./lib/logger')} appLog - Pino app logger * @property {import('./models')} models - Collection of data access objects */ From 9aabbdf612cbf56775d67163b9a6c4e40cdc3800 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Mon, 24 Feb 2020 13:26:08 -0600 Subject: [PATCH 018/658] Config class and debug config values (#551) * Move dev config to file * Introduce Config class * Add getConnections method to config * Remove appLog as parameter * Add constructor documentation * Log debug config values and connections --- server/config.dev.ini | 8 +- server/lib/config/index.js | 174 ++++++++++++++++++++++------ server/lib/connectionsFromConfig.js | 79 ------------- server/models/connectionAccesses.js | 4 + server/models/connections.js | 16 ++- server/models/queries.js | 4 + server/models/queryHistory.js | 4 + server/models/resultCache.js | 4 + server/models/schemaInfo.js | 4 + server/models/users.js | 4 + server/package.json | 2 +- server/server.js | 15 ++- server/test/lib/config.js | 2 +- server/test/lib/email.js | 2 +- server/test/models/connections.js | 10 +- server/test/utils.js | 10 +- 16 files changed, 204 insertions(+), 138 deletions(-) delete mode 100644 server/lib/connectionsFromConfig.js diff --git a/server/config.dev.ini b/server/config.dev.ini index 89e37b730..ebcca7f16 100644 --- a/server/config.dev.ini +++ b/server/config.dev.ini @@ -1,4 +1,10 @@ -; INI config file that defines some connections for development purposes +; INI config file for dev setup +port = 3010 +baseUrl = "/sqlpad" +debug = true +dbPath = ../db +appLogLevel = debug +webLogLevel = debug [connections.devdbdriverid123] driver = mock diff --git a/server/lib/config/index.js b/server/lib/config/index.js index e43c670eb..a1d184404 100644 --- a/server/lib/config/index.js +++ b/server/lib/config/index.js @@ -1,59 +1,157 @@ -const minimist = require('minimist'); +const _ = require('lodash'); +const appLog = require('../appLog'); +const drivers = require('../../drivers'); const fromDefault = require('./fromDefault'); const fromEnv = require('./fromEnv'); const fromCli = require('./fromCli'); const fromFile = require('./fromFile'); const getOldConfigWarning = require('./getOldConfigWarning'); -const argv = minimist(process.argv.slice(2)); +class Config { + constructor(argv) { + this.argv = argv; -const defaultConfig = fromDefault(); -const envConfig = fromEnv(); -const [fileConfig, warnings] = fromFile(); -const cliConfig = fromCli(argv); + const defaultConfig = fromDefault(); + const envConfig = fromEnv(); + const [fileConfig, warnings] = fromFile(); + const cliConfig = fromCli(argv); -const all = { ...defaultConfig, ...envConfig, ...fileConfig, ...cliConfig }; + const all = { ...defaultConfig, ...envConfig, ...fileConfig, ...cliConfig }; -// Clean string boolean values -Object.keys(all).forEach(key => { - const value = all[key]; - if (typeof value === 'string') { - if (value.trim().toLowerCase() === 'true') { - all[key] = true; - } else if (value.trim().toLowerCase() === 'false') { - all[key] = false; + // Clean string boolean values + Object.keys(all).forEach(key => { + const value = all[key]; + if (typeof value === 'string') { + if (value.trim().toLowerCase() === 'true') { + all[key] = true; + } else if (value.trim().toLowerCase() === 'false') { + all[key] = false; + } + } + }); + + this.fileConfig = fileConfig; + this.warnings = warnings; + this.all = all; + } + + get(key) { + const { connections, ...rest } = this.all; + if (!key) { + return rest; } + + if (!this.all.hasOwnProperty(key)) { + throw new Error(`config item ${key} not defined in configItems.js`); + } + + return this.all[key]; } -}); -exports.get = function get(key) { - if (!key) { - throw new Error('key must be provided'); + getValidations() { + const errors = []; + + // By default dbPath will exist as empty string, which is not valid + if (this.all.dbPath === '') { + errors.push(getOldConfigWarning()); + } + + return { + errors, + warnings: [...this.warnings] + }; + } + + smtpConfigured() { + return ( + this.all.smtpHost && + this.all.smtpUser && + this.all.smtpFrom && + this.all.smtpPort && + this.all.publicUrl + ); } - if (!all.hasOwnProperty(key)) { - throw new Error(`config item ${key} not defined in configItems.js`); + googleAuthConfigured() { + return ( + this.all.publicUrl && + this.all.googleClientId && + this.all.googleClientSecret + ); } - return all[key]; -}; + /** + * Get connections from config. + * These are provided at runtime and not upserted + * This allows supporting cases where connections can be defined then later removed via config changes alone + * + * For environment variables: + * connection env vars must follow the format: + * SQLPAD_CONNECTIONS____ + * + * can be any value to associate a grouping a fields to a connection instance + * If supplying a connection that was previously defined in the nedb database, + * this would map internally to connection._id object. + * + * should be a field name identified in drivers. + * + * To define connections via envvars, `driver` field should be supplied. + * _id field is not required, as it is defined in second env var fragment. + * + * Example: SQLPAD_CONNECTIONS__ab123__sqlserverEncrypt="" + * + * From file, resulting parsed configuration from file is expected to follow format `connections..` + * { + * connections: { + * ab123: { + * sqlserverEncrypt: true + * } + * } + * } + * + * @param {object} [env] - optional environment override for testing + * @returns {array} arrayOfConnections + */ + getConnections(env = process.env) { + // Create a map of connections from parsing environment variable + const connectionsMapFromEnv = Object.keys(env) + .filter(key => key.startsWith('SQLPAD_CONNECTIONS__')) + .reduce((connectionsMap, envVar) => { + // eslint-disable-next-line no-unused-vars + const [prefix, id, field] = envVar.split('__'); + if (!connectionsMap[id]) { + connectionsMap[id] = {}; + } + connectionsMap[id][field] = env[envVar]; + return connectionsMap; + }, {}); -exports.getValidations = () => { - const errors = []; + // Get copy of connections from config file + const { connections } = _.cloneDeep(this.fileConfig); - // By default dbPath will exist as empty string, which is not valid - if (all.dbPath === '') { - errors.push(getOldConfigWarning()); - } + // connections key from file matches format that is constructed from env + // merge the 2 together then create an array out of them + const connectionsMap = { ...connectionsMapFromEnv, ...connections }; - return { - errors, - warnings: [...warnings] - }; -}; + const connectionsFromConfig = []; + Object.keys(connectionsMap).forEach(id => { + try { + let connection = connectionsMap[id]; + connection._id = id; + connection = drivers.validateConnection(connection); + connection.editable = false; + connectionsFromConfig.push(connection); + } catch (error) { + appLog.error( + error, + 'Environment connection configuration failed for %s', + id + ); + } + }); -exports.smtpConfigured = () => - all.smtpHost && all.smtpUser && all.smtpFrom && all.smtpPort && all.publicUrl; + return connectionsFromConfig; + } +} -exports.googleAuthConfigured = () => - all.publicUrl && all.googleClientId && all.googleClientSecret; +module.exports = Config; diff --git a/server/lib/connectionsFromConfig.js b/server/lib/connectionsFromConfig.js deleted file mode 100644 index cd38751d1..000000000 --- a/server/lib/connectionsFromConfig.js +++ /dev/null @@ -1,79 +0,0 @@ -const _ = require('lodash'); -const appLog = require('./appLog'); -const drivers = require('../drivers'); -const getConfigFromFile = require('./config/fromFile.js'); -const [configFromFile] = getConfigFromFile() || {}; - -/** - * Get connections from config. - * - * For environment variables: - * connection env vars must follow the format: - * SQLPAD_CONNECTIONS____ - * - * can be any value to associate a grouping a fields to a connection instance - * If supplying a connection that was previously defined in the nedb database, - * this would map internally to connection._id object. - * - * should be a field name identified in drivers. - * - * To define connections via envvars, `driver` field should be supplied. - * _id field is not required, as it is defined in second env var fragment. - * - * Example: SQLPAD_CONNECTIONS__ab123__sqlserverEncrypt="" - * - * From file, resulting parsed configuration from file is expected to follow format `connections..` - * { - * connections: { - * ab123: { - * sqlserverEncrypt: true - * } - * } - * } - * - * @param {object} env - * @returns {array} arrayOfConnections - */ -function getConnectionsFromConfig(env = process.env) { - // Create a map of connections from parsing environment variable - const connectionsMapFromEnv = Object.keys(env) - .filter(key => key.startsWith('SQLPAD_CONNECTIONS__')) - .reduce((connectionsMap, envVar) => { - // eslint-disable-next-line no-unused-vars - const [prefix, id, field] = envVar.split('__'); - if (!connectionsMap[id]) { - connectionsMap[id] = {}; - } - connectionsMap[id][field] = env[envVar]; - return connectionsMap; - }, {}); - - // Get copy of connections from config file - const { connections } = _.cloneDeep(configFromFile); - - // connections key from file matches format that is constructed from env - // merge the 2 together then create an array out of them - const connectionsMap = { ...connectionsMapFromEnv, ...connections }; - - const connectionsFromConfig = []; - Object.keys(connectionsMap).forEach(id => { - try { - let connection = connectionsMap[id]; - connection._id = id; - connection = drivers.validateConnection(connection); - connection.editable = false; - connectionsFromConfig.push(connection); - } catch (error) { - appLog.error( - error, - 'Environment connection configuration failed for %s', - id - ); - } - }); - return connectionsFromConfig; -} - -module.exports = { - getConnectionsFromConfig -}; diff --git a/server/models/connectionAccesses.js b/server/models/connectionAccesses.js index 44efd360e..487b8b6a8 100644 --- a/server/models/connectionAccesses.js +++ b/server/models/connectionAccesses.js @@ -18,6 +18,10 @@ const schema = Joi.object({ }); class ConnectionAccesses { + /** + * @param {*} nedb + * @param {import('../lib/config')} config + */ constructor(nedb, config) { this.nedb = nedb; this.config = config; diff --git a/server/models/connections.js b/server/models/connections.js index 906ca8aea..6b20d3938 100644 --- a/server/models/connections.js +++ b/server/models/connections.js @@ -1,10 +1,12 @@ const _ = require('lodash'); const drivers = require('../drivers'); const makeCipher = require('../lib/makeCipher'); -// TODO: during app init upsert these into db? -const { getConnectionsFromConfig } = require('../lib/connectionsFromConfig'); class Connections { + /** + * @param {*} nedb + * @param {import('../lib/config')} config + */ constructor(nedb, config) { this.nedb = nedb; this.config = config; @@ -30,7 +32,9 @@ class Connections { return this.decipherConnection(conn); }); - const allConnections = connectionsFromDb.concat(getConnectionsFromConfig()); + const allConnections = connectionsFromDb.concat( + this.config.getConnections() + ); return _.sortBy(allConnections, c => c.name.toLowerCase()); } @@ -42,9 +46,9 @@ class Connections { } // If connection was not found in db try env - const connectionFromEnv = getConnectionsFromConfig().find( - connection => connection._id === id - ); + const connectionFromEnv = this.config + .getConnections() + .find(connection => connection._id === id); return connectionFromEnv; } diff --git a/server/models/queries.js b/server/models/queries.js index 1a6823d6f..3e7f41a6b 100644 --- a/server/models/queries.js +++ b/server/models/queries.js @@ -44,6 +44,10 @@ const schema = Joi.object({ }); class Queries { + /** + * @param {*} nedb + * @param {import('../lib/config')} config + */ constructor(nedb, config) { this.nedb = nedb; this.config = config; diff --git a/server/models/queryHistory.js b/server/models/queryHistory.js index 61bb89545..b7b68ba19 100644 --- a/server/models/queryHistory.js +++ b/server/models/queryHistory.js @@ -18,6 +18,10 @@ const schema = Joi.object({ }); class QueryHistory { + /** + * @param {*} nedb + * @param {import('../lib/config')} config + */ constructor(nedb, config) { this.nedb = nedb; this.config = config; diff --git a/server/models/resultCache.js b/server/models/resultCache.js index 40b621d3b..4181462cf 100644 --- a/server/models/resultCache.js +++ b/server/models/resultCache.js @@ -18,6 +18,10 @@ BigInt.prototype.toJSON = function() { }; class ResultCache { + /** + * @param {*} nedb + * @param {import('../lib/config')} config + */ constructor(nedb, config) { this.nedb = nedb; this.config = config; diff --git a/server/models/schemaInfo.js b/server/models/schemaInfo.js index 13f96daac..3d1c0a958 100644 --- a/server/models/schemaInfo.js +++ b/server/models/schemaInfo.js @@ -3,6 +3,10 @@ function getCacheKey(connectionId) { } class SchemaInfo { + /** + * @param {*} nedb + * @param {import('../lib/config')} config + */ constructor(nedb, config) { this.nedb = nedb; this.config = config; diff --git a/server/models/users.js b/server/models/users.js index 93d33db89..ae5f9cc9a 100644 --- a/server/models/users.js +++ b/server/models/users.js @@ -27,6 +27,10 @@ const schema = Joi.object({ }); class Users { + /** + * @param {*} nedb + * @param {import('../lib/config')} config + */ constructor(nedb, config) { this.nedb = nedb; this.config = config; diff --git a/server/package.json b/server/package.json index 74702969a..b01492020 100644 --- a/server/package.json +++ b/server/package.json @@ -28,7 +28,7 @@ }, "scripts": { "prepublishOnly": "cd .. && ./scripts/build.sh", - "start": "node-dev server.js --dbPath ../db --port 3010 --debug --baseUrl /sqlpad --config './config.dev.ini' | pino-pretty", + "start": "node-dev server.js --config './config.dev.ini' | pino-pretty", "test": "rimraf ../dbtest && SQLPAD_DB_PATH='../dbtest' SQLPAD_DEBUG='true' SQLPAD_APP_LOG_LEVEL='silent' SQLPAD_WEB_LOG_LEVEL='silent' mocha test --timeout 10000 --recursive --exit", "fixlint": "eslint --fix '**/*.js'", "lint": "eslint '**/*.js'" diff --git a/server/server.js b/server/server.js index a5b059577..04246e6b0 100755 --- a/server/server.js +++ b/server/server.js @@ -3,17 +3,22 @@ const fs = require('fs'); const http = require('http'); const https = require('https'); +const minimist = require('minimist'); const detectPort = require('detect-port'); const makeApp = require('./app'); +const appLog = require('./lib/appLog'); +const Config = require('./lib/config'); +const { makeDb, getDb } = require('./lib/db'); // Parse command line flags to see if anything special needs to happen require('./lib/cli-flow.js'); -const appLog = require('./lib/appLog'); -const config = require('./lib/config'); -const { makeDb, getDb } = require('./lib/db'); +const argv = minimist(process.argv.slice(2)); +const config = new Config(argv); appLog.setLevel(config.get('appLogLevel')); +appLog.debug(config.get(), 'Final config values'); +appLog.debug(config.getConnections(), 'Connections from config'); makeDb(config); @@ -79,7 +84,7 @@ async function startServer(models) { if (keyPath && certPath) { // https only const _port = await detectPortOrSystemd(httpsPort); - if (!isFdObject(_port) && httpsPort !== _port) { + if (!isFdObject(_port) && parseInt(httpsPort, 10) !== parseInt(_port, 10)) { appLog.info( 'Port %d already occupied. Using port %d instead.', httpsPort, @@ -107,7 +112,7 @@ async function startServer(models) { } else { // http only const _port = await detectPortOrSystemd(port); - if (!isFdObject(_port) && port !== _port) { + if (!isFdObject(_port) && parseInt(port, 10) !== parseInt(_port, 10)) { appLog.info( 'Port %d already occupied. Using port %d instead.', port, diff --git a/server/test/lib/config.js b/server/test/lib/config.js index 5df192c1d..6d5c95328 100644 --- a/server/test/lib/config.js +++ b/server/test/lib/config.js @@ -1,5 +1,5 @@ const assert = require('assert'); -const config = require('../../lib/config'); +const { config } = require('../utils'); const fromDefault = require('../../lib/config/fromDefault'); const fromEnv = require('../../lib/config/fromEnv'); diff --git a/server/test/lib/email.js b/server/test/lib/email.js index 504feb091..df8d16c09 100644 --- a/server/test/lib/email.js +++ b/server/test/lib/email.js @@ -1,5 +1,5 @@ const makeEmail = require('../../lib/email.js'); -const config = require('../../lib/config'); +const { config } = require('../utils'); describe('lib/email.js', async function() { if (config.smtpConfigured() && process.env.SQLPAD_TEST_EMAIL) { diff --git a/server/test/models/connections.js b/server/test/models/connections.js index a7edc11e3..35cb6fb3e 100644 --- a/server/test/models/connections.js +++ b/server/test/models/connections.js @@ -1,8 +1,8 @@ const assert = require('assert'); +const { config } = require('../utils'); const { getDb } = require('../../lib/db'); -const { getConnectionsFromConfig } = require('../../lib/connectionsFromConfig'); -describe('getConnectionsFromConfig', function() { +describe('config.getConnections', function() { let models; before(async function() { @@ -11,12 +11,12 @@ describe('getConnectionsFromConfig', function() { }); it('handles empty object', function() { - const cs = getConnectionsFromConfig({}); + const cs = config.getConnections({}); assert(Array.isArray(cs)); }); it('skips partial connections', function() { - const cs = getConnectionsFromConfig({ + const cs = config.getConnections({ SQLPAD_CONNECTIONS__abc__driver: 'postgres' }); assert(Array.isArray(cs)); @@ -24,7 +24,7 @@ describe('getConnectionsFromConfig', function() { }); it('parses connection properly', function() { - const cs = getConnectionsFromConfig({ + const cs = config.getConnections({ SQLPAD_CONNECTIONS__abc__driver: 'postgres', SQLPAD_CONNECTIONS__abc__name: 'env-postgres', SQLPAD_CONNECTIONS__abc__host: 'localhost', diff --git a/server/test/utils.js b/server/test/utils.js index 800026c42..38668b1fa 100644 --- a/server/test/utils.js +++ b/server/test/utils.js @@ -1,11 +1,18 @@ const assert = require('assert'); +const minimist = require('minimist'); const request = require('supertest'); const consts = require('../lib/consts'); -const config = require('../lib/config'); +const Config = require('../lib/config'); const appLog = require('../lib/appLog'); const { makeDb, getDb } = require('../lib/db'); const makeApp = require('../app'); +const argv = minimist(process.argv.slice(2)); + +// TODO - restructure test utils to allow injecting different configurations +// config values can be supplied directly, parsing different sources can be tested separately +const config = new Config(argv); + makeDb(config); let app; @@ -108,6 +115,7 @@ before(async function() { }); module.exports = { + config, del, expectKeys, get, From a56da30616581915b40d9d5a0892c9bca8e68549 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Mon, 24 Feb 2020 16:29:33 -0600 Subject: [PATCH 019/658] Isolate toolbar components (#552) * Move toolbar spacer to own component * Move toolbar menu to own component * New query button to own component * Toggle schema button to own component * Query name input to own component * Tags button into own component * Clone button info own component * Format button into own component * Save button to own component * Run button to own component --- client/src/queryEditor/toolbar/Toolbar.js | 268 ++---------------- .../queryEditor/toolbar/ToolbarCloneButton.js | 31 ++ .../toolbar/ToolbarFormatQueryButton.js | 23 ++ client/src/queryEditor/toolbar/ToolbarMenu.js | 115 ++++++++ .../toolbar/ToolbarNewQueryButton.js | 27 ++ .../toolbar/ToolbarQueryNameInput.js | 31 ++ .../queryEditor/toolbar/ToolbarRunButton.js | 30 ++ .../queryEditor/toolbar/ToolbarSaveButton.js | 34 +++ .../src/queryEditor/toolbar/ToolbarSpacer.js | 18 ++ .../queryEditor/toolbar/ToolbarTagsButton.js | 20 ++ .../toolbar/ToolbarToggleSchemaButton.js | 23 ++ 11 files changed, 381 insertions(+), 239 deletions(-) create mode 100644 client/src/queryEditor/toolbar/ToolbarCloneButton.js create mode 100644 client/src/queryEditor/toolbar/ToolbarFormatQueryButton.js create mode 100644 client/src/queryEditor/toolbar/ToolbarMenu.js create mode 100644 client/src/queryEditor/toolbar/ToolbarNewQueryButton.js create mode 100644 client/src/queryEditor/toolbar/ToolbarQueryNameInput.js create mode 100644 client/src/queryEditor/toolbar/ToolbarRunButton.js create mode 100644 client/src/queryEditor/toolbar/ToolbarSaveButton.js create mode 100644 client/src/queryEditor/toolbar/ToolbarSpacer.js create mode 100644 client/src/queryEditor/toolbar/ToolbarTagsButton.js create mode 100644 client/src/queryEditor/toolbar/ToolbarToggleSchemaButton.js diff --git a/client/src/queryEditor/toolbar/Toolbar.js b/client/src/queryEditor/toolbar/Toolbar.js index 9a2474583..fe9dc5e93 100644 --- a/client/src/queryEditor/toolbar/Toolbar.js +++ b/client/src/queryEditor/toolbar/Toolbar.js @@ -1,127 +1,19 @@ -import { MenuItem } from '@reach/menu-button'; -import CopyIcon from 'mdi-react/ContentCopyIcon'; -import UnsavedIcon from 'mdi-react/ContentSaveEditIcon'; -import SaveIcon from 'mdi-react/ContentSaveIcon'; -import DatabaseIcon from 'mdi-react/DatabaseIcon'; -import DotsVerticalIcon from 'mdi-react/DotsVerticalIcon'; -import FormatIcon from 'mdi-react/FormatAlignLeftIcon'; -import NewIcon from 'mdi-react/PlusIcon'; -import TagsIcon from 'mdi-react/TagMultipleIcon'; -import PropTypes from 'prop-types'; -import React, { useState } from 'react'; -import { Redirect } from 'react-router-dom'; -import { connect } from 'unistore/react'; -import Button from '../../common/Button'; -import Drawer from '../../common/Drawer'; -import IconButton from '../../common/IconButton'; -import IconMenu from '../../common/IconMenu'; -import Input from '../../common/Input'; -import ConnectionListDrawer from '../../connections/ConnectionListDrawer'; -import ConnectionAccessListDrawer from '../../connectionAccesses/ConnectionAccessListDrawer'; -import { - formatQuery, - handleCloneClick, - resetNewQuery, - runQuery, - saveQuery, - setQueryState -} from '../../stores/queries'; -import { toggleSchema } from '../../stores/schema'; -import UserList from '../../users/UserList'; -import fetchJson from '../../utilities/fetch-json.js'; +import React from 'react'; import ConnectionDropDown from '../ConnectionDropdown'; -import QueryHistoryModal from '../../queryHistory/QueryHistoryModal'; -import AboutModal from './AboutModal'; import ChartButton from './ChartButton'; import QueryListButton from './QueryListButton'; -import QueryTagsModal from './QueryTagsModal'; - -const growSpacerStyle = { flexShrink: 0, flexGrow: 1, width: 8 }; -const spacerStyle = { flexShrink: 0, width: 8 }; - -function Spacer({ grow }) { - if (grow) { - return
; - } - return
; -} - -function mapStateToProps(state) { - return { - currentUser: state.currentUser, - isRunning: state.isRunning, - isSaving: state.isSaving, - queryId: state.query && state.query._id, - queryName: state.query && state.query.name, - showValidation: state.showValidation, - unsavedChanges: state.unsavedChanges - }; -} - -const ConnectedEditorNavBar = connect(mapStateToProps, store => ({ - toggleSchema, - formatQuery, - runQuery: runQuery(store), - saveQuery: saveQuery(store), - handleCloneClick, - resetNewQuery, - setQueryState -}))(React.memo(Toolbar)); - -function Toolbar({ - currentUser, - formatQuery, - handleCloneClick, - isRunning, - isSaving, - queryId, - queryName, - resetNewQuery, - runQuery, - saveQuery, - setQueryState, - showValidation, - toggleSchema, - unsavedChanges -}) { - const [showTags, setShowTags] = useState(false); - const [showUsers, setShowUsers] = useState(false); - const [redirectToSignIn, setRedirectToSignIn] = useState(false); - const [showQueryHistory, setShowQueryHistory] = useState(false); - const [showAbout, setShowAbout] = useState(false); - const [showConnections, setShowConnections] = useState(false); - const [showConnectionAccesses, setShowConnectionAccesses] = useState(false); - - const error = showValidation && !queryName.length; - const cloneDisabled = !queryId; - - const isAdmin = currentUser.role === 'admin'; - - if (redirectToSignIn) { - return ; - } - - // Reach UI menu / IconMenu does not like the {someBoolean && } patterm - // As a workaround optional MenuItems are managed in an array - let menuItems = []; - if (isAdmin) { - menuItems = [ - setShowConnections(true)}> - Connections - , - setShowUsers(true)}> - Users - , - setShowConnectionAccesses(true)} - > - Connection Accesses - - ]; - } - +import ToolbarCloneButton from './ToolbarCloneButton'; +import ToolbarFormatQueryButton from './ToolbarFormatQueryButton'; +import ToolbarMenu from './ToolbarMenu'; +import ToolbarNewQueryButton from './ToolbarNewQueryButton'; +import ToolbarQueryNameInput from './ToolbarQueryNameInput'; +import ToolbarRunButton from './ToolbarRunButton'; +import ToolbarSaveButton from './ToolbarSaveButton'; +import ToolbarSpacer from './ToolbarSpacer'; +import ToolbarTagsButton from './ToolbarTagsButton'; +import ToolbarToggleSchemaButton from './ToolbarToggleSchemaButton'; + +function Toolbar() { return (
+ - resetNewQuery()} - > - - - - - - - - + + - - - setQueryState('name', e.target.value)} - /> - - - - setShowTags(true)}> - - - - setShowTags(false)} /> + - - - + - - - + - saveQuery()} - disabled={isSaving} - > - {unsavedChanges ? : } - + + + + - + - + - + - + - }> - {menuItems} - setShowQueryHistory(true)} - > - Query History - - setShowAbout(true)} - > - About - - { - await fetchJson('GET', '/api/signout'); - setRedirectToSignIn(true); - }} - > - Sign out - - - - setShowUsers(false)} - placement={'right'} - > - - - - setShowQueryHistory(false)} - /> - - setShowAbout(false)} /> - - setShowConnections(false)} - /> - - setShowConnectionAccesses(false)} - /> +
); } -Toolbar.propTypes = { - isSaving: PropTypes.bool.isRequired, - isRunning: PropTypes.bool.isRequired, - handleCloneClick: PropTypes.func.isRequired, - saveQuery: PropTypes.func.isRequired, - runQuery: PropTypes.func.isRequired, - formatQuery: PropTypes.func.isRequired, - queryName: PropTypes.string.isRequired, - queryId: PropTypes.string, - showValidation: PropTypes.bool.isRequired, - unsavedChanges: PropTypes.bool.isRequired -}; - -export default ConnectedEditorNavBar; +export default React.memo(Toolbar); diff --git a/client/src/queryEditor/toolbar/ToolbarCloneButton.js b/client/src/queryEditor/toolbar/ToolbarCloneButton.js new file mode 100644 index 000000000..25f4ec7dd --- /dev/null +++ b/client/src/queryEditor/toolbar/ToolbarCloneButton.js @@ -0,0 +1,31 @@ +import CopyIcon from 'mdi-react/ContentCopyIcon'; +import React from 'react'; +import { connect } from 'unistore/react'; +import IconButton from '../../common/IconButton'; +import { handleCloneClick } from '../../stores/queries'; + +function mapStateToProps(state) { + return { + queryId: state.query && state.query._id + }; +} + +const ConnectedToolbarCloneButton = connect(mapStateToProps, store => ({ + handleCloneClick +}))(React.memo(ToolbarCloneButton)); + +function ToolbarCloneButton({ handleCloneClick, queryId }) { + const cloneDisabled = !queryId; + + return ( + + + + ); +} + +export default ConnectedToolbarCloneButton; diff --git a/client/src/queryEditor/toolbar/ToolbarFormatQueryButton.js b/client/src/queryEditor/toolbar/ToolbarFormatQueryButton.js new file mode 100644 index 000000000..443afdf08 --- /dev/null +++ b/client/src/queryEditor/toolbar/ToolbarFormatQueryButton.js @@ -0,0 +1,23 @@ +import FormatIcon from 'mdi-react/FormatAlignLeftIcon'; +import React from 'react'; +import { connect } from 'unistore/react'; +import IconButton from '../../common/IconButton'; +import { formatQuery } from '../../stores/queries'; + +function mapStateToProps(state) { + return {}; +} + +const ConnectedToolbarFormatQueryButton = connect(mapStateToProps, store => ({ + formatQuery +}))(React.memo(ToolbarFormatQueryButton)); + +function ToolbarFormatQueryButton({ formatQuery }) { + return ( + + + + ); +} + +export default ConnectedToolbarFormatQueryButton; diff --git a/client/src/queryEditor/toolbar/ToolbarMenu.js b/client/src/queryEditor/toolbar/ToolbarMenu.js new file mode 100644 index 000000000..22d3586ba --- /dev/null +++ b/client/src/queryEditor/toolbar/ToolbarMenu.js @@ -0,0 +1,115 @@ +import { MenuItem } from '@reach/menu-button'; +import DotsVerticalIcon from 'mdi-react/DotsVerticalIcon'; +import React, { useState } from 'react'; +import { Redirect } from 'react-router-dom'; +import { connect } from 'unistore/react'; +import Drawer from '../../common/Drawer'; +import IconMenu from '../../common/IconMenu'; +import ConnectionAccessListDrawer from '../../connectionAccesses/ConnectionAccessListDrawer'; +import ConnectionListDrawer from '../../connections/ConnectionListDrawer'; +import QueryHistoryModal from '../../queryHistory/QueryHistoryModal'; +import UserList from '../../users/UserList'; +import fetchJson from '../../utilities/fetch-json.js'; +import AboutModal from './AboutModal'; + +function mapStateToProps(state) { + return { + currentUser: state.currentUser + }; +} + +const ConnectedToolbarMenu = connect(mapStateToProps)(React.memo(ToolbarMenu)); + +function ToolbarMenu({ currentUser }) { + const [showUsers, setShowUsers] = useState(false); + const [redirectToSignIn, setRedirectToSignIn] = useState(false); + const [showQueryHistory, setShowQueryHistory] = useState(false); + const [showAbout, setShowAbout] = useState(false); + const [showConnections, setShowConnections] = useState(false); + const [showConnectionAccesses, setShowConnectionAccesses] = useState(false); + + const isAdmin = currentUser.role === 'admin'; + + if (redirectToSignIn) { + return ; + } + + // Reach UI menu / IconMenu does not like the {someBoolean && } patterm + // As a workaround optional MenuItems are managed in an array + let menuItems = []; + if (isAdmin) { + menuItems = [ + setShowConnections(true)}> + Connections + , + setShowUsers(true)}> + Users + , + setShowConnectionAccesses(true)} + > + Connection Accesses + + ]; + } + + return ( +
+ }> + {menuItems} + setShowQueryHistory(true)} + > + Query History + + setShowAbout(true)} + > + About + + { + await fetchJson('GET', '/api/signout'); + setRedirectToSignIn(true); + }} + > + Sign out + + + + setShowUsers(false)} + placement={'right'} + > + + + + setShowQueryHistory(false)} + /> + + setShowAbout(false)} /> + + setShowConnections(false)} + /> + + setShowConnectionAccesses(false)} + /> +
+ ); +} + +export default ConnectedToolbarMenu; diff --git a/client/src/queryEditor/toolbar/ToolbarNewQueryButton.js b/client/src/queryEditor/toolbar/ToolbarNewQueryButton.js new file mode 100644 index 000000000..8e67eaa59 --- /dev/null +++ b/client/src/queryEditor/toolbar/ToolbarNewQueryButton.js @@ -0,0 +1,27 @@ +import NewIcon from 'mdi-react/PlusIcon'; +import React from 'react'; +import { connect } from 'unistore/react'; +import IconButton from '../../common/IconButton'; +import { resetNewQuery } from '../../stores/queries'; + +function mapStateToProps(state) { + return {}; +} + +const ConnectedToolbarNewQueryButton = connect(mapStateToProps, store => ({ + resetNewQuery +}))(React.memo(ToolbarNewQueryButton)); + +function ToolbarNewQueryButton({ resetNewQuery }) { + return ( + resetNewQuery()} + > + + + ); +} + +export default ConnectedToolbarNewQueryButton; diff --git a/client/src/queryEditor/toolbar/ToolbarQueryNameInput.js b/client/src/queryEditor/toolbar/ToolbarQueryNameInput.js new file mode 100644 index 000000000..e89e1efca --- /dev/null +++ b/client/src/queryEditor/toolbar/ToolbarQueryNameInput.js @@ -0,0 +1,31 @@ +import React from 'react'; +import { connect } from 'unistore/react'; +import Input from '../../common/Input'; +import { setQueryState } from '../../stores/queries'; + +function mapStateToProps(state) { + return { + queryName: state.query && state.query.name, + showValidation: state.showValidation + }; +} + +const ConnectedToolbarQueryNameInput = connect(mapStateToProps, store => ({ + setQueryState +}))(React.memo(ToolbarQueryNameInput)); + +function ToolbarQueryNameInput({ queryName, setQueryState, showValidation }) { + const error = showValidation && !queryName.length; + + return ( + setQueryState('name', e.target.value)} + /> + ); +} + +export default ConnectedToolbarQueryNameInput; diff --git a/client/src/queryEditor/toolbar/ToolbarRunButton.js b/client/src/queryEditor/toolbar/ToolbarRunButton.js new file mode 100644 index 000000000..e07229bb6 --- /dev/null +++ b/client/src/queryEditor/toolbar/ToolbarRunButton.js @@ -0,0 +1,30 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import { connect } from 'unistore/react'; +import Button from '../../common/Button'; +import { runQuery } from '../../stores/queries'; + +function mapStateToProps(state) { + return { + isRunning: state.isRunning + }; +} + +const ConnectedToolbarRunButton = connect(mapStateToProps, store => ({ + runQuery: runQuery(store) +}))(React.memo(ToolbarRunButton)); + +function ToolbarRunButton({ isRunning, runQuery }) { + return ( + + ); +} + +ToolbarRunButton.propTypes = { + isRunning: PropTypes.bool.isRequired, + runQuery: PropTypes.func.isRequired +}; + +export default ConnectedToolbarRunButton; diff --git a/client/src/queryEditor/toolbar/ToolbarSaveButton.js b/client/src/queryEditor/toolbar/ToolbarSaveButton.js new file mode 100644 index 000000000..c567f81c4 --- /dev/null +++ b/client/src/queryEditor/toolbar/ToolbarSaveButton.js @@ -0,0 +1,34 @@ +import UnsavedIcon from 'mdi-react/ContentSaveEditIcon'; +import SaveIcon from 'mdi-react/ContentSaveIcon'; +import PropTypes from 'prop-types'; +import React from 'react'; +import { connect } from 'unistore/react'; +import IconButton from '../../common/IconButton'; +import { saveQuery } from '../../stores/queries'; + +function mapStateToProps(state) { + return { + isSaving: state.isSaving, + unsavedChanges: state.unsavedChanges + }; +} + +const ConnectedToolbarSaveButton = connect(mapStateToProps, store => ({ + saveQuery: saveQuery(store) +}))(React.memo(ToolbarSaveButton)); + +function ToolbarSaveButton({ isSaving, saveQuery, unsavedChanges }) { + return ( + saveQuery()} disabled={isSaving}> + {unsavedChanges ? : } + + ); +} + +ToolbarSaveButton.propTypes = { + isSaving: PropTypes.bool.isRequired, + saveQuery: PropTypes.func.isRequired, + unsavedChanges: PropTypes.bool.isRequired +}; + +export default ConnectedToolbarSaveButton; diff --git a/client/src/queryEditor/toolbar/ToolbarSpacer.js b/client/src/queryEditor/toolbar/ToolbarSpacer.js new file mode 100644 index 000000000..7e086919c --- /dev/null +++ b/client/src/queryEditor/toolbar/ToolbarSpacer.js @@ -0,0 +1,18 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +const growSpacerStyle = { flexShrink: 0, flexGrow: 1, width: 8 }; +const spacerStyle = { flexShrink: 0, width: 8 }; + +function ToolbarSpacer({ grow }) { + if (grow) { + return
; + } + return
; +} + +ToolbarSpacer.propTypes = { + grow: PropTypes.bool +}; + +export default ToolbarSpacer; diff --git a/client/src/queryEditor/toolbar/ToolbarTagsButton.js b/client/src/queryEditor/toolbar/ToolbarTagsButton.js new file mode 100644 index 000000000..b02448266 --- /dev/null +++ b/client/src/queryEditor/toolbar/ToolbarTagsButton.js @@ -0,0 +1,20 @@ +import TagsIcon from 'mdi-react/TagMultipleIcon'; +import React, { useState } from 'react'; +import IconButton from '../../common/IconButton'; +import QueryTagsModal from './QueryTagsModal'; + +function ToolbarTagsButton() { + const [showTags, setShowTags] = useState(false); + + return ( +
+ setShowTags(true)}> + + + + setShowTags(false)} /> +
+ ); +} + +export default ToolbarTagsButton; diff --git a/client/src/queryEditor/toolbar/ToolbarToggleSchemaButton.js b/client/src/queryEditor/toolbar/ToolbarToggleSchemaButton.js new file mode 100644 index 000000000..29a62afc5 --- /dev/null +++ b/client/src/queryEditor/toolbar/ToolbarToggleSchemaButton.js @@ -0,0 +1,23 @@ +import DatabaseIcon from 'mdi-react/DatabaseIcon'; +import React from 'react'; +import { connect } from 'unistore/react'; +import IconButton from '../../common/IconButton'; +import { toggleSchema } from '../../stores/schema'; + +function mapStateToProps(state) { + return {}; +} + +const ConnectedToolbarToggleSchemaButton = connect(mapStateToProps, store => ({ + toggleSchema +}))(React.memo(ToolbarToggleSchemaButton)); + +function ToolbarToggleSchemaButton({ toggleSchema }) { + return ( + + + + ); +} + +export default ConnectedToolbarToggleSchemaButton; From 797c26f84e2cbdf555b47ccd783b8c298e001700 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 25 Feb 2020 13:25:29 -0600 Subject: [PATCH 020/658] Test infrastructure improvements (#553) * Inject environment things to config * Remove default config file * Reduce mock query time when running tests * Add dbInMemory config setting * hardcode test config * Add TestUtil class * Remove expectKeys from utils * Isolated test environments --- server/drivers/mock/index.js | 8 +- server/drivers/mock/test.js | 3 +- server/lib/config/configItems.js | 5 + server/lib/config/fromEnv.js | 2 +- server/lib/config/fromFile.js | 6 +- server/lib/config/index.js | 8 +- server/lib/db.js | 23 ++-- server/package.json | 2 +- server/server.js | 2 +- server/test/api/app.js | 20 ++- server/test/api/connection-accesses.js | 11 +- server/test/api/connections.js | 5 +- server/test/api/drivers.js | 6 +- server/test/api/format-sql.js | 6 +- server/test/api/password-reset.js | 24 ++-- server/test/api/queries.js | 5 +- server/test/api/query-history.js | 8 +- server/test/api/query-result.js | 8 +- server/test/api/schema-info.js | 8 +- server/test/api/signup-signin.js | 11 +- server/test/api/tags.js | 6 +- server/test/api/test-connection.js | 9 +- server/test/api/users.js | 5 +- server/test/lib/config.js | 13 +- server/test/lib/email.js | 8 +- server/test/models/connections.js | 20 ++- server/test/utils.js | 164 +++++++++++-------------- 27 files changed, 216 insertions(+), 180 deletions(-) diff --git a/server/drivers/mock/index.js b/server/drivers/mock/index.js index 15d13028d..ab735b41e 100644 --- a/server/drivers/mock/index.js +++ b/server/drivers/mock/index.js @@ -89,7 +89,8 @@ function cartesianify(rows, field) { * @param {object} connection */ async function runQuery(query, connection) { - await wait(2000); + const ms = connection.hasOwnProperty('wait') ? connection.wait : 2000; + await wait(ms); // Connection here doesn't actually matter. // Someday this mock could get fancy and change output based on some connection value @@ -315,6 +316,11 @@ const fields = [ key: 'socksPassword', formType: 'TEXT', label: 'Password for socks proxy' + }, + { + key: 'wait', + formType: 'TEXT', + label: 'Milliseconds to wait running query' } ]; diff --git a/server/drivers/mock/test.js b/server/drivers/mock/test.js index a80f2f144..1fe6373f2 100644 --- a/server/drivers/mock/test.js +++ b/server/drivers/mock/test.js @@ -8,7 +8,8 @@ const connection = { database: 'sqlpad', username: 'sqlpad', password: 'sqlpad', - maxRows: 100 + maxRows: 100, + wait: 0 }; describe('drivers/mock', function() { diff --git a/server/lib/config/configItems.js b/server/lib/config/configItems.js index 392995378..8a6787a05 100644 --- a/server/lib/config/configItems.js +++ b/server/lib/config/configItems.js @@ -218,6 +218,11 @@ const configItems = [ key: 'webLogLevel', envVar: 'SQLPAD_WEB_LOG_LEVEL', default: 'info' + }, + { + key: 'dbInMemory', + envVar: 'SQLPAD_DB_IN_MEMORY', + default: false } ]; diff --git a/server/lib/config/fromEnv.js b/server/lib/config/fromEnv.js index f2f631f13..4454e6c48 100644 --- a/server/lib/config/fromEnv.js +++ b/server/lib/config/fromEnv.js @@ -5,7 +5,7 @@ const definitions = require('./configItems'); * @param {object} env optional * @returns {object} configMap */ -module.exports = function getEnvConfig(env = process.env) { +module.exports = function getEnvConfig(env) { return definitions .filter(definition => definition.hasOwnProperty('envVar')) .reduce((envMap, definition) => { diff --git a/server/lib/config/fromFile.js b/server/lib/config/fromFile.js index 0a32a9e07..69df61092 100644 --- a/server/lib/config/fromFile.js +++ b/server/lib/config/fromFile.js @@ -1,17 +1,13 @@ -const minimist = require('minimist'); const fs = require('fs'); const ini = require('ini'); const configItems = require('./configItems'); -const argv = minimist(process.argv.slice(2)); -const configFilePathFromConfig = argv.config || process.env.SQLPAD_CONFIG; - /** * Reads and parses config file. * This file may be either JSON or INI file. * @param {string} configFilePath */ -function fromFile(configFilePath = configFilePathFromConfig) { +function fromFile(configFilePath) { let parsedFile = {}; const warnings = []; diff --git a/server/lib/config/index.js b/server/lib/config/index.js index a1d184404..be060baf0 100644 --- a/server/lib/config/index.js +++ b/server/lib/config/index.js @@ -8,12 +8,14 @@ const fromFile = require('./fromFile'); const getOldConfigWarning = require('./getOldConfigWarning'); class Config { - constructor(argv) { + constructor(argv, env) { this.argv = argv; + const configFilePathFromConfig = argv.config || env.SQLPAD_CONFIG; + const defaultConfig = fromDefault(); - const envConfig = fromEnv(); - const [fileConfig, warnings] = fromFile(); + const envConfig = fromEnv(env); + const [fileConfig, warnings] = fromFile(configFilePathFromConfig); const cliConfig = fromCli(argv); const all = { ...defaultConfig, ...envConfig, ...fileConfig, ...cliConfig }; diff --git a/server/lib/db.js b/server/lib/db.js index d014c0157..1c65255b4 100644 --- a/server/lib/db.js +++ b/server/lib/db.js @@ -40,23 +40,26 @@ async function initNedb(config) { const admin = config.get('admin'); const adminPassword = config.get('adminPassword'); const dbPath = config.get('dbPath'); + const dbInMemory = config.get('dbInMemory'); const allowConnectionAccessToEveryone = config.get( 'allowConnectionAccessToEveryone' ); mkdirp.sync(path.join(dbPath, '/cache')); + function getDatastore(dbName) { + return dbInMemory + ? datastore() + : datastore({ filename: path.join(dbPath, dbName) }); + } + const nedb = { - users: datastore({ filename: path.join(dbPath, 'users.db') }), - connections: datastore({ - filename: path.join(dbPath, 'connections.db') - }), - connectionAccesses: datastore({ - filename: path.join(dbPath, 'connectionaccesses.db') - }), - queries: datastore({ filename: path.join(dbPath, 'queries.db') }), - queryHistory: datastore({ filename: path.join(dbPath, 'queryhistory.db') }), - cache: datastore({ filename: path.join(dbPath, 'cache.db') }), + users: getDatastore('users.db'), + connections: getDatastore('connections.db'), + connectionAccesses: getDatastore('connectionaccesses.db'), + queries: getDatastore('queries.db'), + queryHistory: getDatastore('queryhistory.db'), + cache: getDatastore('cache.db'), instances: [ 'users', 'connections', diff --git a/server/package.json b/server/package.json index b01492020..59faf83b9 100644 --- a/server/package.json +++ b/server/package.json @@ -29,7 +29,7 @@ "scripts": { "prepublishOnly": "cd .. && ./scripts/build.sh", "start": "node-dev server.js --config './config.dev.ini' | pino-pretty", - "test": "rimraf ../dbtest && SQLPAD_DB_PATH='../dbtest' SQLPAD_DEBUG='true' SQLPAD_APP_LOG_LEVEL='silent' SQLPAD_WEB_LOG_LEVEL='silent' mocha test --timeout 10000 --recursive --exit", + "test": "rimraf ../dbtest && mocha test --timeout 10000 --recursive --exit", "fixlint": "eslint --fix '**/*.js'", "lint": "eslint '**/*.js'" }, diff --git a/server/server.js b/server/server.js index 04246e6b0..ecf3faaae 100755 --- a/server/server.js +++ b/server/server.js @@ -14,7 +14,7 @@ const { makeDb, getDb } = require('./lib/db'); require('./lib/cli-flow.js'); const argv = minimist(process.argv.slice(2)); -const config = new Config(argv); +const config = new Config(argv, process.env); appLog.setLevel(config.get('appLogLevel')); appLog.debug(config.get(), 'Final config values'); diff --git a/server/test/api/app.js b/server/test/api/app.js index aca838fdd..f8fdbb440 100644 --- a/server/test/api/app.js +++ b/server/test/api/app.js @@ -1,5 +1,11 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtils = require('../utils'); + +function expectKeys(data, expectedKeys) { + Object.keys(data).forEach(key => + assert(expectedKeys.includes(key), `expected key ${key}`) + ); +} const expectedKeys = [ 'adminRegistrationOpen', @@ -20,10 +26,16 @@ const expectedConfigKeys = [ ]; describe('api/app', function() { + const utils = new TestUtils(); + + before(function() { + return utils.init(true); + }); + it('returns expected values', async function() { const body = await utils.get(null, '/api/app'); - utils.expectKeys(body, expectedKeys); - utils.expectKeys(body.config, expectedConfigKeys); + expectKeys(body, expectedKeys); + expectKeys(body.config, expectedConfigKeys); assert.equal( Object.keys(body.config).length, expectedConfigKeys.length, @@ -33,6 +45,6 @@ describe('api/app', function() { it('handles unknown baseUrl', async function() { const body = await utils.get(null, '/literally/any/path/api/app'); - utils.expectKeys(body, expectedKeys); + expectKeys(body, expectedKeys); }); }); diff --git a/server/test/api/connection-accesses.js b/server/test/api/connection-accesses.js index e134b0aa2..0882a1c67 100644 --- a/server/test/api/connection-accesses.js +++ b/server/test/api/connection-accesses.js @@ -1,8 +1,9 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtils = require('../utils'); const consts = require('../../lib/consts'); describe('api/connection-accesses', function() { + const utils = new TestUtils(); let admin2; let user1; let user2; @@ -12,7 +13,7 @@ describe('api/connection-accesses', function() { let connectionAccess1; before(async function() { - await utils.resetWithUser(); + await utils.init(true); let connBody = await utils.post('admin', '/api/connections', { name: 'test connection 1', @@ -20,7 +21,8 @@ describe('api/connection-accesses', function() { host: 'localhost', database: 'sqlpad', username: 'sqlpad', - password: 'sqlpad' + password: 'sqlpad', + wait: 0 }); connection1 = connBody.connection; @@ -30,7 +32,8 @@ describe('api/connection-accesses', function() { host: 'localhost', database: 'sqlpad', username: 'sqlpad', - password: 'sqlpad' + password: 'sqlpad', + wait: 0 }); connection2 = connBody.connection; diff --git a/server/test/api/connections.js b/server/test/api/connections.js index 50ca9adde..5c886bc18 100644 --- a/server/test/api/connections.js +++ b/server/test/api/connections.js @@ -1,11 +1,12 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtils = require('../utils'); describe('api/connections', function() { + const utils = new TestUtils(); let connection; before(function() { - return utils.resetWithUser(); + return utils.init(true); }); it('Returns empty array', async function() { diff --git a/server/test/api/drivers.js b/server/test/api/drivers.js index 8adef0b90..9b45a60cc 100644 --- a/server/test/api/drivers.js +++ b/server/test/api/drivers.js @@ -1,9 +1,11 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtils = require('../utils'); describe('api/drivers', function() { + const utils = new TestUtils(); + before(function() { - return utils.resetWithUser(); + return utils.init(true); }); it('gets drivers', async function() { diff --git a/server/test/api/format-sql.js b/server/test/api/format-sql.js index b86130c87..b1074b664 100644 --- a/server/test/api/format-sql.js +++ b/server/test/api/format-sql.js @@ -1,9 +1,11 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtils = require('../utils'); describe('api/format-sql', function() { + const utils = new TestUtils(); + before(function() { - return utils.resetWithUser(); + return utils.init(true); }); it('format sql query', async function() { diff --git a/server/test/api/password-reset.js b/server/test/api/password-reset.js index f25471bf5..73e4fc501 100644 --- a/server/test/api/password-reset.js +++ b/server/test/api/password-reset.js @@ -1,20 +1,20 @@ const assert = require('assert'); -const utils = require('../utils'); const uuid = require('uuid'); -const { getDb } = require('../../lib/db'); - -async function setReset() { - const { models } = await getDb(); - const user = await models.users.findOneByEmail('admin@test.com'); - const passwordResetId = uuid.v4(); - user.passwordResetId = passwordResetId; - await models.users.save(user); - return passwordResetId; -} +const TestUtils = require('../utils'); describe('api/password-reset', function() { + const utils = new TestUtils(); + + async function setReset() { + const user = await utils.models.users.findOneByEmail('admin@test.com'); + const passwordResetId = uuid.v4(); + user.passwordResetId = passwordResetId; + await utils.models.users.save(user); + return passwordResetId; + } + before(function() { - return utils.resetWithUser(); + return utils.init(true); }); it('Allows resetting password', async function() { diff --git a/server/test/api/queries.js b/server/test/api/queries.js index 44d123877..8c72ec481 100644 --- a/server/test/api/queries.js +++ b/server/test/api/queries.js @@ -1,11 +1,12 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtils = require('../utils'); describe('api/queries', function() { + const utils = new TestUtils(); let query; before(function() { - return utils.resetWithUser(); + return utils.init(true); }); it('Returns empty array', async function() { diff --git a/server/test/api/query-history.js b/server/test/api/query-history.js index 0da638e6f..7f07b373e 100644 --- a/server/test/api/query-history.js +++ b/server/test/api/query-history.js @@ -1,5 +1,5 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtils = require('../utils'); const urlFilterToNeDbFilter = require('../../lib/urlFilterToNeDbFilter'); const queryText1 = ` @@ -19,11 +19,12 @@ const queryText2 = ` `; describe('api/query-history', function() { + const utils = new TestUtils(); let connection; let query1; before(async function() { - await utils.resetWithUser(); + await utils.init(true); const connBody = await utils.post('admin', '/api/connections', { name: 'test postgres', @@ -31,7 +32,8 @@ describe('api/query-history', function() { host: 'localhost', database: 'sqlpad', username: 'sqlpad', - password: 'sqlpad' + password: 'sqlpad', + wait: 0 }); connection = connBody.connection; diff --git a/server/test/api/query-result.js b/server/test/api/query-result.js index 69121c84d..e56f79f41 100644 --- a/server/test/api/query-result.js +++ b/server/test/api/query-result.js @@ -1,5 +1,5 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtils = require('../utils'); const queryText = ` -- dimensions = department 10, orderdate 10 @@ -25,11 +25,12 @@ function validateQueryResult(queryResult) { } describe('api/query-result', function() { + const utils = new TestUtils(); let query; let connection; before(async function() { - await utils.resetWithUser(); + await utils.init(true); const connBody = await utils.post('admin', '/api/connections', { name: 'test postgres', @@ -37,7 +38,8 @@ describe('api/query-result', function() { host: 'localhost', database: 'sqlpad', username: 'sqlpad', - password: 'sqlpad' + password: 'sqlpad', + wait: 0 }); connection = connBody.connection; diff --git a/server/test/api/schema-info.js b/server/test/api/schema-info.js index 4a20065b2..13cd8e4d3 100644 --- a/server/test/api/schema-info.js +++ b/server/test/api/schema-info.js @@ -1,18 +1,20 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtils = require('../utils'); describe('api/schema-info', function() { + const utils = new TestUtils(); let connection; before(async function() { - await utils.resetWithUser(); + await utils.init(true); const body = await utils.post('admin', '/api/connections', { driver: 'mock', name: 'sqlpad', host: 'localhost', database: 'sqlpad', username: 'sqlpad', - password: 'sqlpad' + password: 'sqlpad', + wait: 0 }); assert(!body.error, 'no error'); connection = body.connection; diff --git a/server/test/api/signup-signin.js b/server/test/api/signup-signin.js index b0ac890a1..22bfaed15 100644 --- a/server/test/api/signup-signin.js +++ b/server/test/api/signup-signin.js @@ -1,9 +1,11 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtil = require('../utils'); describe('api/signup', function() { + const utils = new TestUtil(); + before(function() { - return utils.reset(); + return utils.init(); }); it('allows new user signup', async function() { @@ -50,9 +52,12 @@ describe('api/signup', function() { }); describe('api/signin', function() { + const utils = new TestUtil(); + before(function() { - return utils.resetWithUser(); + return utils.init(true); }); + it('signs in user', async function() { const body = await utils.post(null, '/api/signin', { password: 'admin', diff --git a/server/test/api/tags.js b/server/test/api/tags.js index 589717ea7..7663127ca 100644 --- a/server/test/api/tags.js +++ b/server/test/api/tags.js @@ -1,9 +1,11 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtils = require('../utils'); describe('api/tags', function() { + const utils = new TestUtils(); + before(function() { - return utils.resetWithUser(); + return utils.init(true); }); it('Returns empty array', async function() { diff --git a/server/test/api/test-connection.js b/server/test/api/test-connection.js index dbabb80ef..9fd0d534a 100644 --- a/server/test/api/test-connection.js +++ b/server/test/api/test-connection.js @@ -1,9 +1,11 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtils = require('../utils'); describe('api/test-connection', function() { + const utils = new TestUtils(); + before(function() { - return utils.resetWithUser(); + return utils.init(true); }); it('tests connection', async function() { @@ -13,7 +15,8 @@ describe('api/test-connection', function() { host: 'localhost', database: 'sqlpad', username: 'sqlpad', - password: 'sqlpad' + password: 'sqlpad', + wait: 0 }); assert(!body.error, 'Expect no error'); }); diff --git a/server/test/api/users.js b/server/test/api/users.js index 650a3427c..f43d894ea 100644 --- a/server/test/api/users.js +++ b/server/test/api/users.js @@ -1,11 +1,12 @@ const assert = require('assert'); -const utils = require('../utils'); +const TestUtils = require('../utils'); describe('api/users', function() { + const utils = new TestUtils(); let user; before(function() { - return utils.resetWithUser(); + return utils.init(true); }); it('Returns initial array', async function() { diff --git a/server/test/lib/config.js b/server/test/lib/config.js index 6d5c95328..8e244cdc3 100644 --- a/server/test/lib/config.js +++ b/server/test/lib/config.js @@ -1,6 +1,5 @@ const assert = require('assert'); -const { config } = require('../utils'); - +const TestUtils = require('../utils'); const fromDefault = require('../../lib/config/fromDefault'); const fromEnv = require('../../lib/config/fromEnv'); const fromCli = require('../../lib/config/fromCli'); @@ -30,10 +29,16 @@ describe('config', function() { }); describe('lib/config', function() { + const utils = new TestUtils(); + + before(function() { + return utils.init(true); + }); + it('.get() should get a value provided by default', async function() { - assert.equal(config.get('httpsPort'), 443, 'httpsPort=443'); + assert.equal(utils.config.get('httpsPort'), 443, 'httpsPort=443'); }); it('.get() should only accept key in config items', async function() { - assert.throws(() => config.get('non-existent-key'), Error); + assert.throws(() => utils.config.get('non-existent-key'), Error); }); }); diff --git a/server/test/lib/email.js b/server/test/lib/email.js index df8d16c09..b46c7bc77 100644 --- a/server/test/lib/email.js +++ b/server/test/lib/email.js @@ -1,9 +1,11 @@ const makeEmail = require('../../lib/email.js'); -const { config } = require('../utils'); +const TestUtils = require('../utils'); describe('lib/email.js', async function() { - if (config.smtpConfigured() && process.env.SQLPAD_TEST_EMAIL) { - const email = makeEmail(config); + const utils = new TestUtils(); + + if (utils.config.smtpConfigured() && process.env.SQLPAD_TEST_EMAIL) { + const email = makeEmail(utils.config); it('should send invites', function() { return email.sendInvite(process.env.SQLPAD_TEST_EMAIL); diff --git a/server/test/models/connections.js b/server/test/models/connections.js index 35cb6fb3e..957143b70 100644 --- a/server/test/models/connections.js +++ b/server/test/models/connections.js @@ -1,22 +1,20 @@ const assert = require('assert'); -const { config } = require('../utils'); -const { getDb } = require('../../lib/db'); +const TestUtils = require('../utils'); describe('config.getConnections', function() { - let models; + const utils = new TestUtils(); - before(async function() { - const db = await getDb(); - models = db.models; + before(function() { + return utils.init(true); }); it('handles empty object', function() { - const cs = config.getConnections({}); + const cs = utils.config.getConnections({}); assert(Array.isArray(cs)); }); it('skips partial connections', function() { - const cs = config.getConnections({ + const cs = utils.config.getConnections({ SQLPAD_CONNECTIONS__abc__driver: 'postgres' }); assert(Array.isArray(cs)); @@ -24,7 +22,7 @@ describe('config.getConnections', function() { }); it('parses connection properly', function() { - const cs = config.getConnections({ + const cs = utils.config.getConnections({ SQLPAD_CONNECTIONS__abc__driver: 'postgres', SQLPAD_CONNECTIONS__abc__name: 'env-postgres', SQLPAD_CONNECTIONS__abc__host: 'localhost', @@ -50,7 +48,7 @@ describe('config.getConnections', function() { process.env.SQLPAD_CONNECTIONS__abc__port = '5432'; process.env.SQLPAD_CONNECTIONS__abc__postgresSsl = 'true'; - const allConnections = await models.connections.findAll(); + const allConnections = await utils.models.connections.findAll(); const connection = allConnections.find(c => c._id === 'abc'); assert.strictEqual(connection.name, 'env-postgres', 'connection.name'); assert.strictEqual(connection.editable, false, 'connection.editable'); @@ -69,7 +67,7 @@ describe('config.getConnections', function() { process.env.SQLPAD_CONNECTIONS__abc__port = '5432'; process.env.SQLPAD_CONNECTIONS__abc__postgresSsl = 'true'; - const connection = await models.connections.findOneById('abc'); + const connection = await utils.models.connections.findOneById('abc'); assert.strictEqual(connection.name, 'env-postgres', 'connection.name'); assert.strictEqual(connection.editable, false, 'connection.editable'); diff --git a/server/test/utils.js b/server/test/utils.js index 38668b1fa..69b530952 100644 --- a/server/test/utils.js +++ b/server/test/utils.js @@ -1,21 +1,11 @@ const assert = require('assert'); -const minimist = require('minimist'); +const uuid = require('uuid'); const request = require('supertest'); -const consts = require('../lib/consts'); const Config = require('../lib/config'); const appLog = require('../lib/appLog'); const { makeDb, getDb } = require('../lib/db'); const makeApp = require('../app'); -const argv = minimist(process.argv.slice(2)); - -// TODO - restructure test utils to allow injecting different configurations -// config values can be supplied directly, parsing different sources can be tested separately -const config = new Config(argv); - -makeDb(config); -let app; - const users = { admin: { email: 'admin@test.com', @@ -29,40 +19,79 @@ const users = { } }; -function expectKeys(data, expectedKeys) { - Object.keys(data).forEach(key => - assert(expectedKeys.includes(key), `expected key ${key}`) - ); -} - -async function reset() { - const { nedb } = await getDb(); - return Promise.all([ - nedb.users.remove({}, { multi: true }), - nedb.queries.remove({}, { multi: true }), - nedb.queryHistory.remove({}, { multi: true }), - nedb.connections.remove({}, { multi: true }), - nedb.connectionAccesses.remove( +class TestUtils { + constructor(args = {}, env = {}) { + const config = new Config( { - $not: { - $and: [ - { connectionId: consts.EVERY_CONNECTION_ID }, - { userId: consts.EVERYONE_ID } - ] - } + debug: true, + // Despite being in-memory, still need a file path for cache and session files + // Eventually these will be moved to sqlite and we can be fully-in-memory + dbPath: '../dbtest', + dbInMemory: true, + ...args }, - { multi: true } - ) - ]); -} + { + SQLPAD_APP_LOG_LEVEL: 'silent', + SQLPAD_WEB_LOG_LEVEL: 'silent', + ...env + } + ); + + appLog.setLevel(config.get('appLogLevel')); + + this.config = config; + this.appLog = appLog; + this.instanceAlias = uuid.v1(); + + makeDb(config, this.instanceAlias); + this.app = undefined; + } + + async init(withUsers) { + const { models } = await getDb(this.instanceAlias); + + this.models = models; + this.app = makeApp(this.config, models); + + assert.throws(() => { + makeDb(this.config, this.instanceAlias); + }, 'ensure nedb can be made once'); + + if (withUsers) { + const saves = Object.keys(users).map(key => { + return models.users.save(users[key]); + }); + await Promise.all(saves); + } + } + + async del(role, url, statusCode = 200) { + let req = request(this.app).delete(url); + req = addAuth(req, role); + const response = await req.expect(statusCode); + return response.body; + } -async function resetWithUser() { - await reset(); - const { models } = await getDb(); - const saves = Object.keys(users).map(key => { - return models.users.save(users[key]); - }); - return Promise.all(saves); + async get(role, url, statusCode = 200) { + let req = request(this.app).get(url); + req = addAuth(req, role); + const response = await req.expect(statusCode); + return response.body; + } + + async post(role, url, body, statusCode = 200) { + let req = request(this.app).post(url); + req = addAuth(req, role); + const response = await req.send(body).expect(statusCode); + return response.body; + } + + async put(role, url, body, statusCode = 200) { + let req = request(this.app).put(url); + req = addAuth(req, role); + const response = await req.send(body).expect(statusCode); + return response.body; + } } function addAuth(req, role) { @@ -74,53 +103,4 @@ function addAuth(req, role) { return req; } -async function del(role, url, statusCode = 200) { - let req = request(app).delete(url); - req = addAuth(req, role); - const response = await req.expect(statusCode); - return response.body; -} - -async function get(role, url, statusCode = 200) { - let req = request(app).get(url); - req = addAuth(req, role); - const response = await req.expect(statusCode); - return response.body; -} - -async function post(role, url, body, statusCode = 200) { - let req = request(app).post(url); - req = addAuth(req, role); - const response = await req.send(body).expect(statusCode); - return response.body; -} - -async function put(role, url, body, statusCode = 200) { - let req = request(app).put(url); - req = addAuth(req, role); - const response = await req.send(body).expect(statusCode); - return response.body; -} - -before(async function() { - const { models } = await getDb(); - appLog.setLevel(config.get('appLogLevel')); - app = makeApp(config, models); - - assert.throws(() => { - makeDb(config); - }, 'ensure nedb can be made once'); - - return resetWithUser(); -}); - -module.exports = { - config, - del, - expectKeys, - get, - post, - put, - reset, - resetWithUser -}; +module.exports = TestUtils; From fd236eea44e1a035bd5cc97ee0d1c76027875a2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20G?= <1872031+rgarrigue@users.noreply.github.com> Date: Tue, 25 Feb 2020 20:30:43 +0100 Subject: [PATCH 021/658] Add a build pipeline (#550) * Add build pipeline * Fixed build * Revert build script bach to sh and fix the [[ ]] unknown syntac * Use Actions major version --- .github/workflows/build.sh | 9 ++++++++ .github/workflows/main.yml | 42 ++++++++++++++++++++++++++++++++++++++ .gitignore | 3 ++- scripts/build.sh | 7 +++---- 4 files changed, 56 insertions(+), 5 deletions(-) create mode 100755 .github/workflows/build.sh create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/build.sh b/.github/workflows/build.sh new file mode 100755 index 000000000..12f9159a4 --- /dev/null +++ b/.github/workflows/build.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh +set -x + +apt-get update +apt-get install -y --no-install-recommends g++ make python3 python3-setuptools unixodbc-dev + +bash -x scripts/build.sh + +tar -cavf sqlpad.tar.gz -C server/public . diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 000000000..47a1e0b6a --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,42 @@ +name: SQLPad release + +on: + push: + tags: + - "*" + +jobs: + build: + name: Build and upload + runs-on: ubuntu-latest + steps: + - name: Checkout code ${{ github.sha }} + uses: actions/checkout@v2 + + - name: Build + uses: docker://node:13-slim + with: + entrypoint: bash + args: .github/workflows/build.sh + + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + draft: false + prerelease: false + + - name: Upload archive to release + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps + asset_path: ./sqlpad.tar.gz + asset_name: sqlpad.tar.gz + asset_content_type: application/gzip diff --git a/.gitignore b/.gitignore index 682580fd5..d73f430f4 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ server/public coverage/ db/ dbtest/ -node_modules/ \ No newline at end of file +node_modules/ +sqlpad.tar.gz diff --git a/scripts/build.sh b/scripts/build.sh index 3f205e2e8..fe0bf4074 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -3,10 +3,9 @@ SQLPAD_CLIENT_DIR=$(pwd)/client SQLPAD_SERVER_DIR=$(pwd)/server SCRIPTS_DIR=$(pwd)/scripts -if [[ ! -d $SCRIPTS_DIR ]] || \ - [[ ! -d $SQLPAD_CLIENT_DIR ]] || \ - [[ ! -d $SQLPAD_SERVER_DIR ]] -then +if [ ! -d $SCRIPTS_DIR ] || + [ ! -d $SQLPAD_CLIENT_DIR ] || + [ ! -d $SQLPAD_SERVER_DIR ]; then echo This script must be executed from the sqlpad project directory exit 1 fi From c202ea3a2d8596e6a53140883945af729339df54 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 25 Feb 2020 14:08:20 -0600 Subject: [PATCH 022/658] v4.1.0 --- CHANGELOG.md | 31 +++++++++++++++++++++++++++++++ README.md | 4 ++++ client/package-lock.json | 2 +- client/package.json | 2 +- package-lock.json | 2 +- package.json | 2 +- server/package-lock.json | 2 +- server/package.json | 2 +- 8 files changed, 41 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09213ca31..c51a6a6e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,36 @@ # Changelog +## 4.1.0 + +### February 25, 2020 + +#### Features + +- Add Snowflake driver/support (#519) +- Add MS SQL Server readOnly intent option (#520) +- Add logging using pino (#527, #547) + + SQLPad now logs json messages to stdout using the [pino](http://getpino.io/#/) library. Amount of logging can be controlled by setting `appLogLevel` and `webLogLevel` for application and web logs respectively. Pino does not manage log transport, but has an ecosystem of tooling available that does http://getpino.io/#/docs/transports. + +- Allow dynamic user data in connection configuration (#544) + + Connections can have user values dynamically substituted in connection configuration values containing text values. This is a work-in-progress and can be used for adventurous. See PR for details, otherwise more info and corresponding UI will come with future releases. + +- Add GitHub Release builds via build pipeline (#550) +- Add `dbInMemory` setting (#553) + + `dbInMemory` will run the embedded SQLPad db in memory without logging to disk. Enabling this does not remove the need for `dbPath` at this time, as filesystem access is still required for result caches and express session support. (`dbPath` to become optional in future release) + +#### Fixes + +- Fix TypeError: Do not know how to serialize a BigInt (#522) +- Fix tests for non-utc timezones (#524) + +#### Maintenance + +- Update server dependencies (#525) +- Maintenance & refactoring (#534, #535, #538, #539, #540, #541, #542, #543, #545, #551, #552, #553) + ## 4.0.0 ### January 18, 2020 diff --git a/README.md b/README.md index f271c3bc9..67b989ded 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,10 @@ Default: `secret-used-to-sign-cookies-please-set-and-make-strong` Directory to store SQLPad embedded database content. This includes queries, users, query result cache files, etc. Env var: `SQLPAD_DB_PATH` +**dbInMemory** +If enabled, runs embedded database `nedb` in memory. `dbPath` is still required to be provided for cache and session support. (`dbPath` will be made optional in future release) +Env var: `SQLPAD_DB_IN_MEMORY` + **debug** Add a variety of logging to console while running SQLPad Env var: `SQLPAD_DEBUG` diff --git a/client/package-lock.json b/client/package-lock.json index 3eb8ce56a..100e34594 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad-front-end", - "version": "4.0.0", + "version": "4.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/client/package.json b/client/package.json index 8589e19a5..3413224b7 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad-front-end", - "version": "4.0.0", + "version": "4.1.0", "private": true, "proxy": "http://localhost:3010", "dependencies": { diff --git a/package-lock.json b/package-lock.json index 83df23e1c..cc5964bd6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad-project", - "version": "4.0.0", + "version": "4.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index fe57d5666..a47e71505 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad-project", - "version": "4.0.0", + "version": "4.1.0", "private": true, "devDependencies": { "husky": "^4.2.3", diff --git a/server/package-lock.json b/server/package-lock.json index 923f7d4b6..037b67674 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "4.0.0", + "version": "4.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/server/package.json b/server/package.json index 59faf83b9..8421c630a 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "4.0.0", + "version": "4.1.0", "description": "Web app. Write SQL and visualize the results. Supports Postgres, MySQL, SQL Server, Crate, Vertica and SAP HANA.", "license": "MIT", "engines": { From 7b276eb7c0088039e2c8de7d97be0625cdab5f1b Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Thu, 27 Feb 2020 11:54:49 -0600 Subject: [PATCH 023/658] Add Query ACL (and migrations framework) (#554) * Install sequelize, umzug, and sqlite * Initial migration implementation * Add QueryAcl model * Fix sequelize/migration test integration * honor dbInMemory for sqlite/sequelize * Break initdb and migration into separate methods * Migrate existing queries to have a query_acl record * Let lib/db manage sequelize too * Fix tests * Remove unused queries.findByFilter * Import datatypes from sequelize * Consider QueryAcl in routes * Check permission for update * Move users into TestUtils class * Add tests and fix API * Add unique constraint on query_id & user_id * Add share query button to UI * Add failing cases for query deletion * Fix query delete API * Disable query delete button if user cannot delete * consistent sequelizeDb reference --- client/src/common/IconButton.module.css | 6 + client/src/queries/QueryListDrawer.js | 23 +- client/src/queryEditor/toolbar/Toolbar.js | 2 + client/src/queryEditor/toolbar/ToolbarMenu.js | 8 +- .../toolbar/ToolbarShareQueryButton.js | 37 ++ client/src/stores/queries.js | 21 +- server/lib/db.js | 11 +- server/lib/migrate.js | 26 + .../migrations/04-00100-query-acl-schema.js | 47 ++ server/migrations/04-00110-query-acl-data.js | 30 ++ server/models/connectionAccesses.js | 4 +- server/models/connections.js | 4 +- server/models/index.js | 87 +++- server/models/queries.js | 12 +- server/models/queryAcl.js | 63 +++ server/models/queryHistory.js | 4 +- server/models/resultCache.js | 4 +- server/models/schemaInfo.js | 4 +- server/models/users.js | 4 +- server/package-lock.json | 483 +++++++++++++++++- server/package.json | 3 + server/routes/queries.js | 171 +++++-- server/sequelizeDb/QueryAcl.js | 44 ++ server/sequelizeDb/index.js | 28 + server/server.js | 16 +- server/test/api/queries.js | 172 +++++-- server/test/api/users.js | 6 +- server/test/migrations/QueryAcl.js | 42 ++ server/test/sequelize/QueryAcl.js | 35 ++ server/test/utils.js | 102 ++-- 30 files changed, 1334 insertions(+), 165 deletions(-) create mode 100644 client/src/queryEditor/toolbar/ToolbarShareQueryButton.js create mode 100644 server/lib/migrate.js create mode 100644 server/migrations/04-00100-query-acl-schema.js create mode 100644 server/migrations/04-00110-query-acl-data.js create mode 100644 server/models/queryAcl.js create mode 100644 server/sequelizeDb/QueryAcl.js create mode 100644 server/sequelizeDb/index.js create mode 100644 server/test/migrations/QueryAcl.js create mode 100644 server/test/sequelize/QueryAcl.js diff --git a/client/src/common/IconButton.module.css b/client/src/common/IconButton.module.css index 8f9ed3371..73dbf64e5 100644 --- a/client/src/common/IconButton.module.css +++ b/client/src/common/IconButton.module.css @@ -46,6 +46,12 @@ background-color: #eee; } +.btn[disabled]:hover { + border: none; + color: rgba(0, 0, 0, 0.25); + background-color: #eee; +} + .danger:hover, .danger:focus { color: var(--secondary-color); diff --git a/client/src/queries/QueryListDrawer.js b/client/src/queries/QueryListDrawer.js index 413c3b0bb..ab0371f3e 100644 --- a/client/src/queries/QueryListDrawer.js +++ b/client/src/queries/QueryListDrawer.js @@ -17,6 +17,10 @@ import getDecoratedQueries from './getDecoratedQueries'; import styles from './QueryList.module.css'; import QueryPreview from './QueryPreview'; +const SHARED = 'SHARED'; +const MY_QUERIES = 'MY_QUERIES'; +const ALL = 'ALL'; + function getSortedFilteredQueries( currentUser, queries, @@ -28,12 +32,12 @@ function getSortedFilteredQueries( ) { let filteredQueries = getDecoratedQueries(queries, connections); - if (creatorSearch !== 'ALL') { + if (creatorSearch !== ALL) { filteredQueries = filteredQueries.filter(query => { - if (creatorSearch === 'MY_QUERIES') { + if (creatorSearch === MY_QUERIES) { return query.createdBy === currentUser.email; } - if (creatorSearch === 'TEAMS') { + if (creatorSearch === SHARED) { return query.createdBy !== currentUser.email; } throw new Error(`Unknown creator search value ${creatorSearch}`); @@ -98,7 +102,7 @@ function QueryListDrawer({ }) { const [preview, setPreview] = useState(null); const [searches, setSearches] = useState([]); - const [creatorSearch, setCreatorSearch] = useState('MY_QUERIES'); + const [creatorSearch, setCreatorSearch] = useState(MY_QUERIES); const [sort, setSort] = useState('SAVE_DATE'); const [connectionId, setConnectionId] = useState(''); const [dimensions, setDimensions] = useState({ @@ -133,6 +137,9 @@ function QueryListDrawer({ const chartUrl = `/query-chart/${query._id}`; const queryUrl = `/queries/${query._id}`; + const canDelete = + currentUser.role === 'admin' || currentUser.email === query.createdBy; + const hasChart = query && query.chartConfiguration && query.chartConfiguration.chartType; @@ -168,11 +175,13 @@ function QueryListDrawer({ > chart +
deleteQuery(query._id)} + disabled={!canDelete} > Delete @@ -198,9 +207,9 @@ function QueryListDrawer({ value={creatorSearch} onChange={e => setCreatorSearch(e.target.value)} > - - - + + + setShowEdit(false)} onConnectionSaved={handleConnectionSaved} /> diff --git a/client/src/queryEditor/QueryEditor.js b/client/src/queryEditor/QueryEditor.js index 0aa31c93f..b577f5020 100644 --- a/client/src/queryEditor/QueryEditor.js +++ b/client/src/queryEditor/QueryEditor.js @@ -16,6 +16,7 @@ import QueryEditorSqlEditor from './QueryEditorSqlEditor'; import QueryResultHeader from './QueryResultHeader.js'; import Shortcuts from './Shortcuts'; import Toolbar from './toolbar/Toolbar'; +import AppHeader from '../app-header/AppHeader'; import UnsavedQuerySelector from './UnsavedQuerySelector'; const deboucedResearchChart = debounce(resizeChart, 700); @@ -117,6 +118,7 @@ function QueryEditor(props) { flexDirection: 'column' }} > +
{sqlTabPane}
diff --git a/client/src/queryEditor/toolbar/ChartButton.js b/client/src/queryEditor/toolbar/ChartButton.js index 2584b3522..abece68e9 100644 --- a/client/src/queryEditor/toolbar/ChartButton.js +++ b/client/src/queryEditor/toolbar/ChartButton.js @@ -29,7 +29,7 @@ function ChartButton() {
-
diff --git a/client/src/queryEditor/toolbar/Toolbar.js b/client/src/queryEditor/toolbar/Toolbar.js index 648432868..45ad99dbf 100644 --- a/client/src/queryEditor/toolbar/Toolbar.js +++ b/client/src/queryEditor/toolbar/Toolbar.js @@ -1,11 +1,9 @@ import React from 'react'; import ConnectionDropDown from '../ConnectionDropdown'; import ChartButton from './ChartButton'; -import QueryListButton from './QueryListButton'; import ToolbarCloneButton from './ToolbarCloneButton'; +import ToolbarConnectionClientButton from './ToolbarConnectionClientButton'; import ToolbarFormatQueryButton from './ToolbarFormatQueryButton'; -import ToolbarMenu from './ToolbarMenu'; -import ToolbarNewQueryButton from './ToolbarNewQueryButton'; import ToolbarQueryNameInput from './ToolbarQueryNameInput'; import ToolbarRunButton from './ToolbarRunButton'; import ToolbarSaveButton from './ToolbarSaveButton'; @@ -13,7 +11,6 @@ import ToolbarShareQueryButton from './ToolbarShareQueryButton'; import ToolbarSpacer from './ToolbarSpacer'; import ToolbarTagsButton from './ToolbarTagsButton'; import ToolbarToggleSchemaButton from './ToolbarToggleSchemaButton'; -import ToolbarConnectionClientButton from './ToolbarConnectionClientButton'; function Toolbar() { return ( @@ -26,15 +23,12 @@ function Toolbar() { }} >
- - - - - - + + + @@ -46,9 +40,7 @@ function Toolbar() { - - - + @@ -57,10 +49,6 @@ function Toolbar() { - - - -
); diff --git a/client/src/queryEditor/toolbar/ToolbarMenu.js b/client/src/queryEditor/toolbar/ToolbarMenu.js deleted file mode 100644 index d3c8a68df..000000000 --- a/client/src/queryEditor/toolbar/ToolbarMenu.js +++ /dev/null @@ -1,119 +0,0 @@ -import { MenuItem } from '@reach/menu-button'; -import DotsVerticalIcon from 'mdi-react/DotsVerticalIcon'; -import React, { useState } from 'react'; -import { Redirect } from 'react-router-dom'; -import { connect } from 'unistore/react'; -import Drawer from '../../common/Drawer'; -import IconMenu from '../../common/IconMenu'; -import ConnectionAccessListDrawer from '../../connectionAccesses/ConnectionAccessListDrawer'; -import ConnectionListDrawer from '../../connections/ConnectionListDrawer'; -import QueryHistoryModal from '../../queryHistory/QueryHistoryModal'; -import UserList from '../../users/UserList'; -import fetchJson from '../../utilities/fetch-json.js'; -import AboutModal from './AboutModal'; -import { clearQueries } from '../../stores/queries'; - -function mapStateToProps(state) { - return { - currentUser: state.currentUser - }; -} - -const ConnectedToolbarMenu = connect(mapStateToProps, store => ({ - clearQueries -}))(React.memo(ToolbarMenu)); - -function ToolbarMenu({ currentUser, clearQueries }) { - const [showUsers, setShowUsers] = useState(false); - const [redirectToSignIn, setRedirectToSignIn] = useState(false); - const [showQueryHistory, setShowQueryHistory] = useState(false); - const [showAbout, setShowAbout] = useState(false); - const [showConnections, setShowConnections] = useState(false); - const [showConnectionAccesses, setShowConnectionAccesses] = useState(false); - - const isAdmin = currentUser.role === 'admin'; - - if (redirectToSignIn) { - return ; - } - - // Reach UI menu / IconMenu does not like the {someBoolean && } patterm - // As a workaround optional MenuItems are managed in an array - let menuItems = []; - if (isAdmin) { - menuItems = [ - setShowConnections(true)}> - Connections - , - setShowUsers(true)}> - Users - , - setShowConnectionAccesses(true)} - > - Connection Accesses - - ]; - } - - return ( -
- }> - {menuItems} - setShowQueryHistory(true)} - > - Query History - - setShowAbout(true)} - > - About - - { - await fetchJson('GET', '/api/signout'); - clearQueries(); - setRedirectToSignIn(true); - }} - > - Sign out - - - - setShowUsers(false)} - placement={'right'} - > - - - - setShowQueryHistory(false)} - /> - - setShowAbout(false)} /> - - setShowConnections(false)} - /> - - setShowConnectionAccesses(false)} - /> -
- ); -} - -export default ConnectedToolbarMenu; diff --git a/client/src/queryEditor/toolbar/ToolbarRunButton.js b/client/src/queryEditor/toolbar/ToolbarRunButton.js index e07229bb6..8ff1046a4 100644 --- a/client/src/queryEditor/toolbar/ToolbarRunButton.js +++ b/client/src/queryEditor/toolbar/ToolbarRunButton.js @@ -16,7 +16,7 @@ const ConnectedToolbarRunButton = connect(mapStateToProps, store => ({ function ToolbarRunButton({ isRunning, runQuery }) { return ( - ); diff --git a/client/src/queryHistory/QueryHistoryContent.js b/client/src/queryHistory/QueryHistoryContent.js index 2fac6b4f6..5eb8fe9fb 100644 --- a/client/src/queryHistory/QueryHistoryContent.js +++ b/client/src/queryHistory/QueryHistoryContent.js @@ -82,7 +82,7 @@ function QueryHistoryContent({ onConnectionAccessSaved }) { + {connectionClient ? : } + ); } diff --git a/client/src/queryEditor/toolbar/ToolbarRunButton.js b/client/src/queryEditor/toolbar/ToolbarRunButton.js index 8ff1046a4..2efb49bf4 100644 --- a/client/src/queryEditor/toolbar/ToolbarRunButton.js +++ b/client/src/queryEditor/toolbar/ToolbarRunButton.js @@ -2,21 +2,31 @@ import PropTypes from 'prop-types'; import React from 'react'; import { connect } from 'unistore/react'; import Button from '../../common/Button'; +import { connectConnectionClient } from '../../stores/connections'; import { runQuery } from '../../stores/queries'; function mapStateToProps(state) { + const { isRunning } = state; return { - isRunning: state.isRunning + isRunning }; } const ConnectedToolbarRunButton = connect(mapStateToProps, store => ({ + connectConnectionClient: connectConnectionClient(store), runQuery: runQuery(store) }))(React.memo(ToolbarRunButton)); -function ToolbarRunButton({ isRunning, runQuery }) { +function ToolbarRunButton({ isRunning, connectConnectionClient, runQuery }) { return ( - ); diff --git a/client/src/stores/connections.js b/client/src/stores/connections.js index b536b3126..c49223291 100644 --- a/client/src/stores/connections.js +++ b/client/src/stores/connections.js @@ -30,11 +30,30 @@ export async function initSelectedConnection(state) { } /** - * Open a client connection for the currently selected connection + * Open a connection client for the currently selected connection if supported * @param {*} state */ export const connectConnectionClient = store => async state => { - const { selectedConnectionId } = state; + const { connectionClient, connections, selectedConnectionId } = state; + + // If a connectionClient is already open, or connections or selected connection id doesn't exist, do nothing + if (connectionClient || !connections || !selectedConnectionId) { + return; + } + + const connection = connections.find( + connection => connection._id === selectedConnectionId + ); + + const supportedAndEnabled = + connection && + connection.supportsConnectionClient && + connection.multiStatementTransactionEnabled; + + if (!supportedAndEnabled) { + return; + } + const json = await fetchJson('POST', '/api/connection-clients', { connectionId: selectedConnectionId }); diff --git a/server/lib/connection-client.js b/server/lib/connection-client.js index 70fe7717e..c77360349 100644 --- a/server/lib/connection-client.js +++ b/server/lib/connection-client.js @@ -46,7 +46,7 @@ class ConnectionClient { /** * Updates lastKeepAliveAt to indicate a request was made to keep this connection alive. - * This may need to actually make a db call if drivers implement an automatic disconnect after some period of inactivity + * This may need to actually make a db call if drivers implement an automatic disconnect after some period of idle */ keepAlive() { if (this.isConnected()) { @@ -56,10 +56,68 @@ class ConnectionClient { return false; } + /** + * Get last keep alive at time + */ + getLastKeepAliveAt() { + return this.lastKeepAliveAt; + } + + /** + * Get last activity at time (last time user ran query with connected client) + */ + getLastActivityAt() { + return this.lastActivityAt; + } + + getConnectionName() { + return this.connection.name; + } + + getConnectionDriver() { + return this.connection.driver; + } + + /** + * Set up a poll to check on keep alive and activity requests + * and disconnect if keep alive has not been updated within range of keepAliveTimeoutMs + * @param {number} [keepAliveTimeoutMs] - max amount of time to allow from keep alive ping before closing + * @param {number} [intervalMs] - interval ms to check keep alive time + */ + scheduleCleanupInterval(keepAliveTimeoutMs = 30000, intervalMs = 10000) { + this.keepAlive(); + + const ONE_HOUR_MS = 1000 * 60 * 60; + const idleTimeoutMs = + parseInt(this.connection.idleTimeout, 10) || ONE_HOUR_MS; + + this.cleanupInterval = setInterval(() => { + const now = new Date(); + const sinceLastKeepAliveMs = now - this.getLastKeepAliveAt(); + const sinceLastActivityMs = now - this.getLastActivityAt(); + + appLog.debug( + { + id: this.id, + connectionName: this.getConnectionName(), + driver: this.getConnectionDriver(), + sinceLastKeepAliveMs, + sinceLastActivityMs + }, + 'Checking last keep alive at' + ); + + if ( + sinceLastKeepAliveMs > keepAliveTimeoutMs || + sinceLastActivityMs > idleTimeoutMs + ) { + this.disconnect().catch(error => appLog.error(error)); + } + }, intervalMs); + } + /** * Create a persistent database connection if the driver implementation supports it. - * Also sets up a poll to check on keep alive requests, - * and disconnects the connection if a user is not actively using the connection */ async connect() { const { Client } = this; @@ -69,37 +127,30 @@ class ConnectionClient { this.client = new Client(this.connection); await this.client.connect(); this.connectedAt = new Date(); - this.lastKeepAliveAt = new Date(); - - // Every n ms check to see if lastKeepAliveAt is too old - // If it is too old, disconnect this - this.cleanupInterval = setInterval(() => { - appLog.info('Checking last keep alive at'); - const now = new Date(); - const TIMEOUT = 30000; - if (now - this.lastKeepAliveAt > TIMEOUT) { - this.disconnect().catch(error => appLog.error(error)); - if (this.cleanupInterval) { - clearInterval(this.cleanupInterval); - } - const id = this.id; - const connectionName = this.connection && this.connection.name; - const driver = this.connection && this.connection.driver; - appLog.debug( - { id, connectionName, driver }, - 'Disconnecting client connection' - ); - } - }, 10000); + this.lastActivityAt = new Date(); + this.keepAlive(); } /** * Close the database connection */ async disconnect() { + // Remove cleanup interval if it had been scheduled + if (this.cleanupInterval) { + clearInterval(this.cleanupInterval); + delete this.cleanupInterval; + } + // If client still exists disconnect if (this.client) { const client = this.client; this.client = null; + const id = this.id; + const connectionName = this.getConnectionName(); + const driver = this.getConnectionDriver(); + appLog.debug( + { id, connectionName, driver }, + 'Disconnecting client connection' + ); await client.disconnect(); } } @@ -150,7 +201,10 @@ class ConnectionClient { // otherwise use driver.runQuery to run query with fresh one-off connection if (this.isConnected()) { // uses pre-existing connection to run query, and keeps connection open + // lastActivityAt is updated both before and after query (the query could take a while) + this.lastActivityAt = new Date(); results = await this.client.runQuery(query); + this.lastActivityAt = new Date(); } else { // Opens a new connection to db, runs query, then closes connection results = await driver.runQuery(query, connection); diff --git a/server/lib/validate-connection.js b/server/lib/validate-connection.js index 979221610..31c20b1a9 100644 --- a/server/lib/validate-connection.js +++ b/server/lib/validate-connection.js @@ -28,7 +28,15 @@ function ensureBoolean(value) { * @param {object} connection */ function validateConnection(connection) { - const coreFields = ['_id', 'name', 'driver', 'createdDate', 'modifiedDate']; + const coreFields = [ + '_id', + 'name', + 'driver', + 'createdDate', + 'modifiedDate', + 'multiStatementTransactionEnabled', + 'idleTimeout' + ]; if (!connection.name) { throw new Error('connection.name required'); } diff --git a/server/models/connectionClients.js b/server/models/connectionClients.js index 166bff278..c8b4bb714 100644 --- a/server/models/connectionClients.js +++ b/server/models/connectionClients.js @@ -46,8 +46,9 @@ class ConnectionClients { async createNew(connection, user) { const connectionClient = new ConnectionClient(connection, user); await connectionClient.connect(); + connectionClient.scheduleCleanupInterval(); this.connectionClients.push(connectionClient); - return connectionClient; + return this.getOneById(connectionClient.id); } /** diff --git a/server/routes/connection-clients.js b/server/routes/connection-clients.js index 40e893bf1..f92e4deec 100644 --- a/server/routes/connection-clients.js +++ b/server/routes/connection-clients.js @@ -148,7 +148,13 @@ async function keepAliveConnectionClient(req, res) { return res.status(403).json({ error: 'Forbidden' }); } - connectionClient.keepAlive(); + const keptAlive = connectionClient.keepAlive(); + if (!keptAlive) { + // remove from in-memory store and respond with nothing + // disconnect here is not necessary, but should be safe + await models.connectionClients.disconnectForId(params.connectionClientId); + return res.json({}); + } const data = { connectionClient: { diff --git a/server/test/api/connection-clients.js b/server/test/api/connection-clients.js index bee8e4a5d..7d3cea4e2 100644 --- a/server/test/api/connection-clients.js +++ b/server/test/api/connection-clients.js @@ -1,7 +1,7 @@ const assert = require('assert').strict; const TestUtils = require('../utils'); -describe('api/connection-accesses', function() { +describe('api/connection-clients', function() { const utils = new TestUtils(); let connection1; let connectionClient1; @@ -15,7 +15,9 @@ describe('api/connection-accesses', function() { database: 'sqlpad', username: 'sqlpad', password: 'sqlpad', - wait: 10 + wait: 10, + idleTimeout: 4000, + multiStatementTransactionEnabled: true }); connection1 = connBody.connection; }); diff --git a/server/test/lib/connection-clients.js b/server/test/lib/connection-clients.js new file mode 100644 index 000000000..2926c976b --- /dev/null +++ b/server/test/lib/connection-clients.js @@ -0,0 +1,109 @@ +const assert = require('assert').strict; +const path = require('path'); +const TestUtils = require('../utils'); +const ConnectionClient = require('../../lib/connection-client'); + +function wait(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +describe('lib/connection-clients', function() { + const utils = new TestUtils(); + let connection1; + + before(async function() { + await utils.init(true); + + const connBody = await utils.post('admin', '/api/connections', { + driver: 'sqlite', + name: 'connection-client-test', + filename: path.join( + __dirname, + '../artifacts/connection-client-test.sqlite' + ), + idleTimeout: 1000, + multiStatementTransactionEnabled: true + }); + + connection1 = connBody.connection; + }); + + it('Keep-alive keeps it alive', async function() { + const connectionClient = new ConnectionClient( + connection1, + utils.users.admin + ); + assert(connectionClient); + + await connectionClient.connect(); + connectionClient.scheduleCleanupInterval(400, 100); + assert(connectionClient.isConnected()); + + await wait(200); + connectionClient.keepAlive(); + await wait(200); + connectionClient.keepAlive(); + await wait(200); + assert(connectionClient.isConnected()); + }); + + it('Without keep alive it closes', async function() { + const connectionClient = new ConnectionClient( + connection1, + utils.users.admin + ); + assert(connectionClient); + + await connectionClient.connect(); + connectionClient.scheduleCleanupInterval(400, 100); + assert(connectionClient.isConnected()); + + await wait(600); + assert(!connectionClient.isConnected()); + }); + + it('Stays-open with activity', async function() { + const connectionClient = new ConnectionClient( + connection1, + utils.users.admin + ); + assert(connectionClient); + + await connectionClient.connect(); + connectionClient.scheduleCleanupInterval(400, 100); + assert(connectionClient.isConnected()); + + await wait(300); + connectionClient.keepAlive(); + await wait(300); + connectionClient.keepAlive(); + await connectionClient.runQuery('SELECT 1 AS val'); + await wait(300); + connectionClient.keepAlive(); + await wait(300); + connectionClient.keepAlive(); + assert(connectionClient.isConnected()); + }); + + it('Closes without activity', async function() { + const connectionClient = new ConnectionClient( + connection1, + utils.users.admin + ); + assert(connectionClient); + + await connectionClient.connect(); + connectionClient.scheduleCleanupInterval(400, 100); + assert(connectionClient.isConnected()); + + await wait(300); + connectionClient.keepAlive(); + await wait(300); + connectionClient.keepAlive(); + await wait(300); + connectionClient.keepAlive(); + await wait(300); + connectionClient.keepAlive(); + assert(!connectionClient.isConnected()); + }); +}); From 4c04d25e0fdf16a12f1c91925a70ee2fb17576d0 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Tue, 10 Mar 2020 19:55:59 -0500 Subject: [PATCH 038/658] Handle special email characters (#573) * allow + in email address * Add strict domain check * ensure email address is lower case * v4.1.1 * add version-patch.sh * add changelog --- CHANGELOG.md | 6 +++++ client/package-lock.json | 2 +- client/package.json | 2 +- package-lock.json | 2 +- package.json | 2 +- scripts/version-patch.sh | 35 ++++++++++++++++++++++++++++++ server/lib/check-whitelist.js | 2 +- server/lib/db.js | 13 +++++++++++ server/models/users.js | 6 +++-- server/package-lock.json | 2 +- server/package.json | 2 +- server/test/api/signup-signin.js | 15 +++++++++++++ server/test/lib/check-whitelist.js | 28 ++++++++++++++++++++++++ 13 files changed, 108 insertions(+), 9 deletions(-) create mode 100644 scripts/version-patch.sh create mode 100644 server/test/lib/check-whitelist.js diff --git a/CHANGELOG.md b/CHANGELOG.md index c51a6a6e8..594fba431 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 4.1.1 + +### March 10, 2020 + +- Fix auth for email addresses containing `+` and quoted `@` characters + ## 4.1.0 ### February 25, 2020 diff --git a/client/package-lock.json b/client/package-lock.json index 7f7a06bea..3955c1994 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad-front-end", - "version": "4.1.0", + "version": "4.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/client/package.json b/client/package.json index 4ef5a6e06..f9db31c8f 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad-front-end", - "version": "4.1.0", + "version": "4.1.1", "private": true, "proxy": "http://localhost:3010", "dependencies": { diff --git a/package-lock.json b/package-lock.json index 0533af9e1..bd93cabdf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad-project", - "version": "4.1.0", + "version": "4.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 5c8dced3c..31ac36f6a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad-project", - "version": "4.1.0", + "version": "4.1.1", "private": true, "devDependencies": { "husky": "^4.2.3", diff --git a/scripts/version-patch.sh b/scripts/version-patch.sh new file mode 100644 index 000000000..5e7d42164 --- /dev/null +++ b/scripts/version-patch.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env sh + +# This script can be used for pushing patches not based on master branch +# In most cases use scripts/version.sh to do builds, not this one + +SQLPAD_ROOT_DIR=$(pwd) +SQLPAD_CLIENT_DIR=$(pwd)/client +SQLPAD_SERVER_DIR=$(pwd)/server +SCRIPTS_DIR=$(pwd)/scripts + +if [ ! -d $SCRIPTS_DIR ] || \ + [ ! -d $SQLPAD_CLIENT_DIR ] || \ + [ ! -d $SQLPAD_SERVER_DIR ] +then + echo This script must be executed from the sqlpad project directory + exit 1 +fi + +VERSION=$1 + +cd $SQLPAD_CLIENT_DIR +npm --no-git-tag-version version $VERSION + +cd $SQLPAD_SERVER_DIR +npm --no-git-tag-version version $VERSION + +cd $SQLPAD_ROOT_DIR +npm --no-git-tag-version version $VERSION + +git commit -a -m "v$VERSION" + +git tag -a "v$VERSION" -m "v$VERSION" + +git push origin HEAD +git push origin "v$VERSION" diff --git a/server/lib/check-whitelist.js b/server/lib/check-whitelist.js index 22f8e0841..71cea324f 100644 --- a/server/lib/check-whitelist.js +++ b/server/lib/check-whitelist.js @@ -17,7 +17,7 @@ */ module.exports = function checkWhitelist(whitelistedDomains, email) { if (whitelistedDomains) { - const domain = email.split('@')[1]; + const domain = email.split('@').pop(); const whitelistDomains = whitelistedDomains .split(' ') .map(domain => domain.trim()); diff --git a/server/lib/db.js b/server/lib/db.js index 2f60b24c2..c54de29a3 100644 --- a/server/lib/db.js +++ b/server/lib/db.js @@ -101,6 +101,19 @@ async function initNedb(config) { ); } + // Ensure all email addresses are lower case + // A long time ago a previous version of SQLPad did not enforce this + // It might not matter anymore but just in case + appLog.info('Ensuring user email address is lower case'); + const users = await nedb.users.find({}); + for (const user of users) { + if (user.email && user.email !== user.email.toLowerCase()) { + user.email = user.email.toLowerCase(); + // eslint-disable-next-line no-await-in-loop + await nedb.users.update({ _id: user._id }, user, {}); + } + } + // Apply indexes await nedb.users.ensureIndex({ fieldName: 'email', unique: true }); await nedb.cache.ensureIndex({ fieldName: 'cacheKey', unique: true }); diff --git a/server/models/users.js b/server/models/users.js index 5a90788f1..8f3600df0 100644 --- a/server/models/users.js +++ b/server/models/users.js @@ -3,7 +3,9 @@ const passhash = require('../lib/passhash.js'); const schema = Joi.object({ _id: Joi.string().optional(), // will be auto-gen by nedb - email: Joi.string().required(), + email: Joi.string() + .lowercase() + .required(), name: Joi.string().optional(), role: Joi.string() .lowercase() @@ -62,7 +64,7 @@ class Users { findOneByEmail(email) { return this.nedb.users.findOne({ - email: { $regex: new RegExp(email, 'i') } + email: email.toLowerCase() }); } diff --git a/server/package-lock.json b/server/package-lock.json index a42716cea..cbc6b8149 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "4.1.0", + "version": "4.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/server/package.json b/server/package.json index 62897cc37..728ebdc4d 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "4.1.0", + "version": "4.1.1", "description": "Web app. Write SQL and visualize the results. Supports Postgres, MySQL, SQL Server, Crate, Vertica and SAP HANA.", "license": "MIT", "engines": { diff --git a/server/test/api/signup-signin.js b/server/test/api/signup-signin.js index 22bfaed15..c01d0721b 100644 --- a/server/test/api/signup-signin.js +++ b/server/test/api/signup-signin.js @@ -49,6 +49,21 @@ describe('api/signup', function() { }); assert(!body2.error, 'Expect no error'); }); + + it('allows emails containing +', async function() { + const body = await utils.post('admin', '/api/users', { + email: 'user+foobar@test.com', + role: 'editor' + }); + assert(!body.error, 'no error'); + + const body2 = await utils.post(null, '/api/signup', { + password: 'password', + passwordConfirmation: 'password', + email: 'user+foobar@test.com' + }); + assert(!body2.error, 'Expect no error'); + }); }); describe('api/signin', function() { diff --git a/server/test/lib/check-whitelist.js b/server/test/lib/check-whitelist.js new file mode 100644 index 000000000..7a5289ea6 --- /dev/null +++ b/server/test/lib/check-whitelist.js @@ -0,0 +1,28 @@ +const assert = require('assert'); +const checkWhitelist = require('../../lib/check-whitelist'); + +describe('lib/check-whitelist', function() { + it('allows email addresses matching any domain in the list', function() { + const whitelistedDomains = 'baz.com foo.bar.com'; + assert(checkWhitelist(whitelistedDomains, 'user@baz.com')); + assert(checkWhitelist(whitelistedDomains, 'user@foo.bar.com')); + }); + + it('disallows email addresses that do not match domains exactly', function() { + const whitelistedDomains = 'baz.com foo.bar.com'; + assert.equal(checkWhitelist(whitelistedDomains, 'user@bar.com'), false); + assert.equal(checkWhitelist(whitelistedDomains, 'user@123.baz.com'), false); + }); + + it('uses the last @ segment as the domain', function() { + const whitelistedDomains = 'baz.com'; + assert.equal( + // Email addresses are allowed to contain multiple @ signs, as long as all + // of the @'s in the local part of the email address are enclosed in + // quotes. We need to make sure that we only treat the last @-delimited as + // the domain. + checkWhitelist(whitelistedDomains, '"user@baz.com@"@not-whitelisted.com'), + false + ); + }); +}); From 015b618b4453e07a2a7a0f98e17e36ba213074d4 Mon Sep 17 00:00:00 2001 From: Kevin Murphy Date: Wed, 11 Mar 2020 17:15:08 -0400 Subject: [PATCH 039/658] Add BigQuery driver (#572) * Add BigQuery driver * Decrease query timeout to one second less than the app setting --- package-lock.json | 334 +++++++------ server/drivers/bigquery/README.md | 46 ++ server/drivers/bigquery/index.js | 182 +++++++ server/drivers/bigquery/test.js | 186 ++++++++ server/drivers/bigquery/test.sh | 23 + server/drivers/index.js | 3 +- server/package-lock.json | 764 ++++++++++++++++++++++++------ server/package.json | 9 +- 8 files changed, 1263 insertions(+), 284 deletions(-) create mode 100644 server/drivers/bigquery/README.md create mode 100644 server/drivers/bigquery/index.js create mode 100644 server/drivers/bigquery/test.js create mode 100755 server/drivers/bigquery/test.sh diff --git a/package-lock.json b/package-lock.json index bd93cabdf..24a000339 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,15 +22,67 @@ "chalk": "^2.0.0", "esutils": "^2.0.2", "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/runtime": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz", - "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", + "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" } }, "@samverschueren/stream-to-observable": { @@ -67,12 +119,13 @@ "dev": true }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" } }, "any-observable": { @@ -90,15 +143,20 @@ "fill-range": "^7.0.1" } }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "ci-info": { @@ -133,18 +191,18 @@ "dev": true }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "commander": { @@ -321,9 +379,9 @@ } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "human-signals": { @@ -348,58 +406,6 @@ "please-upgrade-node": "^3.2.0", "slash": "^3.0.0", "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "import-fresh": { @@ -515,58 +521,6 @@ "please-upgrade-node": "^3.2.0", "string-argv": "0.3.1", "stringify-object": "^3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "listr": { @@ -664,6 +618,41 @@ "figures": "^2.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -672,6 +661,21 @@ "requires": { "escape-string-regexp": "^1.0.5" } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -691,6 +695,58 @@ "dev": true, "requires": { "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "log-update": { @@ -826,14 +882,6 @@ "dev": true, "requires": { "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - } } }, "parse-json": { @@ -907,9 +955,9 @@ } }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz", + "integrity": "sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g==", "dev": true }, "resolve-from": { @@ -1043,12 +1091,12 @@ "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, "symbol-observable": { diff --git a/server/drivers/bigquery/README.md b/server/drivers/bigquery/README.md new file mode 100644 index 000000000..f7b5214c2 --- /dev/null +++ b/server/drivers/bigquery/README.md @@ -0,0 +1,46 @@ +# BigQuery Driver + +## Notes + +- This incorporates [prior incomplete work by `hongkongkiwi` on GitHub](https://github.com/hongkongkiwi/sqlpad/commit/d731b24b6c1e7a2ccc18e8528263e830bca17660) (last commit on Dec 7, 2018. +- Queries time out after 5 minutes. When a query times out, an error is thrown, and the error message is displayed in the results area of SQLPad. +- The driver uses the [Standard SQL dialect](https://cloud.google.com/bigquery/docs/reference/standard-sql/enabling-standard-sql), which is more powerful and standards-compliant than the older BigQuery Legacy SQL dialect. (The latter is still the default dialect of the `bq` CLI tool). +- The driver uses a query timeout one second less than the SQLPad config setting `timeoutSeconds` (env var `SQLPAD_TIMEOUT_SECONDS`). + +## Testing + +### Running unit tests with mocha.js + +Tests are automatically skipped if the required environment variables haven't been defined. + +The BigQuery driver cannot be tested without creating a project in Google Cloud. Luckily, that's not hard. Here are the steps required to test the driver: + +- Create a project in Google Cloud. +- Enable the BigQuery API for your project, create a service account, and download the service account key [per this BigQuery Getting Started doc](https://cloud.google.com/bigquery/docs/quickstarts/quickstart-client-libraries). +- Create a new BigQuery dataset using the web console or the command line: + - Web: go into BigQuery (under Big Data in the list of services on the left) and create a new dataset (e.g. `my_new_dataset`). + - CLI: after [installing and initializing the Cloud SDK](https://cloud.google.com/bigquery/docs/quickstarts/quickstart-command-line), run `bq mk my_new_dataset`. +- From the root directory of the `SQLPad` repo, run `scripts/build.sh` to install dependencies. +- Define and export the following environment variables: + - BIGQUERY_TEST_CREDENTIALS_FILE - service account JSON file pathname + - BIGQUERY_TEST_GCP_PROJECT_ID - Google Cloud project name + - BIGQUERY_TEST_DATASET_NAME - BigQuery dataset name (unqualified tables will default to this) + - BIGQUERY_TEST_DATASET_LOCATION - Google Cloud project region e.g. "US" +- Run `sh test.sh`. + +### Manually testing the BigQuery driver _in situ_ within `SQLPad`: + +- Make sure that `scripts/build.sh` has been run to install dependencies. +- `export SQLPAD_ADMIN=admin` +- `export SQLPAD_ADMIN_PASSWORD=something` +- From the top level of the repo: `cd server && node server.js --dbPath ../db --port 3010` +- Point your browser at http://localhost:3010 and log in using the credentials you just defined. +- Create a new Connection, choosing the BigQuery driver, adding your GCP project ID, the path to the service account keyfile, the dataset you created, and the location (`US`). +- Select the new connection and execute some statements, e.g.: + ``` + create table my_new_dataset.junk(foo string); + insert into my_new_dataset.junk values ('bar'); + select * from my_new_dataset.junk; + ``` + + Note that if the connection's dataset is `my_new_dataset`, you can omit the `my_new_dataset.` prefixes in these statements. diff --git a/server/drivers/bigquery/index.js b/server/drivers/bigquery/index.js new file mode 100644 index 000000000..3ad19d208 --- /dev/null +++ b/server/drivers/bigquery/index.js @@ -0,0 +1,182 @@ +const { BigQuery } = require('@google-cloud/bigquery'); +const { formatSchemaQueryResults } = require('../utils'); +const minimist = require('minimist'); + +const id = 'bigquery'; +const name = 'BigQuery'; + +/** + * Return the query timeout in seconds from the app config. + */ +let _timeoutSeconds; +function getTimeoutSeconds() { + if (!_timeoutSeconds) { + const Config = require('../../lib/config'); + const argv = minimist(process.argv.slice(2)); + const config = new Config(argv, process.env); + _timeoutSeconds = config.get('timeoutSeconds'); // This is the HTTP connection timeout used by the SQLPad backend + } + return _timeoutSeconds; +} + +/** + * Return BiqQuery API object. + * @param {object} connection + */ +function newBigQuery(connection) { + return new BigQuery({ + projectId: connection.projectId, + keyFilename: connection.keyFile, + // Location must match that of the dataset(s) referenced in the query. + location: connection.datasetLocation + }); +} + +/** + * Run query for connection + * Should return { rows, incomplete } + * @param {string} queryString + * @param {object} connection + */ +function runQuery(queryString, connection = {}) { + const timeoutSeconds = getTimeoutSeconds() - 1; // A little less than the SQLPad timeout + const bigquery = newBigQuery(connection); + let incomplete = false; + const t1 = process.hrtime(); + + const isMaxRowsSpecified = + connection.hasOwnProperty('maxRows') && connection.maxRows !== null; + + const query = { + query: queryString + }; + + if (connection.datasetName) { + query.defaultDataset = { datasetId: connection.datasetName }; + } + + // TODO: should maxRows apply to non-SELECT statements? + return bigquery + .createQueryJob(query) + .then(([job]) => { + // Wait for the query to finish. + const options = { timeoutMs: timeoutSeconds * 1000 }; + if (isMaxRowsSpecified) { + options.maxResults = connection.maxRows + 1; + } + return job.getQueryResults(options); + }) + .then(([rows]) => { + if (rows.length === 0) { + const t2 = process.hrtime(t1); + if (t2[0] >= timeoutSeconds) { + throw new Error(`Query timed out after ${timeoutSeconds} seconds.`); + } + } + + if (isMaxRowsSpecified && rows.length > connection.maxRows) { + rows.splice(connection.maxRows); + incomplete = true; + } + + return { + incomplete, + rows + }; + }); +} + +/** + * Test connectivity of connection + * @param {*} connection + */ +function testConnection(connection) { + const query = `SELECT * FROM \`${connection.datasetName}.__TABLES_SUMMARY__\` LIMIT 1`; + return runQuery(query, connection); +} + +/** + * Get schema for connection + * @param {*} connection + */ +function getSchema(connection) { + const bigquery = newBigQuery(connection); + + const query = { + query: `SELECT * FROM \`${connection.datasetName}.__TABLES__\``, + // Location must match that of the dataset(s) referenced in the query. + location: connection.datasetLocation + }; + + return bigquery + .createQueryJob(query) + .then(([job]) => { + // Waits for the query to finish + return job.getQueryResults(); + }) + .then(([tables]) => { + const promises = []; + for (let table of tables) { + promises.push( + bigquery + .dataset(connection.datasetName) + .table(table.table_id) + .getMetadata() + ); + } + return Promise.all(promises); + }) + .then(tables => { + const tableSchema = { + rows: [] + }; + for (let table of tables) { + const tableInfo = table[0]; + if (tableInfo.kind !== 'bigquery#table') continue; // eslint-disable-line no-continue + const datasetId = tableInfo.tableReference.datasetId; + const tableId = tableInfo.tableReference.tableId; + const fields = tableInfo.schema.fields; + for (let field of fields) { + tableSchema.rows.push({ + table_schema: datasetId, + table_name: tableId, + column_name: field.name, + data_type: field.type + }); + } + } + return formatSchemaQueryResults(tableSchema); + }); +} + +const fields = [ + { + key: 'projectId', + formType: 'TEXT', + label: 'Google Cloud Console Project ID' + }, + { + key: 'keyFile', + formType: 'TEXT', + label: 'JSON Keyfile for Service Account' + }, + { + key: 'datasetName', + formType: 'TEXT', + label: 'Dataset to use' + }, + { + key: 'datasetLocation', + formType: 'TEXT', + label: 'Location for this Dataset' + } +]; + +module.exports = { + id, + name, + fields, + getSchema, + runQuery, + testConnection +}; diff --git a/server/drivers/bigquery/test.js b/server/drivers/bigquery/test.js new file mode 100644 index 000000000..165aa513a --- /dev/null +++ b/server/drivers/bigquery/test.js @@ -0,0 +1,186 @@ +const assert = require('assert'); +const bigquery = require('./index.js'); + +const connection = { + name: 'test bigquery', + driver: 'bigquery', + projectId: process.env.BIGQUERY_TEST_GCP_PROJECT_ID, + datasetName: process.env.BIGQUERY_TEST_DATASET_NAME, + keyFile: process.env.BIGQUERY_TEST_CREDENTIALS_FILE, + datasetLocation: process.env.BIGQUERY_TEST_DATASET_LOCATION, + maxRows: 10 +}; + +const testTable = 'sqlpad_test'; +const dropTable = `DROP TABLE IF EXISTS ${connection.datasetName}.${testTable}`; +const createTable = `CREATE TABLE ${connection.datasetName}.${testTable} (id int64)`; +const inserts = `INSERT INTO ${connection.datasetName}.${testTable} (id) VALUES (1), (2), (3)`; +const testTimeoutMsecs = 15000; + +describe('drivers/bigquery', function() { + this.timeout(testTimeoutMsecs); // Set a large default timeout for all tests because BigQuery can be slow to respond. + + before(function(done) { + if ( + connection.projectId && + connection.datasetName && + connection.keyFile && + connection.datasetLocation + ) { + bigquery + .runQuery(dropTable, connection) + .then(() => bigquery.runQuery(createTable, connection)) + .then(() => bigquery.runQuery(inserts, connection)) + .then(function() { + done(); + }); + } else { + console.log( + 'Define BIGQUERY_TEST_GCP_PROJECT_ID, BIGQUERY_TEST_DATASET_NAME, BIGQUERY_TEST_CREDENTIALS_FILE, and BIGQUERY_TEST_DATASET_LOCATION to run the bigquery driver tests' + ); + this.skip(); + } + }); + + it('implements testConnection', function() { + return bigquery.testConnection(connection).then(results => { + assert(results, 'testConnection returns results'); + assert(!results.incomplete, 'testConnection results are marked complete'); + }); + }); + + it('implements getSchema', function() { + return bigquery.getSchema(connection).then(schemaInfo => { + const schema = schemaInfo[connection.datasetName]; + const MSG = 'schema query returns expected results'; + + assert(schema, MSG); + assert(schema.hasOwnProperty(testTable), MSG); + const columns = schema[testTable]; + assert.equal(columns.length, 1, MSG); + assert.equal(columns[0].table_schema, connection.datasetName, MSG); + assert.equal(columns[0].table_name, testTable, MSG); + assert.equal(columns[0].column_name, 'id', MSG); + assert.equal(columns[0].data_type, 'INTEGER', MSG); + }); + }); + + it('implements runQuery and reports successful queries as complete that return <= maxRows', function() { + return bigquery + .runQuery( + `SELECT id FROM ${connection.datasetName}.${testTable} WHERE id = 1`, + connection + ) + .then(results => { + assert(!results.incomplete, 'results should be marked complete'); + assert.equal(results.rows.length, 1, 'right number of rows'); + }); + }); + + it('implements runQuery and reports successful queries as incomplete that return > maxRows', function() { + const limitedConnection = { ...connection, maxRows: 2 }; + + return bigquery + .runQuery( + `SELECT * FROM ${connection.datasetName}.${testTable}`, + limitedConnection + ) + .then(results => { + assert(results.incomplete, 'results should be marked incomplete'); + assert.equal(results.rows.length, 2, 'right number of rows'); + }); + }); + + it('implements runQuery and can run queries with no maxRows defined', function() { + const connectionWithoutMaxRows = { ...connection }; + delete connectionWithoutMaxRows.maxRows; + + return bigquery + .runQuery( + `SELECT * FROM ${connection.datasetName}.${testTable}`, + connectionWithoutMaxRows + ) + .then(results => { + assert(!results.incomplete, 'results should be marked complete'); + assert.equal(results.rows.length, 3, 'right number of rows'); + }); + }); + + it('supports Standard SQL dialect by default', function() { + return bigquery + .runQuery( + `SELECT CAST(id AS INT64) FROM ${connection.datasetName}.${testTable} WHERE id = 1`, + connection + ) + .then(results => { + assert(results, 'returns results'); + }); + }); + + it('throws errors for Legacy SQL', function() { + let error; + return bigquery + .runQuery( + `SELECT CAST(id AS INTEGER) FROM ${connection.datasetName}.${testTable} WHERE id = 1`, + connection + ) + .then(() => { + assert.fail('An error should have been thrown for Legacy SQL.'); + }) + .catch(e => { + error = e; + }) + .then(() => { + assert( + error.toString().includes('Type not found'), + 'throws an exception' + ); + }); + }); + + it('returns descriptive error message for a missing table', function() { + let error; + return bigquery + .runQuery( + `SELECT * FROM ${connection.datasetName}.missing_table`, + connection + ) + .then(() => { + assert.fail( + 'An error should have been thrown when referencing a missing table.' + ); + }) + .catch(e => { + error = e; + }) + .then(() => { + assert( + error.toString().includes('was not found'), + 'throws the correct error' + ); + }); + }); + + it('returns descriptive error message for bad syntax', function() { + let error; + + return bigquery + .runQuery( + `SELECT * FLARB ${connection.datasetName}.${testTable}`, + connection + ) + .then(() => { + assert.fail('An error should have been thrown for bad syntax.'); + }) + .catch(e => { + error = e; + }) + .then(() => { + assert(error, 'An error is thrown for bad syntax'); + assert( + error.toString().includes('Syntax error'), + 'throws the correct error' + ); + }); + }); +}); diff --git a/server/drivers/bigquery/test.sh b/server/drivers/bigquery/test.sh new file mode 100755 index 000000000..1202fddaa --- /dev/null +++ b/server/drivers/bigquery/test.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +if [ -z "${BIGQUERY_TEST_CREDENTIALS_FILE}" ]; then + echo "Must set BIGQUERY_TEST_CREDENTIALS_FILE with service account json file for testing" + exit 1 +fi + +if [ -z "${BIGQUERY_TEST_GCP_PROJECT_ID}" ]; then + echo "Must set BIGQUERY_TEST_GCP_PROJECT_ID with Google Cloud Project Name for testing" + exit 1 +fi + +if [ -z "${BIGQUERY_TEST_DATASET_NAME}" ]; then + echo "Must set BIGQUERY_TEST_DATASET_NAME with BigQuery Dataset Name" + exit 1 +fi + +if [ -z "${BIGQUERY_TEST_DATASET_LOCATION}" ]; then + echo "Must set BIGQUERY_TEST_DATASET_LOCATION with Google Cloud Project Region e.g. US" + exit 1 +fi + +npx mocha ./test.js diff --git a/server/drivers/index.js b/server/drivers/index.js index 4c17b9e41..3d26dd18b 100644 --- a/server/drivers/index.js +++ b/server/drivers/index.js @@ -13,7 +13,8 @@ const drivers = { snowflake: require('./snowflake'), sqlite: require('./sqlite'), sqlserver: require('./sqlserver'), - vertica: require('./vertica') + vertica: require('./vertica'), + bigquery: require('./bigquery') }; // unixodbc is an optional dependency due to it needing to be compiled diff --git a/server/package-lock.json b/server/package-lock.json index cbc6b8149..ccf1eb88c 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,6 +1,6 @@ { "name": "sqlpad", - "version": "4.1.1", + "version": "4.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -61,6 +61,78 @@ "js-tokens": "^4.0.0" } }, + "@google-cloud/bigquery": { + "version": "4.7.0", + "resolved": "git+https://github.com/murphyke/nodejs-bigquery.git#a8532d2a1f01d6a061336c3ee3c2cec7469ca281", + "requires": { + "@google-cloud/common": "^2.0.0", + "@google-cloud/paginator": "^2.0.0", + "@google-cloud/promisify": "^1.0.0", + "arrify": "^2.0.1", + "big.js": "^5.2.2", + "duplexify": "^4.0.0", + "extend": "^3.0.2", + "is": "^3.3.0", + "stream-events": "^1.0.5", + "string-format-obj": "^1.1.1", + "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "@google-cloud/common": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-2.3.0.tgz", + "integrity": "sha512-nmIyi3q/FL2j6ZJ61xK/863DoJEZayI2/W/iCgwrCYUYsem277XO45MBTAimjgiKBCA0c9InmQyfT48h/IK4jg==", + "requires": { + "@google-cloud/projectify": "^1.0.0", + "@google-cloud/promisify": "^1.0.0", + "arrify": "^2.0.0", + "duplexify": "^3.6.0", + "ent": "^2.2.0", + "extend": "^3.0.2", + "google-auth-library": "^5.5.0", + "retry-request": "^4.0.0", + "teeny-request": "^6.0.0" + }, + "dependencies": { + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + } + } + }, + "@google-cloud/paginator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-2.0.3.tgz", + "integrity": "sha512-kp/pkb2p/p0d8/SKUu4mOq8+HGwF8NPzHWkj+VKrIPQPyMRw8deZtrO/OcSiy9C/7bpfU5Txah5ltUNfPkgEXg==", + "requires": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + } + }, + "@google-cloud/projectify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-1.0.4.tgz", + "integrity": "sha512-ZdzQUN02eRsmTKfBj9FDL0KNDIFNjBn/d6tHQmA/+FImH5DO6ZV8E7FzxMgAUiVAUq41RFAkb25p1oHOZ8psfg==" + }, + "@google-cloud/promisify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-1.0.4.tgz", + "integrity": "sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ==" + }, "@hapi/address": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.0.0.tgz", @@ -110,15 +182,26 @@ "@hapi/hoek": "^9.0.0" } }, + "@tootallnate/once": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.0.0.tgz", + "integrity": "sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA==" + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, "@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, "@types/node": { - "version": "13.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.1.tgz", - "integrity": "sha512-Zq8gcQGmn4txQEJeiXo/KiLpon8TzAl0kmKH4zdWctPj05nWwp1ClMdAVEloqrQKfaC48PNLdgN/aVaLqUrluA==" + "version": "13.7.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.7.tgz", + "integrity": "sha512-Uo4chgKbnPNlxQwoFmYIwctkQVkMMmsAoGGU4JKwLuvBefF0pCq4FybNSnfkfRCpC7ZW7kttcC/TrRtAJsvGtg==" }, "@types/readable-stream": { "version": "2.3.5", @@ -142,6 +225,14 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -152,15 +243,15 @@ } }, "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", "dev": true }, "acorn-jsx": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", - "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", "dev": true }, "adal-node": { @@ -232,9 +323,9 @@ } }, "ajv": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", - "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -249,19 +340,26 @@ "dev": true }, "ansi-escapes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", - "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { "version": "3.2.1", @@ -476,6 +574,11 @@ } } }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -569,6 +672,11 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, "base64url": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", @@ -592,10 +700,15 @@ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, "bignumber.js": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", + "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" }, "binary-extensions": { "version": "2.0.0", @@ -844,12 +957,6 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -1209,6 +1316,29 @@ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" }, + "duplexify": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", + "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "dynamic-dedupe": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", @@ -1263,11 +1393,15 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "requires": { "once": "^1.4.0" } }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" + }, "env-variable": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", @@ -1532,13 +1666,13 @@ "dev": true }, "espree": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", - "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.0.tgz", + "integrity": "sha512-Xs8airJ7RQolnDIbLtRutmfvSsAe0xqMMAantCN/GMoqf81TFbeI1T7Jpd56qYu1uuh32dOG5W/X9uO+ghPXzA==", "dev": true, "requires": { "acorn": "^7.1.0", - "acorn-jsx": "^5.1.0", + "acorn-jsx": "^5.2.0", "eslint-visitor-keys": "^1.1.0" } }, @@ -1583,6 +1717,11 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, "exit-on-epipe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", @@ -1718,19 +1857,17 @@ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, + "fast-text-encoding": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz", + "integrity": "sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ==" + }, "fast-url-parser": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", "requires": { "punycode": "^1.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } } }, "feature-policy": { @@ -1744,9 +1881,9 @@ "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" }, "figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -1993,6 +2130,64 @@ } } }, + "gaxios": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.1.tgz", + "integrity": "sha512-DQOesWEx59/bm63lTX0uHDDXpGTW9oKqNsoigwCoRe2lOb5rFqxzHjLTa6aqEBecLcz69dHLw7rbS068z1fvIQ==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + }, + "dependencies": { + "agent-base": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz", + "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==", + "requires": { + "debug": "4" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "gcp-metadata": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.3.1.tgz", + "integrity": "sha512-RrASg1HaVAxoB9Q/8sYfJ++v9PMiiqIgOrOxZeagMgS4osZtICT1lKBx2uvzYgwetxj8i6K99Z0iuKMg7WraTg==", + "requires": { + "gaxios": "^2.1.0", + "json-bigint": "^0.3.0" + } + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2044,6 +2239,57 @@ "type-fest": "^0.8.1" } }, + "google-auth-library": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.9.2.tgz", + "integrity": "sha512-rBE1YTOZ3/Hu6Mojkr+UUmbdc/F28hyMGYEGxjyfVA9ZFmq12oqS3AeftX4h9XpdVIcxPooSo8hECYGT6B9XqQ==", + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "fast-text-encoding": "^1.0.0", + "gaxios": "^2.1.0", + "gcp-metadata": "^3.3.0", + "gtoken": "^4.1.0", + "jws": "^4.0.0", + "lru-cache": "^5.0.0" + }, + "dependencies": { + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + } + } + }, + "google-p12-pem": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.4.tgz", + "integrity": "sha512-S4blHBQWZRnEW44OcR7TL9WR+QCqByRvhNDZ/uuQfpxywfupikf/miba8js1jZi6ZOGv5slgSuoshCWh6EMDzg==", + "requires": { + "node-forge": "^0.9.0" + }, + "dependencies": { + "node-forge": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.1.tgz", + "integrity": "sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ==" + } + } + }, "graceful-fs": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", @@ -2061,6 +2307,43 @@ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", "dev": true }, + "gtoken": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.4.tgz", + "integrity": "sha512-VxirzD0SWoFUo5p8RDP8Jt2AGyOmyYcT/pOUgDKJCK+iSw0TMqwrVfY37RXTNmoKwrzmDHSk0GMT9FsgVmnVSA==", + "requires": { + "gaxios": "^2.1.0", + "google-p12-pem": "^2.0.0", + "jws": "^4.0.0", + "mime": "^2.2.0" + }, + "dependencies": { + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + } + } + }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -2203,6 +2486,39 @@ "toidentifier": "1.0.0" } }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "agent-base": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz", + "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==", + "requires": { + "debug": "4" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -2326,24 +2642,108 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", - "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.6.tgz", + "integrity": "sha512-7SVO4h+QIdMq6XcqIqrNte3gS5MzCCKZdsq9DO4PJziBFNYzP3PGFbDjgadDb//MCahzgjCxvQ/O2wa7kx9o4w==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", + "chalk": "^3.0.0", "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.15", "mute-stream": "0.0.8", - "run-async": "^2.2.0", + "run-async": "^2.4.0", "rxjs": "^6.5.3", "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", + "strip-ansi": "^6.0.0", "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "ipaddr.js": { @@ -2351,6 +2751,11 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" }, + "is": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", + "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==" + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -2405,10 +2810,9 @@ } }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-glob": { "version": "4.0.1", @@ -2531,6 +2935,14 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, + "json-bigint": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.0.tgz", + "integrity": "sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4=", + "requires": { + "bignumber.js": "^7.0.0" + } + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -2606,9 +3018,9 @@ } }, "kruptein": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/kruptein/-/kruptein-2.0.5.tgz", - "integrity": "sha512-1WRXAil8d5jZ6jNXC0/pOC2lJsu2GhL3zhzL7DDvtCsef+NC1JvZUXnyNnM6Kuv0aan54moM/hsPvUAkx3y7/w==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/kruptein/-/kruptein-2.0.6.tgz", + "integrity": "sha512-mUoTKvY8S7fROh7Td1HeRHbUnJV5z1Qfqm4JTe4R0CdJs6nWzCAJpk+jczUXpU4kJEbUHvJe5yuhPOIDWTHcgg==" }, "kuler": { "version": "1.0.1", @@ -2725,6 +3137,14 @@ "signal-exit": "^3.0.0" } }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -3105,6 +3525,11 @@ "sqlstring": "2.3.1" }, "dependencies": { + "bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -3174,9 +3599,9 @@ } }, "needle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.2.tgz", - "integrity": "sha512-DUzITvPVDUy6vczKKYTnWc/pBZ0EnjMJnQ3y+Jo5zfKFimJs7S3HFCxCRZYB9FUZcrzUQr3WsmvZgddMEIZv6w==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.3.tgz", + "integrity": "sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw==", "requires": { "debug": "^3.2.6", "iconv-lite": "^0.4.4", @@ -3630,9 +4055,9 @@ }, "dependencies": { "async": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", - "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "optional": true } } @@ -4137,9 +4562,9 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "q": { "version": "1.5.1", @@ -4363,6 +4788,30 @@ "any-promise": "^1.3.0" } }, + "retry-request": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.1.1.tgz", + "integrity": "sha512-BINDzVtLI2BDukjWmjAIRZ0oglnCAkpP2vQjM3jdLhmT62h0xnQgciPwBRDAvHqpkPT2Wo1XuUyLyn6nbGrZQQ==", + "requires": { + "debug": "^4.1.1", + "through2": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -4372,9 +4821,9 @@ } }, "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", + "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", "dev": true, "requires": { "is-promise": "^2.1.0" @@ -4614,14 +5063,6 @@ "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } } }, "slide": { @@ -4839,24 +5280,39 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "requires": { + "stubs": "^3.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "string-format-obj": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string-format-obj/-/string-format-obj-1.1.1.tgz", + "integrity": "sha512-Mm+sROy+pHJmx0P/0Bs1uxIX6UhGJGj6xDGQZ5zh9v/SZRmLGevp+p0VJxV7lirrkAmQ2mvva/gHKpnF/pTb+Q==" + }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^3.0.0" } } } @@ -4935,6 +5391,11 @@ "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "dev": true }, + "stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=" + }, "superagent": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", @@ -5007,12 +5468,6 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -5096,6 +5551,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -5108,6 +5568,55 @@ } } }, + "teeny-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.2.tgz", + "integrity": "sha512-B6fxA0fSnY/bul06NggdN1nywtr5U5Uvt96pHfTi8pi4MNe6++VUWcAAFBrcMeha94s+gULwA5WvagoSZ+AcYg==", + "requires": { + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.2.0", + "stream-events": "^1.0.5", + "uuid": "^3.3.2" + }, + "dependencies": { + "agent-base": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz", + "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==", + "requires": { + "debug": "4" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, "text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", @@ -5132,6 +5641,14 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "requires": { + "readable-stream": "2 || 3" + } + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -5167,6 +5684,13 @@ "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } } }, "trim-newlines": { @@ -5283,6 +5807,13 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } } }, "utf8-byte-length": { @@ -5367,35 +5898,6 @@ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "requires": { "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } } }, "winston": { @@ -5474,12 +5976,6 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -5672,12 +6168,6 @@ "locate-path": "^3.0.0" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", diff --git a/server/package.json b/server/package.json index 728ebdc4d..fe6f9face 100644 --- a/server/package.json +++ b/server/package.json @@ -1,7 +1,7 @@ { "name": "sqlpad", - "version": "4.1.1", - "description": "Web app. Write SQL and visualize the results. Supports Postgres, MySQL, SQL Server, Crate, Vertica and SAP HANA.", + "version": "4.2.0", + "description": "Web app. Write SQL and visualize the results. Supports Postgres, MySQL, SQL Server, Crate, Vertica, SAP HANA, and BigQuery.", "license": "MIT", "engines": { "node": ">=12" @@ -17,7 +17,9 @@ "presto", "vertica", "sap", - "hana" + "hana", + "bigquery", + "bq" ], "repository": { "type": "git", @@ -34,6 +36,7 @@ "lint": "eslint \"**/*.js\"" }, "dependencies": { + "@google-cloud/bigquery": "^4.7.0", "@hapi/joi": "^17.1.0", "bcrypt-nodejs": "0.0.3", "body-parser": "^1.19.0", From b42c6376152f062f6f41e1149749f7f840f98fde Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Wed, 11 Mar 2020 18:45:14 -0500 Subject: [PATCH 040/658] Auto-connect connection-client (#575) --- client/src/queryEditor/ConnectionDropdown.js | 21 ++++++++--- client/src/queryEditor/QueryEditor.js | 38 ++++++++++++++------ 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/client/src/queryEditor/ConnectionDropdown.js b/client/src/queryEditor/ConnectionDropdown.js index 584442697..28ac7f12d 100644 --- a/client/src/queryEditor/ConnectionDropdown.js +++ b/client/src/queryEditor/ConnectionDropdown.js @@ -3,11 +3,16 @@ import { connect } from 'unistore/react'; import Select from '../common/Select'; import ConnectionEditDrawer from '../connections/ConnectionEditDrawer'; import ConnectionListDrawer from '../connections/ConnectionListDrawer'; -import { addUpdateConnection, selectConnectionId } from '../stores/connections'; +import { + addUpdateConnection, + connectConnectionClient, + selectConnectionId +} from '../stores/connections'; import styles from './ConnectionDropdown.module.css'; function ConnectionDropdown({ addUpdateConnection, + connectConnectionClient, connections, currentUser, selectConnectionId, @@ -24,12 +29,14 @@ function ConnectionDropdown({ return setShowConnections(true); } selectConnectionId(event.target.value); + connectConnectionClient(); }; const handleConnectionSaved = connection => { addUpdateConnection(connection); selectConnectionId(connection._id); setShowEdit(false); + connectConnectionClient(); }; const style = !selectedConnectionId @@ -76,7 +83,11 @@ function ConnectionDropdown({ ); } -export default connect(['connections', 'currentUser', 'selectedConnectionId'], { - selectConnectionId, - addUpdateConnection -})(ConnectionDropdown); +export default connect( + ['connections', 'currentUser', 'selectedConnectionId'], + store => ({ + connectConnectionClient: connectConnectionClient(store), + selectConnectionId, + addUpdateConnection + }) +)(ConnectionDropdown); diff --git a/client/src/queryEditor/QueryEditor.js b/client/src/queryEditor/QueryEditor.js index b577f5020..7cbb5d752 100644 --- a/client/src/queryEditor/QueryEditor.js +++ b/client/src/queryEditor/QueryEditor.js @@ -1,11 +1,15 @@ import debounce from 'lodash/debounce'; import PropTypes from 'prop-types'; -import React, { useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import SplitPane from 'react-split-pane'; import { connect } from 'unistore/react'; +import AppHeader from '../app-header/AppHeader'; import { resizeChart } from '../common/tauChartRef'; import SchemaSidebar from '../schema/SchemaSidebar.js'; -import { loadConnections } from '../stores/connections'; +import { + connectConnectionClient, + loadConnections +} from '../stores/connections'; import { loadQuery, resetNewQuery } from '../stores/queries'; import { loadTags } from '../stores/tags'; import DocumentTitle from './DocumentTitle'; @@ -16,13 +20,13 @@ import QueryEditorSqlEditor from './QueryEditorSqlEditor'; import QueryResultHeader from './QueryResultHeader.js'; import Shortcuts from './Shortcuts'; import Toolbar from './toolbar/Toolbar'; -import AppHeader from '../app-header/AppHeader'; import UnsavedQuerySelector from './UnsavedQuerySelector'; const deboucedResearchChart = debounce(resizeChart, 700); function QueryEditor(props) { const { + connectConnectionClient, loadConnections, loadQuery, loadTags, @@ -32,18 +36,29 @@ function QueryEditor(props) { showVis } = props; + const [initialized, setInitialized] = useState(false); + useEffect(() => { - loadConnections(); - loadTags(); + Promise.all([loadConnections(), loadTags()]).then(() => + setInitialized(true) + ); }, [loadConnections, loadTags]); + // Once initialized reset or load query on changes accordingly useEffect(() => { - if (queryId === 'new') { - resetNewQuery(); - } else { - loadQuery(queryId); + if (initialized) { + if (queryId === 'new') { + resetNewQuery(); + connectConnectionClient(); + } else { + loadQuery(queryId).then(() => connectConnectionClient()); + } } - }, [queryId, resetNewQuery, loadQuery]); + }, [initialized, connectConnectionClient, queryId, resetNewQuery, loadQuery]); + + if (!initialized) { + return null; + } function handleVisPaneResize() { deboucedResearchChart(queryId); @@ -151,8 +166,9 @@ function mapStateToProps(state, props) { } export default connect(mapStateToProps, store => ({ + connectConnectionClient: connectConnectionClient(store), loadConnections: loadConnections(store), - loadTags, loadQuery, + loadTags, resetNewQuery }))(QueryEditor); From 2dcfda0acc23185c05df701b0bf06cb2c08d4722 Mon Sep 17 00:00:00 2001 From: Hessam Shahriari Date: Thu, 12 Mar 2020 18:26:02 -0400 Subject: [PATCH 041/658] Disable Authentication (#576) * ALBT-81 Add BigQuery driver * Add docker-compose for local dev * Ignore dockerfile.dev * Add disableAuth flag and middleware * Call middleware * Add config examples * Hide user element when role is noauth * Remove extra file * Remove console log * Remove console log * Formatting * Apply linter * Remove local dev files * Update readme file * Revert package-lock changes Co-authored-by: Kevin Murphy --- README.md | 4 ++++ client/src/app-header/AppHeaderAdminSection.js | 12 +++++++++--- client/src/app-header/AppHeaderUser.js | 5 ++++- client/src/app-header/AppMenu.js | 16 ++++++++++++++-- config-example.ini | 3 +++ config-example.json | 1 + package-lock.json | 2 +- server/app.js | 5 +++++ server/lib/config/configItems.js | 5 +++++ server/middleware/disable-auth.js | 11 +++++++++++ 10 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 server/middleware/disable-auth.js diff --git a/README.md b/README.md index f81bd957e..05d32a93f 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,10 @@ Env var: `SQLPAD_DB_IN_MEMORY` Add a variety of logging to console while running SQLPad Env var: `SQLPAD_DEBUG` +**disableAuth** +Set to TRUE to disable authentication altogether. +Env var: `DISABLE_AUTH` + **disableUserpassAuth** Set to TRUE to disable built-in user authentication. Use to restrict auth to OAuth only. Env var: `DISABLE_USERPASS_AUTH` diff --git a/client/src/app-header/AppHeaderAdminSection.js b/client/src/app-header/AppHeaderAdminSection.js index fecf7ab89..cac3b09c5 100644 --- a/client/src/app-header/AppHeaderAdminSection.js +++ b/client/src/app-header/AppHeaderAdminSection.js @@ -9,21 +9,26 @@ import AppHeaderDivider from './AppHeaderDivider'; function mapStateToProps(state) { return { - isAdmin: state.currentUser && state.currentUser.role === 'admin' + currentUser: state.currentUser }; } const Connected = connect(mapStateToProps)(React.memo(AppHeaderAdminSection)); -function AppHeaderAdminSection({ isAdmin }) { +function AppHeaderAdminSection({ currentUser }) { const [showConnections, setShowConnections] = useState(false); const [showConnectionAccesses, setShowConnectionAccesses] = useState(false); const [showUsers, setShowUsers] = useState(false); - if (!isAdmin) { + if (currentUser.role !== 'admin') { return null; } + let hideButton = false; + if (currentUser._id === 'noauth') { + hideButton = true; + } + return [ , @@ -59,6 +64,7 @@ function AppHeaderAdminSection({ isAdmin }) { key="user-button" variant="ghost" onClick={() => setShowUsers(true)} + hidden={hideButton} > Users , diff --git a/client/src/app-header/AppHeaderUser.js b/client/src/app-header/AppHeaderUser.js index 77ba87aab..f722ce756 100644 --- a/client/src/app-header/AppHeaderUser.js +++ b/client/src/app-header/AppHeaderUser.js @@ -11,8 +11,11 @@ function mapStateToProps(state) { const Connected = connect(mapStateToProps)(React.memo(UserButton)); function UserButton({ currentUser }) { + if (currentUser._id === 'noauth') { + return null; + } return ( -
{currentUser.name || currentUser.email}
+
{currentUser.name || currentUser.email}
); } diff --git a/client/src/app-header/AppMenu.js b/client/src/app-header/AppMenu.js index decf68c1e..bbcd39216 100644 --- a/client/src/app-header/AppMenu.js +++ b/client/src/app-header/AppMenu.js @@ -8,11 +8,17 @@ import { clearQueries } from '../stores/queries'; import fetchJson from '../utilities/fetch-json.js'; import AboutModal from './AboutModal'; -const Connected = connect(null, store => ({ +function mapStateToProps(state) { + return { + currentUser: state.currentUser + }; +} + +const Connected = connect(mapStateToProps, store => ({ clearQueries }))(React.memo(AppMenu)); -function AppMenu({ clearQueries }) { +function AppMenu({ currentUser, clearQueries }) { const [redirectToSignIn, setRedirectToSignIn] = useState(false); const [showAbout, setShowAbout] = useState(false); @@ -20,6 +26,11 @@ function AppMenu({ clearQueries }) { return ; } + let hideSignOut = false; + if (currentUser._id === 'noauth') { + hideSignOut = true; + } + return (
}> @@ -30,6 +41,7 @@ function AppMenu({ clearQueries }) { clearQueries(); setRedirectToSignIn(true); }} + hidden={hideSignOut} > Sign out diff --git a/config-example.ini b/config-example.ini index a1328d5ad..3299ef930 100644 --- a/config-example.ini +++ b/config-example.ini @@ -28,6 +28,9 @@ dbPath="" ; Add a variety of logging to console while running SQLPad debug="false" +; Set to TRUE to disable authentication altogether. +disableAuth="false" + ; Set to TRUE to disable built-in user authentication. Use to restrict auth to OAuth only. disableUserpassAuth="false" diff --git a/config-example.json b/config-example.json index 04e53b8a2..31bf39aca 100644 --- a/config-example.json +++ b/config-example.json @@ -9,6 +9,7 @@ "cookieSecret": "secret-used-to-sign-cookies-please-set-and-make-strong", "dbPath": "", "debug": false, + "disableAuth": false, "disableUserpassAuth": false, "editorWordWrap": false, "googleClientId": "", diff --git a/package-lock.json b/package-lock.json index 24a000339..283f907bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1194,4 +1194,4 @@ } } } -} +} \ No newline at end of file diff --git a/server/app.js b/server/app.js index e3919da12..52f4db6bc 100644 --- a/server/app.js +++ b/server/app.js @@ -48,6 +48,7 @@ function makeApp(config, models) { const favicon = require('serve-favicon'); const passport = require('passport'); const passportBasic = require('./middleware/passport-basic'); + const disableAuth = require('./middleware/disable-auth'); const app = express(); @@ -107,6 +108,10 @@ function makeApp(config, models) { app.use(passportBasic); } + if (config.get('disableAuth')) { + app.use(disableAuth); + } + /* Routes ============================================================================= */ const routers = [ diff --git a/server/lib/config/configItems.js b/server/lib/config/configItems.js index feb671cf2..04b730f42 100644 --- a/server/lib/config/configItems.js +++ b/server/lib/config/configItems.js @@ -109,6 +109,11 @@ const configItems = [ envVar: 'DISABLE_USERPASS_AUTH', default: false }, + { + key: 'disableAuth', + envVar: 'DISABLE_AUTH', + default: false + }, { key: 'allowCsvDownload', envVar: 'SQLPAD_ALLOW_CSV_DOWNLOAD', diff --git a/server/middleware/disable-auth.js b/server/middleware/disable-auth.js new file mode 100644 index 000000000..230277583 --- /dev/null +++ b/server/middleware/disable-auth.js @@ -0,0 +1,11 @@ +module.exports = function(req, res, next) { + if (req.config.get('disableAuth')) { + req.user = { + id: 'noauth', + _id: 'noauth', + role: 'admin', + email: 'test@example.com' + }; + } + next(); +}; From 4373ee8be9dadfe044920f0b1d14c9d028a81669 Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 13 Mar 2020 21:04:02 -0500 Subject: [PATCH 042/658] Update project page with Docsify (#578) * Use docsify for docs * Words * More words * remove docs-source reference --- .prettierignore | 2 - docs-source/archetypes/default.md | 6 - docs-source/config.toml | 5 - docs-source/content/_index.md | 5 - docs-source/content/posts/_index.md | 8 - .../posts/installation-and-administration.md | 121 ---- docs-source/content/posts/version-3-beta.md | 26 - docs-source/layouts/_default/baseof.html | 110 ---- docs-source/layouts/_default/list.html | 50 -- docs-source/layouts/_default/single.html | 25 - docs-source/layouts/index.html | 149 ----- docs-source/layouts/partials/footer.html | 6 - docs-source/layouts/partials/header.html | 0 docs-source/static/css/normalize.css | 427 -------------- docs-source/static/css/skeleton-home.css | 210 ------- docs-source/static/css/skeleton.css | 551 ------------------ docs-source/static/images/favicon.ico | Bin 10358 -> 0 bytes docs-source/static/images/favicon.png | Bin 1156 -> 0 bytes docs-source/static/images/logo-mysql.png | Bin 1765 -> 0 bytes docs-source/static/images/logo-postgresql.png | Bin 50279 -> 0 bytes docs-source/static/images/logo-sql-server.png | Bin 91976 -> 0 bytes docs-source/static/images/logo-vertica.jpg | Bin 14222 -> 0 bytes .../screenshots/chart-horizontal-bar.png | Bin 117717 -> 0 bytes .../static/images/screenshots/chart-line.png | Bin 182370 -> 0 bytes .../static/images/screenshots/chart-plot.png | Bin 168114 -> 0 bytes .../images/screenshots/chart-stacked-bar.png | Bin 150544 -> 0 bytes .../images/screenshots/configuration.png | Bin 177148 -> 0 bytes .../static/images/screenshots/connections.png | Bin 141231 -> 0 bytes .../static/images/screenshots/queries.png | Bin 243256 -> 0 bytes .../screenshots/query-editor-blur-red.jpg | Bin 32190 -> 0 bytes .../images/screenshots/query-editor-blur.jpg | Bin 38970 -> 0 bytes .../images/screenshots/query-editor.png | Bin 230675 -> 0 bytes .../static/images/screenshots/users.png | Bin 170088 -> 0 bytes .../static/images/screenshots/v3-beta.png | Bin 1138834 -> 0 bytes .../chart-output-cumulative-line.png | Bin 116319 -> 0 bytes .../images/tutorials/chart-output-line.png | Bin 71194 -> 0 bytes .../chart-output-publish-frequency-thing.png | Bin 68467 -> 0 bytes .../tutorials/chart-output-punchcard.png | Bin 52423 -> 0 bytes .../images/tutorials/chart-output-top-bar.png | Bin 36226 -> 0 bytes .../layouts/404.html => docs/.nojekyll | 0 docs/README.md | 74 +++ docs/_sidebar.md | 9 + docs/authentication.md | 42 ++ docs/categories/index.html | 152 ----- docs/categories/index.xml | 14 - docs/configuration.md | 353 +++++++++++ docs/connections.md | 255 ++++++++ docs/css/normalize.css | 427 -------------- docs/css/skeleton-home.css | 210 ------- docs/css/skeleton.css | 551 ------------------ docs/getting-started.md | 55 ++ .../chart-output-cumulative-line.png | Bin 116319 -> 0 bytes docs/images/tutorials/chart-output-line.png | Bin 71194 -> 0 bytes .../chart-output-publish-frequency-thing.png | Bin 68467 -> 0 bytes .../tutorials/chart-output-punchcard.png | Bin 52423 -> 0 bytes .../images/tutorials/chart-output-top-bar.png | Bin 36226 -> 0 bytes docs/index.html | 287 +-------- docs/index.xml | 53 -- .../index.html | 255 -------- docs/logging.md | 58 ++ docs/posts/index.html | 167 ------ docs/posts/index.xml | 53 -- .../index.html | 242 -------- docs/posts/v2-beta/index.html | 241 -------- docs/posts/version-3-available/index.html | 170 ------ docs/posts/version-3-beta/index.html | 152 ----- docs/seed-data.md | 82 +++ docs/sitemap.xml | 40 -- docs/tags/index.html | 152 ----- docs/tags/index.xml | 14 - .../version-3.md | 16 +- 71 files changed, 961 insertions(+), 4864 deletions(-) delete mode 100644 docs-source/archetypes/default.md delete mode 100644 docs-source/config.toml delete mode 100644 docs-source/content/_index.md delete mode 100644 docs-source/content/posts/_index.md delete mode 100644 docs-source/content/posts/installation-and-administration.md delete mode 100644 docs-source/content/posts/version-3-beta.md delete mode 100644 docs-source/layouts/_default/baseof.html delete mode 100644 docs-source/layouts/_default/list.html delete mode 100644 docs-source/layouts/_default/single.html delete mode 100644 docs-source/layouts/index.html delete mode 100644 docs-source/layouts/partials/footer.html delete mode 100644 docs-source/layouts/partials/header.html delete mode 100644 docs-source/static/css/normalize.css delete mode 100644 docs-source/static/css/skeleton-home.css delete mode 100644 docs-source/static/css/skeleton.css delete mode 100644 docs-source/static/images/favicon.ico delete mode 100644 docs-source/static/images/favicon.png delete mode 100644 docs-source/static/images/logo-mysql.png delete mode 100644 docs-source/static/images/logo-postgresql.png delete mode 100644 docs-source/static/images/logo-sql-server.png delete mode 100644 docs-source/static/images/logo-vertica.jpg delete mode 100644 docs-source/static/images/screenshots/chart-horizontal-bar.png delete mode 100644 docs-source/static/images/screenshots/chart-line.png delete mode 100644 docs-source/static/images/screenshots/chart-plot.png delete mode 100644 docs-source/static/images/screenshots/chart-stacked-bar.png delete mode 100644 docs-source/static/images/screenshots/configuration.png delete mode 100644 docs-source/static/images/screenshots/connections.png delete mode 100644 docs-source/static/images/screenshots/queries.png delete mode 100644 docs-source/static/images/screenshots/query-editor-blur-red.jpg delete mode 100644 docs-source/static/images/screenshots/query-editor-blur.jpg delete mode 100644 docs-source/static/images/screenshots/query-editor.png delete mode 100644 docs-source/static/images/screenshots/users.png delete mode 100644 docs-source/static/images/screenshots/v3-beta.png delete mode 100644 docs-source/static/images/tutorials/chart-output-cumulative-line.png delete mode 100644 docs-source/static/images/tutorials/chart-output-line.png delete mode 100644 docs-source/static/images/tutorials/chart-output-publish-frequency-thing.png delete mode 100644 docs-source/static/images/tutorials/chart-output-punchcard.png delete mode 100644 docs-source/static/images/tutorials/chart-output-top-bar.png rename docs-source/layouts/404.html => docs/.nojekyll (100%) create mode 100644 docs/README.md create mode 100644 docs/_sidebar.md create mode 100644 docs/authentication.md delete mode 100644 docs/categories/index.html delete mode 100644 docs/categories/index.xml create mode 100644 docs/configuration.md create mode 100644 docs/connections.md delete mode 100644 docs/css/normalize.css delete mode 100644 docs/css/skeleton-home.css delete mode 100644 docs/css/skeleton.css create mode 100644 docs/getting-started.md delete mode 100644 docs/images/tutorials/chart-output-cumulative-line.png delete mode 100644 docs/images/tutorials/chart-output-line.png delete mode 100644 docs/images/tutorials/chart-output-publish-frequency-thing.png delete mode 100644 docs/images/tutorials/chart-output-punchcard.png delete mode 100644 docs/images/tutorials/chart-output-top-bar.png delete mode 100644 docs/index.xml delete mode 100644 docs/installation-and-administration/index.html create mode 100644 docs/logging.md delete mode 100644 docs/posts/index.html delete mode 100644 docs/posts/index.xml delete mode 100644 docs/posts/installation-and-administration/index.html delete mode 100644 docs/posts/v2-beta/index.html delete mode 100644 docs/posts/version-3-available/index.html delete mode 100644 docs/posts/version-3-beta/index.html create mode 100644 docs/seed-data.md delete mode 100644 docs/sitemap.xml delete mode 100644 docs/tags/index.html delete mode 100644 docs/tags/index.xml rename docs-source/content/posts/version-3-available.md => docs/version-3.md (93%) diff --git a/.prettierignore b/.prettierignore index e8297638e..dc81793b7 100644 --- a/.prettierignore +++ b/.prettierignore @@ -7,8 +7,6 @@ client/public db dbtest docker-validation -docs -docs-source scripts server/node_modules server/public \ No newline at end of file diff --git a/docs-source/archetypes/default.md b/docs-source/archetypes/default.md deleted file mode 100644 index f5a9e450f..000000000 --- a/docs-source/archetypes/default.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "{{ replace .TranslationBaseName "-" " " | title }}" -date: {{ .Date }} -draft: true ---- - diff --git a/docs-source/config.toml b/docs-source/config.toml deleted file mode 100644 index b432dde23..000000000 --- a/docs-source/config.toml +++ /dev/null @@ -1,5 +0,0 @@ -baseURL = "https://rickbergfalk.github.io/sqlpad/" -languageCode = "en-us" -title = "SQLPad - A web app for running SQL queries and visualizing the results" -publishDir = "../docs" -pygmentsCodeFences = true \ No newline at end of file diff --git a/docs-source/content/_index.md b/docs-source/content/_index.md deleted file mode 100644 index 532497b66..000000000 --- a/docs-source/content/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "SQLPad" -date: 2018-01-27T10:36:46-05:00 -draft: false ---- \ No newline at end of file diff --git a/docs-source/content/posts/_index.md b/docs-source/content/posts/_index.md deleted file mode 100644 index 5d870e2dd..000000000 --- a/docs-source/content/posts/_index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: News and updates -date: 2017-03-23 -publishdate: 2017-03-24 ---- - -News, updates, posts and such about SQLPad. - diff --git a/docs-source/content/posts/installation-and-administration.md b/docs-source/content/posts/installation-and-administration.md deleted file mode 100644 index b2a1d0ef4..000000000 --- a/docs-source/content/posts/installation-and-administration.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: "Installation & Administration (v2)" -date: 2018-01-28T11:51:31-05:00 ---- - -## Installation - -SQLPad can be installed on Mac, Linux, and Windows. - -In order to install SQLPad, you'll first need to install [Node.js](https://nodejs.org/). - -Once node is installed, open up a command line and run - -`npm install sqlpad -g` - -This will install the SQLPad command line utility used to run a SQLPad server. - -To spin up a SQLPad Server, type the following from the command line: - -`sqlpad` - -To get help and see parameters: - -`sqlpad --help` - -## Administration - -Once SQLPad is running, create an initial admin account by navigating to [http://localhost/signup](http://localhost/signup). - -Once an initial admin account has been created, all future users must be whitelisted by an admin within the users page. Other users may also be given admin rights, allowing them to add/edit database connections and whitelist/modify/remove SQLPad users. - -If for whatever reason you lose admin rights, and the last-admin-standing won't give you admin rights back, you can reinstate them to yourself by running - -`sqlpad --admin yourEmailAddress@domain.com` - - -## Updating - -If installed via npm, SQLPad may be updated by running ```npm install sqlpad -g```. - -To install a specific version of SQLPad, a version may be specified by running ```npm install sqlpad@2.1.3 -g```. This is useful to rollback to a previous version. - -Prior to updating, you may want to take a backup of SQLPad's database. By default these files are located under the users home directory `~/sqlpad/db`, but you may have changed the location using the --dir flag when running SQLPad. - - -## Running as a Service - -If you are running SQLPad for your team, chances are you'd like SQLPad to start up when your server boots up, and stay running if an unhandled exception occurs. How this is accomplished largely depends on the operating system you are running. - -Full disclosure - this isn't my area of expertise so if anyone knows of any better options please send a github issue or pull request. - -**Windows**: Use [nssm](http://nssm.cc/) to create a windows service - -**Ubuntu**: Create a job conf file for use with [upstart](http://upstart.ubuntu.com/getting-started.html). - -Here's a script I've gotten to work - but again not sure if this is good practice or if there's a better way to go about it: - -``` -description "sqlpad" -author "yourname " - -start on runlevel [2345] -stop on shutdown - -# I used -u to change the user it executes with, -# which means by default SQLPad uses that user's home directory -# for its database files -exec sudo -u UserAccountToUse /usr/bin/sqlpad --port 3000 - -respawn -``` - -**Mac**: ??? - -**Platform agnostic**: Clone or download the GitHub repository and use [forever](https://github.com/foreverjs/forever) to run server.js directly. (The downside to this though is that you miss out on updating SQLPad with the easy npm install command, and you still have to run the forever command on startup) - - - -## Configuration - -Beyond SQLPad's initial setup options (port, file location, passphrase), there are a few areas where you can opt-in, opt-out, or change the default limits. - -These settings are now listed and documented within SQLPad itself on the configuration page (available to administrator accounts). - - -### Disable NPM Update Check - -By default SQLPad will call npmjs.com every so often to check to see if an update is available. -This may be disabled within the configuration page. - - -### Google OAuth Authentication - -Google OAuth authentication can be enabled by setting the necessary environment variables and configuring your Google API config appropriately. - -First you'll need to set up your Google API oauth client credentials config. - -For OAuth to work be sure to enable the Google+ API for your Google API project. If this isn't enabled it might be why the user profile isn't being fetched. - -Next you'll need to set your JavaScript origins and redirect URIs. If you're testing locally, that might look like the below. Remember to consider the base url/mounting path if SQLPad is not running at the root of the domain. - -- `Authorized JavaScript origins`: `http://localhost:8080` -- `Authorized redirect URIs`: `http://localhost:8080/auth/google/callback` - -Once the Google API config is set, configure the required settings in SQLPad. -For OAuth to be useful this usually involves the following: - -- `GOOGLE_CLIENT_ID` -- `GOOGLE_CLIENT_SECRET` -- `PUBLIC_URL`=`http://localhost` -- `DISABLE_USERPASS_AUTH`=`true` (optional - disables plain local user logins) - - -### Whitelist Domains for User Administration - -An entire domain can be whitelisted for username administration by setting enviornment variable ```WHITELISTED_DOMAINS```. This may be particularly useful in combination with OAuth. - - -### Systemd socket activation - -To use systemd socket activation add ```--systemdSocket``` flag. For more information see [this pull request](https://github.com/rickbergfalk/sqlpad/pull/185). diff --git a/docs-source/content/posts/version-3-beta.md b/docs-source/content/posts/version-3-beta.md deleted file mode 100644 index 9c5fe1aa3..000000000 --- a/docs-source/content/posts/version-3-beta.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: "Version 3 beta now available" -date: 2019-06-25T21:14:48-04:00 ---- - -Version 3 beta has been published to npm & docker. If you've been using the `latest` docker image the last few weeks, you've also been using it. - -When installing via npm referencing exact version or beta tag running the following command `npm install sqlpad@beta -g`. - -SQLPad v3 is backwards-compatible with SQLPad v2 database files, and is mostly a UI redesign/refresh and a large file structure change. Give it a try and if you aren't ready for it roll back to v2 and everything should still work. - -#### Editor-first UI refresh - -UI components previously based on bootstrap UI components are now replaced by custom components. Magenta is embraced as a secondary color. - -Management and listing pages (Queries, connections, users, and configuration) have been moved into side drawers, allowing management and browsing of things without leaving the current query. The query editor is the primary focus of the application. - -Query editor toolbars have been consolidated into a single bar to maximize use of space on the page. - -Unsaved changes to a previously-saved query are now saved, prompting the user to restore on next open. This is not enabled for unsaved changes to "new" queries since it could become an annoyance, but can be added if there is interest. - -Query result chart has been moved to a smaller resizable pane along side the SQL query instead of being placed in a tab. This impacts the size available for the chart, but brings it to the default view, allowing altering of the query without changing tabs. - -The schema sidebar may now be hidden and is now searchable. It has also been rewritten to render large trees efficiently. - -Query result grid no longer has data bars for numeric values since it didn't make sense for all number values. Date value display logic has been altered to only show timestamps if timestamps are detected. When timestamps are shown, the full timestamp from the JavaScript date object is displayed. \ No newline at end of file diff --git a/docs-source/layouts/_default/baseof.html b/docs-source/layouts/_default/baseof.html deleted file mode 100644 index 346b50f7e..000000000 --- a/docs-source/layouts/_default/baseof.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - {{ block "title" . }} - {{ .Site.Title }} - {{ end }} - - - - - - - - - - - - - - -
- -
- - {{ block "main" . }} - - {{ end }} - {{ block "footer" . }} - - {{ end }} -
- -
-
-
-
- - -
-
-
-
Get SQLPad updates in your email
-
- - -
-
- - -
-
-
- -
-
-
-
- - -
-
- -
Thank You
-

- Special thanks to the contributors helping with the SQLPad - development, as well as the creators of all the amazing - open source libraries used to build SQLPad. -

-

- Without them this project would not be possible. -

- -
-
-
-
- - - - \ No newline at end of file diff --git a/docs-source/layouts/_default/list.html b/docs-source/layouts/_default/list.html deleted file mode 100644 index 4a7930fa6..000000000 --- a/docs-source/layouts/_default/list.html +++ /dev/null @@ -1,50 +0,0 @@ -{{ define "main" }} - - -
-
-
-
-

{{ .Title }}

- -
-
-
- -
-
-
-

-
-
- - - - - - - - - - - {{ range .Pages }} - - - - - {{ end }} - - -
post_titleposted_at
{{.Title}}{{.Date.Format "2006-01-02"}}
- -
-
- - -
-
- - - - -{{ end }} \ No newline at end of file diff --git a/docs-source/layouts/_default/single.html b/docs-source/layouts/_default/single.html deleted file mode 100644 index c67b53dc9..000000000 --- a/docs-source/layouts/_default/single.html +++ /dev/null @@ -1,25 +0,0 @@ -{{ define "title" }} -{{ .Title }} – {{ .Site.Title }} -{{ end }} -{{ define "main" }} - - -
-
-

{{ .Title }}

-

{{ .Date.Format "January 2, 2006" }}

-
-
- -
-
-
-

-
-
- {{ .Content }} -
-
-
- -{{ end }} diff --git a/docs-source/layouts/index.html b/docs-source/layouts/index.html deleted file mode 100644 index ce47a965c..000000000 --- a/docs-source/layouts/index.html +++ /dev/null @@ -1,149 +0,0 @@ - -{{ define "main" }} - - - -
- {{.Content}} - -
-
-

SQLPad

-
-
-

Run SQL in your browser and chart the results

-

SQLPad Query Editor

-
-

- Supports
Postgres, MySQL, SQL Server,
Vertica, Crate, Presto, SAP Hana,
Apache Drill, and Cassandra (kinda). -

-
-
- -
-
- -
-
- -
-
- -
-
-
- - -
-
-
-

-
-
-
About
-

- SQLPad is a self-hosted web app for writing and running SQL queries - and visualizing the results. Its goal is to be a simple tool for - exploratory data work and visualizations, ideal for - data analysts who would prefer to work in SQL. -

-

- SQLPad is meant to be run on an internal network for a single team. - All connections added to the app can be used by all individuals with access - to the SQLPad server. All queries written can be run and edited by everyone on - the server. -

-

- If you want to be bold and daring, you can expose your SQLPad instance - to the outside world. Please make sure you fully understand the risks - associated with doing this and use HTTPS. -

-
-
-
- -
-
-
-

-
-
-
News
-
    - {{ range .Pages.ByDate.Reverse }} -
  • - {{ .Title }} -
    -
  • - {{ end }} -
-
-
-
- -
-
-
-

-
-
-
Installation
-

- Install Node.js and build from git repository or install Docker and pull the automated docker build. -

-

- Installing via npm is no longer supported. -

-
-
-
- -
-
-
-

-
-
-
Limitations
-

- Be sure not to query with 2 columns returned of the same name. - Some SQL reporting systems can handle this. SQLPad can't. -

-

- Every query is run with a new session/connection, so keep - that in mind if you use variables and temp tables and - split up your SQL executions. If this doesn't make any sense - to you just forget you read this you probably won't be impacted by it. -

-
-
-
-
- -
-
-
-

-
-
-
Is SQLPad For Me?
-

- SQLPad aims to be a SQL query environment with a focus on exploring and analyzing data via SQL, - and it will not adopt a dashboard use case. - If you're looking for open-source dashboard software or something more advanced, - check out Redash, - Metabase, - or Superset. -

-

- SQLPad likely does as much as it'll ever do and could even be considered finished. Development these days is mostly maintenance and cleanup. -

-
-
-
-
- -
- - -{{ end }} \ No newline at end of file diff --git a/docs-source/layouts/partials/footer.html b/docs-source/layouts/partials/footer.html deleted file mode 100644 index e7f7e7d2a..000000000 --- a/docs-source/layouts/partials/footer.html +++ /dev/null @@ -1,6 +0,0 @@ - -
-
-

FOOTER

-
-
diff --git a/docs-source/layouts/partials/header.html b/docs-source/layouts/partials/header.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs-source/static/css/normalize.css b/docs-source/static/css/normalize.css deleted file mode 100644 index d9f54fd91..000000000 --- a/docs-source/static/css/normalize.css +++ /dev/null @@ -1,427 +0,0 @@ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} - -/** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ - -audio, -canvas, -progress, -video { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ -} - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** - * Address styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove border when inside `a` element in IE 8/9/10. - */ - -img { - border: 0; -} - -/** - * Correct overflow not hidden in IE 9/10/11. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* Grouping content - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari. - */ - -figure { - margin: 1em 40px; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -/** - * Contain overflow in all browsers. - */ - -pre { - overflow: auto; -} - -/** - * Address odd `em`-unit font size rendering in all browsers. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -/* Forms - ========================================================================== */ - -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ - -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - */ - -button, -input, -optgroup, -select, -textarea { - color: inherit; /* 1 */ - font: inherit; /* 2 */ - margin: 0; /* 3 */ -} - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ - -button { - overflow: visible; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -input { - line-height: normal; -} - -/** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ - -input[type='checkbox'], -input[type='radio'] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ - -input[type='number']::-webkit-inner-spin-button, -input[type='number']::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). - */ - -input[type='search'] { - -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; -} - -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ - -input[type='search']::-webkit-search-cancel-button, -input[type='search']::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ - -textarea { - overflow: auto; -} - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ - -optgroup { - font-weight: bold; -} - -/* Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} diff --git a/docs-source/static/css/skeleton-home.css b/docs-source/static/css/skeleton-home.css deleted file mode 100644 index 62700e89f..000000000 --- a/docs-source/static/css/skeleton-home.css +++ /dev/null @@ -1,210 +0,0 @@ -.container { - max-width: 960px; -} -.header { - margin-top: 4rem; - text-align: center; -} -.value-prop { - margin-top: 1rem; -} -.value-props { - margin-top: 4rem; - margin-bottom: 4rem; -} -.docs-header { - text-transform: uppercase; - font-size: 1.4rem; - letter-spacing: 0.2rem; - font-weight: 600; -} -.docs-section { - border-top: 1px solid #eee; - padding: 9rem 0 7rem; - margin-bottom: 0; -} -.value-img { - display: block; - text-align: center; - margin: 2.5rem auto 0; -} -.docs-example .row, -.docs-example.row, -.docs-example form { - margin-bottom: 0; -} -.docs-example h1, -.docs-example h2, -.docs-example h3, -.docs-example h4, -.docs-example h5, -.docs-example h6 { - margin-bottom: 1rem; -} -.heading-font-size { - font-size: 1.2rem; - color: #999; - letter-spacing: normal; -} -.code-example { - margin-top: 1.5rem; - margin-bottom: 0; -} -.code-example-body { - white-space: pre; - word-wrap: break-word; -} -.example { - position: relative; - margin-top: 4rem; -} -.example-header { - font-weight: 600; - margin-top: 1.5rem; - margin-bottom: 0.5rem; -} -.example-description { - margin-bottom: 1.5rem; -} -.example-screenshot-wrapper { - display: block; - position: relative; - overflow: hidden; - border-radius: 6px; - border: 1px solid #eee; - height: 250px; -} -.example-screenshot { - width: 100%; - height: auto; -} -.example-screenshot.coming-soon { - width: auto; - position: absolute; - background: #eee; - top: 5px; - right: 5px; - bottom: 5px; - left: 5px; -} - -/* Navbar */ -.navbar, -.navbar-spacer { - display: block; - background: #fff; - z-index: 99; -} -.navbar + .docs-section { - border-top-width: 0; -} -.navbar > .container { - width: 100%; -} -.navbar-list { - list-style: none; - margin-bottom: 0; -} -.navbar-item { - position: relative; - float: left; - margin-bottom: 0; -} -.navbar-link { - margin: 0 15px; - text-transform: uppercase; - font-size: 11px; - font-weight: 600; - letter-spacing: 0.2rem; - text-decoration: none; - line-height: 6.5rem; - color: #222; -} -.navbar-link.active { - color: #33c3f0; -} - -/* page content styles */ -.page-content { - margin-top: 4rem; - margin-bottom: 12rem; -} -.page-content h2:first-child { - border-top: none; - margin-top: 3rem; -} -.page-content h2 { - text-transform: uppercase; - font-size: 1.5rem; - letter-spacing: 0.2rem; - font-weight: 600; - border-top: 1px solid #eee; - padding-top: 6.5rem; - margin-top: 6.5rem; -} -.page-content h3 { - font-size: 1.5rem; - letter-spacing: 0.1rem; - font-weight: 600; -} - -/* Larger than phone */ -@media (min-width: 550px) { - .header { - margin-top: 12rem; - } - .value-props { - margin-top: 9rem; - margin-bottom: 7rem; - } - .value-img { - margin-bottom: 1rem; - } - .example-grid .column, - .example-grid .columns { - margin-bottom: 1.5rem; - } - /* - .docs-section { - padding: 6rem 0; } - */ - .example-send-yourself-copy { - float: right; - margin-top: 12px; - } - .example-screenshot-wrapper { - position: absolute; - width: 48%; - height: 100%; - left: 0; - max-height: none; - } -} - -/* Larger than tablet */ -@media (min-width: 750px) { -} - -/* page content adjustments -=================================================================== */ - -.page-content h1 { - text-align: center; -} - -.page-content h1, -.page-content h2, -.page-content h3, -.page-content h4, -.page-content p, -.page-content ul { - margin-left: 10%; - margin-right: 10%; -} - -.navbar, -.navbar-spacer { - display: flex; - justify-content: center; - flex-wrap: wrap; -} diff --git a/docs-source/static/css/skeleton.css b/docs-source/static/css/skeleton.css deleted file mode 100644 index bfa8691c2..000000000 --- a/docs-source/static/css/skeleton.css +++ /dev/null @@ -1,551 +0,0 @@ -/* -* Skeleton V2.0.4 -* Copyright 2014, Dave Gamache -* www.getskeleton.com -* Free to use under the MIT license. -* http://www.opensource.org/licenses/mit-license.php -* 12/29/2014 -*/ - -/* Table of contents -–––––––––––––––––––––––––––––––––––––––––––––––––– -- Grid -- Base Styles -- Typography -- Links -- Buttons -- Forms -- Lists -- Code -- Tables -- Spacing -- Utilities -- Clearing -- Media Queries -*/ - -/* Grid -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -.container { - position: relative; - width: 100%; - max-width: 960px; - margin: 0 auto; - padding: 0 20px; - box-sizing: border-box; -} -.column, -.columns { - width: 100%; - float: left; - box-sizing: border-box; -} - -/* For devices larger than 400px */ -@media (min-width: 400px) { - .container { - width: 85%; - padding: 0; - } -} - -/* For devices larger than 550px */ -@media (min-width: 550px) { - .container { - width: 80%; - } - .column, - .columns { - margin-left: 4%; - } - .column:first-child, - .columns:first-child { - margin-left: 0; - } - - .one.column, - .one.columns { - width: 4.66666666667%; - } - .two.columns { - width: 13.3333333333%; - } - .three.columns { - width: 22%; - } - .four.columns { - width: 30.6666666667%; - } - .five.columns { - width: 39.3333333333%; - } - .six.columns { - width: 48%; - } - .seven.columns { - width: 56.6666666667%; - } - .eight.columns { - width: 65.3333333333%; - } - .nine.columns { - width: 74%; - } - .ten.columns { - width: 82.6666666667%; - } - .eleven.columns { - width: 91.3333333333%; - } - .twelve.columns { - width: 100%; - margin-left: 0; - } - - .one-third.column { - width: 30.6666666667%; - } - .two-thirds.column { - width: 65.3333333333%; - } - - .one-half.column { - width: 48%; - } - - /* Offsets */ - .offset-by-one.column, - .offset-by-one.columns { - margin-left: 8.66666666667%; - } - .offset-by-two.column, - .offset-by-two.columns { - margin-left: 17.3333333333%; - } - .offset-by-three.column, - .offset-by-three.columns { - margin-left: 26%; - } - .offset-by-four.column, - .offset-by-four.columns { - margin-left: 34.6666666667%; - } - .offset-by-five.column, - .offset-by-five.columns { - margin-left: 43.3333333333%; - } - .offset-by-six.column, - .offset-by-six.columns { - margin-left: 52%; - } - .offset-by-seven.column, - .offset-by-seven.columns { - margin-left: 60.6666666667%; - } - .offset-by-eight.column, - .offset-by-eight.columns { - margin-left: 69.3333333333%; - } - .offset-by-nine.column, - .offset-by-nine.columns { - margin-left: 78%; - } - .offset-by-ten.column, - .offset-by-ten.columns { - margin-left: 86.6666666667%; - } - .offset-by-eleven.column, - .offset-by-eleven.columns { - margin-left: 95.3333333333%; - } - - .offset-by-one-third.column, - .offset-by-one-third.columns { - margin-left: 34.6666666667%; - } - .offset-by-two-thirds.column, - .offset-by-two-thirds.columns { - margin-left: 69.3333333333%; - } - - .offset-by-one-half.column, - .offset-by-one-half.columns { - margin-left: 52%; - } -} - -/* Base Styles -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -/* NOTE -html is set to 62.5% so that all the REM measurements throughout Skeleton -are based on 10px sizing. So basically 1.5rem = 15px :) */ -html { - font-size: 62.5%; -} -body { - font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */ - line-height: 1.6; - font-weight: 400; - font-family: 'Raleway', 'HelveticaNeue', 'Helvetica Neue', Helvetica, Arial, - sans-serif; - color: #222; -} - -/* Typography -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 0; - margin-bottom: 2rem; - font-weight: 300; -} -h1 { - font-size: 4rem; - line-height: 1.2; - letter-spacing: -0.1rem; -} -h2 { - font-size: 3.6rem; - line-height: 1.25; - letter-spacing: -0.1rem; -} -h3 { - font-size: 3rem; - line-height: 1.3; - letter-spacing: -0.1rem; -} -h4 { - font-size: 2.4rem; - line-height: 1.35; - letter-spacing: -0.08rem; -} -h5 { - font-size: 1.8rem; - line-height: 1.5; - letter-spacing: -0.05rem; -} -h6 { - font-size: 1.5rem; - line-height: 1.6; - letter-spacing: 0; -} - -/* Larger than phablet */ -@media (min-width: 550px) { - h1 { - font-size: 5rem; - } - h2 { - font-size: 4.2rem; - } - h3 { - font-size: 3.6rem; - } - h4 { - font-size: 3rem; - } - h5 { - font-size: 2.4rem; - } - h6 { - font-size: 1.5rem; - } -} - -p { - margin-top: 0; -} - -/* Links -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -a { - color: #1eaedb; -} -a:hover { - color: #0fa0ce; -} - -/* Buttons -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -.button, -button, -input[type='submit'], -input[type='reset'], -input[type='button'] { - display: inline-block; - height: 38px; - padding: 0 30px; - color: #555; - text-align: center; - font-size: 11px; - font-weight: 600; - line-height: 38px; - letter-spacing: 0.1rem; - text-transform: uppercase; - text-decoration: none; - white-space: nowrap; - background-color: transparent; - border-radius: 4px; - border: 1px solid #bbb; - cursor: pointer; - box-sizing: border-box; -} -.button:hover, -button:hover, -input[type='submit']:hover, -input[type='reset']:hover, -input[type='button']:hover, -.button:focus, -button:focus, -input[type='submit']:focus, -input[type='reset']:focus, -input[type='button']:focus { - color: #333; - border-color: #888; - outline: 0; -} -.button.button-primary, -button.button-primary, -input[type='submit'].button-primary, -input[type='reset'].button-primary, -input[type='button'].button-primary { - color: #fff; - background-color: #33c3f0; - border-color: #33c3f0; -} -.button.button-primary:hover, -button.button-primary:hover, -input[type='submit'].button-primary:hover, -input[type='reset'].button-primary:hover, -input[type='button'].button-primary:hover, -.button.button-primary:focus, -button.button-primary:focus, -input[type='submit'].button-primary:focus, -input[type='reset'].button-primary:focus, -input[type='button'].button-primary:focus { - color: #fff; - background-color: #1eaedb; - border-color: #1eaedb; -} - -/* Forms -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -input[type='email'], -input[type='number'], -input[type='search'], -input[type='text'], -input[type='tel'], -input[type='url'], -input[type='password'], -textarea, -select { - height: 38px; - padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ - background-color: #fff; - border: 1px solid #d1d1d1; - border-radius: 4px; - box-shadow: none; - box-sizing: border-box; -} -/* Removes awkward default styles on some inputs for iOS */ -input[type='email'], -input[type='number'], -input[type='search'], -input[type='text'], -input[type='tel'], -input[type='url'], -input[type='password'], -textarea { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} -textarea { - min-height: 65px; - padding-top: 6px; - padding-bottom: 6px; -} -input[type='email']:focus, -input[type='number']:focus, -input[type='search']:focus, -input[type='text']:focus, -input[type='tel']:focus, -input[type='url']:focus, -input[type='password']:focus, -textarea:focus, -select:focus { - border: 1px solid #33c3f0; - outline: 0; -} -label, -legend { - display: block; - margin-bottom: 0.5rem; - font-weight: 600; -} -fieldset { - padding: 0; - border-width: 0; -} -input[type='checkbox'], -input[type='radio'] { - display: inline; -} -label > .label-body { - display: inline-block; - margin-left: 0.5rem; - font-weight: normal; -} - -/* Lists -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -ul { - list-style: circle inside; -} -ol { - list-style: decimal inside; -} -ol, -ul { - padding-left: 0; - margin-top: 0; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin: 1.5rem 0 1.5rem 3rem; - font-size: 90%; -} -li { - margin-bottom: 1rem; -} - -/* Code -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -code { - padding: 0.2rem 0.5rem; - margin: 0 0.2rem; - font-size: 90%; - white-space: nowrap; - background: #f1f1f1; - border: 1px solid #e1e1e1; - border-radius: 4px; -} -pre > code { - display: block; - padding: 1rem 1.5rem; - white-space: pre; -} - -/* Tables -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -th, -td { - padding: 12px 15px; - text-align: left; - border-bottom: 1px solid #e1e1e1; -} -th:first-child, -td:first-child { - padding-left: 0; -} -th:last-child, -td:last-child { - padding-right: 0; -} - -/* Spacing -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -button, -.button { - margin-bottom: 1rem; -} -input, -textarea, -select, -fieldset { - margin-bottom: 1.5rem; -} -pre, -blockquote, -dl, -figure, -table, -p, -ul, -ol, -form { - margin-bottom: 2.5rem; -} - -/* Utilities -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -.u-full-width { - width: 100%; - box-sizing: border-box; -} -.u-max-full-width { - max-width: 100%; - box-sizing: border-box; -} -.u-pull-right { - float: right; -} -.u-pull-left { - float: left; -} - -/* Misc -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -hr { - margin-top: 3rem; - margin-bottom: 3.5rem; - border-width: 0; - border-top: 1px solid #e1e1e1; -} - -/* Clearing -–––––––––––––––––––––––––––––––––––––––––––––––––– */ - -/* Self Clearing Goodness */ -.container:after, -.row:after, -.u-cf { - content: ''; - display: table; - clear: both; -} - -/* Media Queries -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -/* -Note: The best way to structure the use of media queries is to create the queries -near the relevant code. For example, if you wanted to change the styles for buttons -on small devices, paste the mobile query code up in the buttons section and style it -there. -*/ - -/* Larger than mobile */ -@media (min-width: 400px) { -} - -/* Larger than phablet (also point when grid becomes active) */ -@media (min-width: 550px) { -} - -/* Larger than tablet */ -@media (min-width: 750px) { -} - -/* Larger than desktop */ -@media (min-width: 1000px) { -} - -/* Larger than Desktop HD */ -@media (min-width: 1200px) { -} diff --git a/docs-source/static/images/favicon.ico b/docs-source/static/images/favicon.ico deleted file mode 100644 index 5698a0c88946a2d446efc7d7edb4912a9d198cca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10358 zcmeI0J#NB45QQgEib!dY(z$XK(Q^RO(r^K;!Wp;$SKtDifEIchWJ*dXFxu>xJTxq8 zYzQI}yp_z@`}bzPUGOX-FY+plhIpGw^IhaiMAG#4+1swKYx+9h#rN3Pdn58D^7*m9 zif8|kB#Gmdxbb-GY?;sJ1(#N<-BmUahlC$ZZes;YsafU*Nj)a<#OrrJTH94 zvyE*u8bxDKpLe^R8w>`A_R#-!yY1HN^-&+)Kf~eBftlS;;dpJ+*g_xbj#vH7W^*!L z=T-l0QH@yq%GLV#%=h>mpd|qkcs>G}C#3%R_Lt@pMe&IP^91Ha&-`9w?C1A?EUyZ4 zuaF_etX3=6>2&^-gXvsZmYw9Gs@d=N-FCY@!GS~v%&pQyV9 z|FXDI53T>w*Ykvyd-KP-tG12Z^4GSognhxWjs3UVgkM)f0-H@d|W4`b|3-p~% zr$_Gx^pCACVu`h3zA}rk_WOr>8w>Q&7TUV|zRVBSpU+vyhkUpPuG<6qKL+?o0wh2J YBtQZrKmsH{0wh2JBtQZr@W=#y0M@A`&j0`b diff --git a/docs-source/static/images/favicon.png b/docs-source/static/images/favicon.png deleted file mode 100644 index 7a3c81c1e32b4e4224452cf8261a585480caa0ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1156 zcmV-~1bh35P)Px(K1oDDR9FeUS6ygSR}lVo-6obMX;utd(pYw*xM;*axQ4d&FA%IGA~hPSg!&Re z%!{H3LD7)Nf>mf~DXa7+587b*Vq0rT+y^!IQ_&TXVq{}Xg2tsmWK$E{Rg$dV+}vF6 z#`_m=J8(F2&&-)`&YW}R%yq#z<@o*n3YW{ZhEo=^6_YQP>FIPj!A@E?`I7?!182!U zWwRxhod!YQaJ$|6s8`2UV5hIjAF*$nn3!mxGk;snv2q|c5D4ty$oVx(v2fUKIJzp%YyG-;+|bmTJITBB&Z-~d;>l)!%wq-3T*Hu{5vvj{FwB`QX)d;Q(oi9$K)StVkW z6c!eyhlhvdszTWU_0aWF=-{;b&=3w|^@mIFWhm}D9??d2iK8!I63Xsg){iGSF*2TdhFu$i_?LHwo`odIDct3 zl;>}naw>Tj*DjvJug8wyM9k^>l~=UK#Tzg}dsgRKg9|nMfVQ0#T)#Obt{lbsjm=KC zVN{<9&8@1ESY$JTRl9KNN*u|Qv3ha&CbWO;=u(M+wDT=6zzcm;gX)@ER92Rw`1u6^ zQrGcW*?Pnb=IDo*jCv#jQpq@?hQmh@t_x|pv91$n-nJ1Rl)Z;jcTGZ~X&W*LaiH5! zG<`7Cge@yqU_;B#h((X1slEn5pQ_|r0k7m_jb4F+oG#kkE+&IdSaNl0b4{3V^d>gw z648{}SSkh2Y<>K>1Mzm0RqdHlG41&@uX6K2kXK1+I7_;Js~2Mi8q>jn2l#QHJvdE0 z5^Q;n$C-@YV!zzLzBY8VvmM`_z722DTolcD9r>@y6QZXvB;s8-v}p~#%cyzuIvIRx zGMPN7yoNJ-j#VQ*A42oyVT4&EKYs-GVsWQ;U&{E*=U7ZKBepOj?#=KqOCNM#KPzP^ z^(PAw6-UbOb9CaRRKjMy6Z|s4Kc-wM)AgC~359DZkm@yCG^k=|{|I^qASDtNs)?Qr zC&XrzVCYw;976qo@am!bUw%xqs#xy?E7noApQL)_c!=j>`km9OoAQjN6bD~$&+BRL zA0tIW2UNvzDV^y=D;gSg&$jQsIw6^xwuI{#L*x1_n zti$JJn=x!~>bFodLVs=)pD^7Hfau+ZG_z<>Gq`TOnLqNJzgjv4@H zkN^MwkNh8k0000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU&3rR#l zRA}DSn%9D=Fc3f!LJ?F5O+?n@|Nrt%3O!*_S>)zLAh4dDK7)wwwGd&9WbwOC?}o|L zBKKo+5>})o5u`XjGACm~A8XuUmV5R&_iBdmC@j>mAD1Fm{wWeCq<8e|jP>q!$ zgs>DVL5JhyF=N^A+|LAQ;UA4tM5c5s;!=>JqjB=AHPLS6Si~uMFitR0tPB))9wf7r ze=JU6qEeta=}pxa?w=luvkRgC+)FuI1G+CK1W|Q>@yKp}2i=#`XH40m?@w!#^hlgg zjg+R#B0$AQ;_MVZ3t7K-{mz_utN7`HKw8k_Z~{+ei>+pp_!4KTL#QdXE}7`woDf2> zHT@HM9L{OkG>iocn%|vM#Gurw`TRJX;7ZuGVHfBZI18KNL7?O~oRqP<^*^wt&;2>? z3qoTyllY1sWebJ0C0%`ivtak7SdblslQFuK{w<+tcTRs$${XvZ>?rw&EZ0+Jaesjm z>$b=yP;@AHVzXz1S&;l7b%?I-vR9Jl?wnK^AhA_(v3X&Y6Vsdr!#}K1{ajJc!KXFsw(mq$DPz)XeEA2|ncKgcGhQ zPS1PD3zbO;>kTv&;U`A6J|o5R8Ls3!C8wVx`SJK8OynnUddW$P@dA5cdys?=UWw12 z%e$a3UZgTN1TdH z*=NV8EK?qYa(Pv#4d881q5-nysW<9%KjM5ypSpxz$N7`!&F%m^r~kopTC@^1xdjaNz--0!mK6Yla7KhrDYePM#I?m%*88nGg?8LV`lIAVA^w;4R|9 z1@wG6fq<+2;3o-z?jfVYMu9)g7A!Q5<4mdk3w`lA&>Z3Ry&XOTC%>2GEUzK6lpcfA z*2*(n#^0QWtd6nicjq>1Bi5+!gF|{RF~*3RO9G5D^uiAin(J&?HkKJm*U@*3NXpac}A|dFC4HyY>Ym%1QUyKDRpEiWhqzmh;oN zB?`bjeE{O%bio5Tf7BMK`LJ?X-=hLGK&oD z&T7uaxEGj6ZowK($npe0HD{d7+$C4&^fgZNo>KAEB<0^ZVZ>8*oJz^XG%P?w>N$~E z6VLatSpJ`Kf=73p+G*m^Y*)Hg&uNlu+ W_fI)_&v~Cvpf*&!#(Dm0PEN+5NuB!Z zIj?P!Y1bfQZpoRBGGy=OYdKAE-ify7R0i3OC{#ebzrx8~Lv|0EtvR(tro$M|U*hDq zXkLg&&`mk%AlBoa`2|juKlO_0p!2LvIduYx`xwvP;T&W}CD6?|bJh=3`gH$3C-3T| zZ8^2J^ESrQKj4g1u@tT5yq+D$op8oFwxeM=y0JX#zV2MZ89mQe*KuwmP8E#^9fkZ) zIfJfVs`WQ(tVz9O%w)H~eL6uMxMR+AP>i-f{YjUi)^X}S#OdqL>k#zZ)t|Rs#4~XQ z{K;!4a>ksT^d)>eO}+XJU7R} z$%C`Q-E$C4IHAa&Ho_z6(i9i#Ii0#$?(Ll}q#D|L$=L)!eFhIic`Vjo7;+b8H|RX& zzP~U>)tt@3AY?uc(Gm=Xb@grf2ZSyjk?S^}&zI0rTw2lY2iKL~^C4&XHfQVQ(GHxt zO=bC8Pe(6+zQSn@OPK%p+Jdv7{{tu4Wz_o_CyaORe3$hP%G6FV82B3A00000NkvXX Hu0mjfRBd_5 diff --git a/docs-source/static/images/logo-postgresql.png b/docs-source/static/images/logo-postgresql.png deleted file mode 100644 index 94612cfef332ce82c70e7da22ce1ebee96805f4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50279 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 gNtnPZu-d&r&I;c9>kU+8}PAK2We;{X5v diff --git a/docs-source/static/images/logo-sql-server.png b/docs-source/static/images/logo-sql-server.png deleted file mode 100644 index 8cd356da9f1964688c73c0c66ec1b9e7a804f79f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91976 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 L8uFF0uY>+SNq%Pj diff --git a/docs-source/static/images/logo-vertica.jpg b/docs-source/static/images/logo-vertica.jpg deleted file mode 100644 index 23fc65013d79588bbd209ace781d7cdf83b44a2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14222 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%0A5v8flz07$3&4K#>|$VsX+_il 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

FLluOG3_f{n56Y-* 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 diff --git a/docs-source/static/images/screenshots/chart-plot.png b/docs-source/static/images/screenshots/chart-plot.png deleted file mode 100644 index 002a4ce53b309b089690c1769cd6d06146b2fe01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168114 zcmdqHWmsHGvj&P=fS65Y+^xM_7Iz(1l6cGUj0SpWbQCv(&9t;fn2n-Bz6%OX3=T=cQ01OO^(o9fL zR$Ne!NY>uQ*v!%h3`{jJ-VIg}Lu%T3d<;f4fqXwLcIR`9!x*;j$D>>b$q!)^*%-KQ zaNn@RNWPH-Q;`(;fJf^R6=(U85WS<^yms7o?yosKrzN{Jw6r`ORveub8aBq5I%ffx{4ixr%AaZK@|E6o63!Gv2k7MZoHAJt;bjj)C*< zI-epMW#YbqMUngQwCA=7psYZFr7Y5LGvk2$Mf8J^7{#Gwe^7z`zWw1zZ*a9xM*_{{gK7RNBOpMw{;`6#7`P$7l zHQ{bCGSH?4hrqJ<8w$!Lz&%BSDCtW#GDKVBZQ}*aJCg?{lf>!667q9TQjcHyvcQ&A- zC*(~8O1KbC3H9XqoL&%R2^U+}8eX>$6tW2PV$w+izRb-$(|ayDwn2MuGGX_+7wK)e zi=*ydR1x2{A99XwmrTC&N5gksrfW`j&_G}v-7tn0TZL(Asnc?s9L{8J>rcZ4Je{H#w+ zKR(;L`7xrvLBM=b{~D#k#ros}MdC|%0lw85!$*hLU?C9QiYNw^iLwKk^VTrER&fhn z9qhSX>9|ji;FYabvUr4;W2i1q>s z?3M?NarcE3-4WaedeNkk_ck;nd^Ot2svivU!UsVOlhz0Q0$k6Ko0%WH2tq0gHryAw z3R=1gG1(4?;%6HP`TXPC095k^I~7EJ7Frtg*DfPl#5zAD+pjCIpe`aTn9ArTSLD5J z5>;>u6sS!iiC`ps-zFk(vClESaYRmH$jpId#FPV&SN;OoSf+e&NV@{iveb&uvp-a_ zaVNBjka7I91!5;?Z!n(%{p6r9ctRn`gJXoKv+HCjs5EAH;|RY�L-Y;|rz>DCN>; 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

%1^wx-Z*#6?kGNTks1^~ zP!0Cb!iW$9&x=fu$=BP!SZ$C65{~lD!T!jg>5{l8EFY1XO$U)z?E)-Iqs!-D@;hL;7!%bmw zJ7xvTAk&8GIp~IR3rM*H>NMA=i6eR{<}3ZWd0TQ6=?{#ZcL`$M$=nOqCEvj(fW&kN zP_63-%FWzrF=A2rrYhB>T^le|qr-vh4~V1LapVbDe_<&h^NrXgf4(20zMJ z%wTNAs)bG{XAj`#qM|>?|68?zM#2(zGE|;%m^isQIW<321^0DE2Q>5io(!$FtIJo7 zpMoHg^V1v1YgfApVc6D<(Su`ckrrNOSb&b(huMbD+9Fpa z?u`r^G)$cC3~H1(H~%VO-S)lqRyhWQG)i>MPj%PNijNYV$m6>x>#gnPEowU%N+;@^ z$R`K#g)%emtjMK#PsChR`j?~mb4g1N2E6^o<99P!c}Z~pV=2$ez%JqPx*E6VyZ&c% z!@~E|eHx4q7NQX`n!fHp`%ip(^5xz=?|$X?D+!ZNCn=!y`rX!d^jl5+(!zCO;Qi%} z{*V>Wx72l;%RKsR@#Vdpy=5A&rYo9cy`(O#H|MauVWmgjQL}dEKrb$P=PkRQTF-C; z67GlbDmZQK{OdX1pHzI^k*w!i|39>IC+Ce~*5fM#6$d|wO~8-AWfQ%Ui?<&99|ma_ AzW@LL diff --git a/docs-source/static/images/screenshots/chart-stacked-bar.png b/docs-source/static/images/screenshots/chart-stacked-bar.png deleted file mode 100644 index d7d11eddf2e255c4cd31ac63f5634506d27074d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150544 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 C0Xb^` diff --git a/docs-source/static/images/screenshots/configuration.png b/docs-source/static/images/screenshots/configuration.png deleted file mode 100644 index 34c18966766b87bd817bcf55b550d19a31bf6c53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177148 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

U 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ⅆC10& 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%0A#1)_D@!<=2o5U()a2uB75>! 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 U{R7WjfamKkW4~a2e)_xr0=(oNIRF3v diff --git a/docs-source/static/images/screenshots/query-editor-blur-red.jpg b/docs-source/static/images/screenshots/query-editor-blur-red.jpg deleted file mode 100644 index 8334e6a821405e50ac52719b1cb52fd7fce9748f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32190 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%0DIkMXAWN=l_F2;BxDEu0ynf^^e;}L68^MXM^ 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 PBaI~>t!#h&H~0Slu>eul diff --git a/docs-source/static/images/screenshots/query-editor-blur.jpg b/docs-source/static/images/screenshots/query-editor-blur.jpg deleted file mode 100644 index 2a4f3f61f716d1fce505d7931dde6f3003faadca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38970 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 z 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 diff --git a/docs-source/static/images/screenshots/users.png b/docs-source/static/images/screenshots/users.png deleted file mode 100644 index 2985c2361237e00663d00a4ebcfff4c26ad878f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170088 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

    ga4)<* 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

I0THu1~d(Avq% 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

)} - +
); @@ -281,10 +316,6 @@ function QueryListDrawer({ QueryListDrawer.propTypes = { visible: PropTypes.bool, onClose: PropTypes.func, - queries: PropTypes.array, }; -export default connect(['queries', 'connections', 'currentUser'], (store) => ({ - loadQueries: loadQueries(store), - deleteQuery: deleteQuery(store), -}))(React.memo(QueryListDrawer)); +export default React.memo(QueryListDrawer); diff --git a/client/src/queries/QueryPreview.js b/client/src/queries/QueryPreview.js index 48328cd37..0e2a50f9a 100644 --- a/client/src/queries/QueryPreview.js +++ b/client/src/queries/QueryPreview.js @@ -9,22 +9,25 @@ function QueryPreview({ query }) { if (!query) { return null; } + return (
-
{query.name}
-
Connection {query.connectionName}
-
By {query.createdBy}
- {query.tags && query.tags.map((tag) => {tag})} +
{query.name}
+
Connection {query.connectionName}
+
By {query.createdBy}
+
+ {query.tags && query.tags.map((tag) => {tag})} +
{/* - This style necessary to get proper sizing on SqlEditor. - It has height 100%, which looks to height of nearest containing BLOCK, - which apparently looks past this flex container. This causes weirdness - */} + This style necessary to get proper sizing on SqlEditor. + It has height 100%, which looks to height of nearest containing BLOCK, + which apparently looks past this flex container. This causes weirdness + */}
q.tags) - .reduce((a, b) => a.concat(b), []) - .filter((tag) => Boolean(tag)) - ).map((tag) => { - return { - id: tag, - name: tag, - component: ( - - - {tag} - - ), - tag, - }; - }); - - return tags.sort(); -} diff --git a/client/src/queries/getDecoratedQueries.js b/client/src/queries/getDecoratedQueries.js deleted file mode 100644 index 12dd4426e..000000000 --- a/client/src/queries/getDecoratedQueries.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Get array of queries decorated with `connectionName` property - * @param {array} queries - * @param {array} connections - */ -export default function getDecoratedQueries(queries, connections) { - // Create index of lookups - // TODO this should come from API - const connectionsById = connections.reduce((connMap, connection) => { - connMap[connection.id] = connection; - return connMap; - }, {}); - - return queries.map((query) => { - query.key = query.id; - - const connection = connectionsById[query.connectionId]; - query.connectionName = connection ? connection.name : ''; - - return query; - }); -} diff --git a/client/src/stores/queries.js b/client/src/stores/queries.js index cb2a0c59f..bce321cb5 100644 --- a/client/src/stores/queries.js +++ b/client/src/stores/queries.js @@ -1,12 +1,11 @@ +import { mutate } from 'swr'; import message from '../common/message'; import fetchJson from '../utilities/fetch-json.js'; -import runQueryViaBatch from '../utilities/runQueryViaBatch'; import { - setLocalQueryText, removeLocalQueryText, + setLocalQueryText, } from '../utilities/localQueryText'; - -const ONE_HOUR_MS = 1000 * 60 * 60; +import runQueryViaBatch from '../utilities/runQueryViaBatch'; export const NEW_QUERY = { id: '', @@ -61,47 +60,16 @@ export const formatQuery = async (state) => { }; }; -export const loadQueries = (store) => async (state) => { - const { queriesLastUpdated, queries } = state; - if ( - !queries.length || - (queriesLastUpdated && new Date() - queriesLastUpdated > ONE_HOUR_MS) - ) { - store.setState({ queriesLoading: true }); - const json = await fetchJson('GET', '/api/queries'); - if (json.error) { - message.error(json.error); - } - store.setState({ - queriesLoading: false, - queriesLastUpdated: new Date(), - queries: json.data || [], - }); - } -}; - export const clearQueries = () => { return { queries: [] }; }; -export const deleteQuery = (store) => async (state, queryId) => { - const { queries } = state; - const filteredQueries = queries.filter((q) => { - return q.id !== queryId; - }); - store.setState({ queries: filteredQueries }); - const json = await fetchJson('DELETE', '/api/queries/' + queryId); - if (json.error) { - message.error(json.error); - store.setState({ queries }); - } -}; - export const loadQuery = async (state, queryId) => { const { error, data } = await fetchJson('GET', `/api/queries/${queryId}`); if (error) { - message.error(error); + return message.error('Query not found'); } + return { query: data, queryError: undefined, @@ -155,6 +123,7 @@ export const saveQuery = (store) => async (state) => { store.setState({ isSaving: false }); return; } + mutate('/api/queries'); message.success('Query Saved'); removeLocalQueryText(data.id); const updatedQueries = queries.map((q) => { @@ -176,6 +145,7 @@ export const saveQuery = (store) => async (state) => { store.setState({ isSaving: false }); return; } + mutate('/api/queries'); window.history.replaceState( {}, data.name, @@ -254,14 +224,12 @@ export const handleQuerySelectionChange = (state, selectedText) => { export default { clearQueries, - deleteQuery, formatQuery, handleChartConfigurationFieldsChange, handleChartTypeChange, handleCloneClick, handleQuerySelectionChange, initialState, - loadQueries, loadQuery, resetNewQuery, runQuery, diff --git a/client/src/utilities/fetch-json.js b/client/src/utilities/fetch-json.js index 837184972..8d4f418d3 100644 --- a/client/src/utilities/fetch-json.js +++ b/client/src/utilities/fetch-json.js @@ -1,4 +1,5 @@ import 'whatwg-fetch'; +import parseLinkHeader from 'parse-link-header'; import message from '../common/message'; export default async function fetchJson(method, url, body) { @@ -41,11 +42,14 @@ export default async function fetchJson(method, url, body) { try { const json = await response.json(); + let link = response.headers.get('Link'); + const links = link && parseLinkHeader(link); + // New v5 API format the body is the data or error // Which is what depends on status code. 2xx is data, 4xx or 5xx is error // If 200-299 the body is data if (response.ok) { - return { data: json }; + return { data: json, links }; } // The body is an error object with a .title at a minimum, possibly .detail and other props diff --git a/client/src/utilities/swr-fetcher.js b/client/src/utilities/swr-fetcher.js new file mode 100644 index 000000000..0d084cb9d --- /dev/null +++ b/client/src/utilities/swr-fetcher.js @@ -0,0 +1,9 @@ +import fetchJson from './fetch-json'; + +export default async function swrFetcher(url) { + const { data, links, error } = await fetchJson('GET', url); + if (error) { + throw error; + } + return { data, links }; +} diff --git a/server/models/index.js b/server/models/index.js index 657018070..6e2c1a295 100644 --- a/server/models/index.js +++ b/server/models/index.js @@ -15,6 +15,7 @@ const decorateQueryUserAccess = require('../lib/decorate-query-user-access'); class Models { constructor(sequelizeDb, config) { + this.sequelizeDb = sequelizeDb; this.batches = new Batches(sequelizeDb, config); this.connectionAccesses = new ConnectionAccesses(sequelizeDb, config); this.connectionClients = new ConnectionClients(sequelizeDb, config); @@ -66,6 +67,9 @@ class Models { */ async findQueryById(id) { const query = await this.queries.findOneById(id); + if (!query) { + return null; + } query.acl = await this.queryAcl.findAllByQueryId(id); query.acl = query.acl.map((acl) => acl.toJSON()); return query; diff --git a/server/package-lock.json b/server/package-lock.json index 59ef72269..27d10d92b 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1146,6 +1146,11 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -2018,6 +2023,11 @@ "mime-types": "^2.1.12" } }, + "format-link-header": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/format-link-header/-/format-link-header-3.0.0.tgz", + "integrity": "sha512-/q9ULjbrC5nkJ5g4C2UjlM/WOrFK0S841yYo5jNSgGw+sZKkwLmtKby8aGJ5qp9OigoFgNzZCPQVty4LKef8Yw==" + }, "formidable": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", @@ -4212,6 +4222,15 @@ "error-ex": "^1.2.0" } }, + "parse-link-header": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-1.0.1.tgz", + "integrity": "sha1-vt/g0hGK64S+deewJUGeyKYRQKc=", + "dev": true, + "requires": { + "xtend": "~4.0.1" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -4691,6 +4710,16 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, + "query-string": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.12.1.tgz", + "integrity": "sha512-OHj+zzfRMyj3rmo/6G8a5Ifvw3AleL/EbcHMD27YA31Q+cO5lfmQxECkImuNVjcskLcvBRVHNAB3w6udMs1eAA==", + "requires": { + "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, "quick-format-unescaped": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", @@ -5309,6 +5338,11 @@ "through": "2" } }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" + }, "split2": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/split2/-/split2-3.1.1.tgz", @@ -5413,6 +5447,11 @@ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" + }, "string-format-obj": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string-format-obj/-/string-format-obj-1.1.1.tgz", diff --git a/server/package.json b/server/package.json index 222aaf6aa..3255f50fe 100644 --- a/server/package.json +++ b/server/package.json @@ -46,6 +46,7 @@ "express": "^4.17.1", "express-pino-logger": "^5.0.0", "express-session": "^1.17.1", + "format-link-header": "^3.0.0", "hdb": "^0.18.0", "helmet": "^3.22.0", "ini": "^1.3.5", @@ -75,6 +76,7 @@ "pg": "^8.2.1", "pg-cursor": "^2.2.1", "pino": "^6.3.1", + "query-string": "^6.12.1", "request": "^2.88.2", "rimraf": "^3.0.2", "sanitize-filename": "^1.6.3", @@ -106,6 +108,7 @@ "mocha": "^7.2.0", "ncp": "^2.0.0", "node-dev": "^4.0.0", + "parse-link-header": "^1.0.1", "pino-pretty": "^4.0.0", "supertest": "^4.0.2" } diff --git a/server/routes/queries.js b/server/routes/queries.js index 1b46b6210..a663e180e 100644 --- a/server/routes/queries.js +++ b/server/routes/queries.js @@ -1,4 +1,8 @@ require('../typedefs'); +const { QueryTypes } = require('sequelize'); +const _ = require('lodash'); +const formatLinkHeader = require('format-link-header'); +const queryString = require('query-string'); const router = require('express').Router(); const mustBeAuthenticated = require('../middleware/must-be-authenticated.js'); const pushQueryToSlack = require('../lib/push-query-to-slack'); @@ -27,16 +31,230 @@ async function deleteQuery(req, res) { router.delete('/api/queries/:id', mustBeAuthenticated, wrap(deleteQuery)); +// Target SQL query to be built +// +// SELECT +// +// FROM +// queries +// WHERE +// connection_id = 'connection_id' +// AND created_by = 'user_id' +// -- for access (if not admin) +// AND ( +// created_by = loggedInUserId +// OR id IN ( +// SELECT query_id FROM query_acl WHERE group_id = '__EVERYONE__' OR user_id = 'userId' OR user_email = 'user_email' +// ) +// ) +// -- for tags +// AND id IN ( +// SELECT query_id FROM query_tags WHERE tag = 'tag1' +// INTERSECT +// SELECT query_id FROM query_tags WHERE tag = 'tag2' +// INSERSECT +// SELECT query_id FROM query_tags WHERE tag = 'tag3' +// ) +// -- for search +// AND (name LIKE '%search%' OR query_text LIKE '%search%') +// ORDER BY +// name ASC +// -- updated_at DESC + /** * @param {Req} req * @param {Res} res */ async function listQueries(req, res) { - const { models, user } = req; - const queries = await models.findQueriesForUser(user); + const { models, user, query } = req; + const { + connectionId, + tags, + search, + createdBy, + sortBy, + ownedByUser, + limit = 100, + offset = 0, + } = query; + + let sql = ` + SELECT + queries.id, + queries.name, + queries.chart, + queries.query_text, + queries.created_by, + queries.connection_id, + connections.name AS connection_name, + connections.driver AS connection_driver + FROM + queries + LEFT JOIN connections ON queries.connection_id = connections.id + `; + const whereSqls = []; + const params = {}; + if (connectionId) { + whereSqls.push('queries.connection_id = :connectionId'); + params.connectionId = connectionId; + } + if (createdBy) { + whereSqls.push('queries.created_by = :createdBy'); + params.createdBy = createdBy; + } + + if (typeof ownedByUser === 'string') { + if (ownedByUser === 'true') { + whereSqls.push('queries.created_by = :userEmail'); + } else if (ownedByUser === 'false') { + whereSqls.push('queries.created_by != :userEmail'); + } + params.userEmail = user.email; + } + + if (tags) { + const tagSqls = []; + tags.forEach((tag, index) => { + let repKey = `tag_${index}`; + const repValue = tag; + params[repKey] = repValue; + tagSqls.push(` + SELECT qt.query_id + FROM query_tags qt + WHERE qt.tag = :${repKey} + `); + }); + whereSqls.push(`queries.id IN ( ${tagSqls.join(' INTERSECT ')} )`); + } + + // If not admin restrict to ACL rules + // User can see queries they've created, or queries they have access to via ACL + if (user.role !== 'admin') { + whereSqls.push(` + queries.created_by = :userEmail + OR queries.id IN ( + SELECT qa.query_id + FROM query_acl qa + WHERE + qa.group_id = '__EVERYONE__' + OR user_id = :userId + OR user_email = :userEmail + ) + `); + params.userEmail = user.email; + params.userId = user.id; + } + + if (search) { + params.search = `%${search}%`; + whereSqls.push( + `( queries.name LIKE :search OR queries.query_text LIKE :search )` + ); + } + + if (whereSqls.length > 0) { + sql += ' WHERE ' + whereSqls.map((sql) => `(${sql})`).join(' AND '); + } + + // sortBy takes direction (+/-) and fieldname of either +name, or -updatedAt + let sortByDirection; + let sortByField; + if (sortBy && sortBy.startsWith('+')) { + sortByDirection = 'ASC'; + sortByField = sortBy.slice(1); + } else if (sortBy && sortBy.startsWith('-')) { + sortByDirection = 'DESC'; + sortByField = sortBy.slice(1); + } else if (sortBy) { + sortByField = sortBy; + sortByDirection = 'ASC'; + } + const allowedSortByFields = ['name', 'updatedAt']; + if (sortByField && !allowedSortByFields.includes(sortByField)) { + return res.utils.error('sortBy field must be "name" or "updatedAt"'); + } + if (sortByField) { + // sortByField is validated, no concern for SQL injection here + sql += ` ORDER BY queries.${ + sortByField === 'updatedAt' ? 'updated_at' : 'name' + } ${sortByDirection}`; + } + if (limit) { + sql += ` LIMIT ${parseInt(limit, 10)}`; + } + if (offset) { + sql += ` OFFSET ${parseInt(offset, 10)}`; + } + + let queries = await models.sequelizeDb.sequelize.query(sql, { + type: QueryTypes.SELECT, + replacements: params, + }); + + queries = queries.map((query) => { + return { + id: query.id, + name: query.name, + chart: query.chart, + queryText: query.query_text, + createdBy: query.created_by, + connection: { + id: query.connection_id, + name: query.connection_name, + driver: query.connection_driver, + }, + }; + }); + const queryIds = queries.map((query) => query.id); + + let queryTags = await models.sequelizeDb.QueryTags.findAll({ + attributes: ['queryId', 'tag'], + where: { queryId: queryIds }, + }); + queryTags = queryTags.map((qt) => qt.toJSON()); + const queryTagsByQueryId = _.groupBy(queryTags, 'queryId'); + + let acl = await models.sequelizeDb.QueryAcl.findAll({ + where: { queryId: queryIds }, + }); + acl = acl.map((acl) => acl.toJSON()); + const aclByQueryId = _.groupBy(acl, 'queryId'); + + queries = queries.map((query) => { + query.acl = aclByQueryId[query.id] || []; + query.tags = queryTagsByQueryId[query.id] || []; + query.tags = query.tags.map((t) => t.tag).sort(); + return query; + }); + const decorated = queries.map((query) => decorateQueryUserAccess(query, user) ); + + const link = {}; + const limitNum = limit ? parseInt(limit, 10) : 0; + const offsetNum = offset ? parseInt(offset, 10) : 0; + if (offsetNum > 0) { + link.prev = { + rel: 'prev', + url: `/api/queries?${queryString.stringify( + { ...req.query, limit, offset: offsetNum - limitNum }, + { arrayFormat: 'bracket' } + )}`, + }; + } + if (queries.length === limitNum) { + link.next = { + rel: 'next', + url: `/api/queries?${queryString.stringify( + { ...req.query, limit, offset: offsetNum + limitNum }, + { arrayFormat: 'bracket' } + )}`, + }; + } + + res.set('Link', formatLinkHeader(link)); + return res.utils.data(decorated); } diff --git a/server/test/api/queries.js b/server/test/api/queries.js index d8f1e71fd..41f86aa5c 100644 --- a/server/test/api/queries.js +++ b/server/test/api/queries.js @@ -1,6 +1,8 @@ const assert = require('assert'); const consts = require('../../lib/consts'); const TestUtils = require('../utils'); +const queryString = require('query-string'); +const parseLinkHeader = require('parse-link-header'); const createQueryBody = { name: 'test query', @@ -17,7 +19,7 @@ const createQueryBody = { }; describe('api/queries', function () { - const utils = new TestUtils(); + let utils = new TestUtils(); let query; before(function () { @@ -39,6 +41,13 @@ describe('api/queries', function () { it('Gets array of 1', async function () { const body = await utils.get('editor', '/api/queries'); + const query = body[0]; + assert(query.connection.id); + assert.equal(query.tags[0], 'one'); + assert(query.canRead); + assert(query.canWrite); + assert(query.canDelete); + assert.equal(body.length, 1, '1 length'); }); @@ -304,4 +313,156 @@ describe('api/queries', function () { }); await utils.del('editor2', `/api/queries/${body.id}`, 403); }); + + it('supports url parameters', async function () { + utils = new TestUtils({ appLogLevel: 'error' }); + await utils.init(true); + + const connection1 = await utils.post('admin', '/api/connections', { + name: 'connection1', + driver: 'sqlite', + filename: './test/fixtures/sales.sqlite', + }); + assert(connection1); + const connection2 = await utils.post('admin', '/api/connections', { + name: 'connection2', + driver: 'sqlite', + filename: './test/fixtures/sales.sqlite', + }); + assert(connection2); + + const query1 = await utils.post('editor', '/api/queries', { + name: 'query1', + tags: ['one', 'two'], + connectionId: connection1.id, + queryText: 'SELECT * FROM some_table -- query1', + chart: { + chartType: 'line', + fields: { + x: 'field1', + y: 'field2', + }, + }, + }); + + const query2 = await utils.post('editor2', '/api/queries', { + name: 'query2', + tags: ['two', 'three'], + connectionId: connection2.id, + queryText: 'SELECT * FROM some_table -- select-query2', + acl: [{ groupId: '__EVERYONE__' }], + chart: { + chartType: 'line', + fields: { + x: 'field1', + y: 'field2', + }, + }, + }); + + // connectionId + let body; + let params; + body = await utils.get( + 'editor', + `/api/queries?connectionId=${connection1.id}` + ); + assert.equal(body.length, 1); + assert(body.find((c) => c.id === query1.id)); + body = await utils.get( + 'editor', + `/api/queries?connectionId=${connection2.id}` + ); + assert.equal(body.length, 1); + assert(body.find((c) => c.id === query2.id)); + + // ownedByUser + body = await utils.get('editor', `/api/queries?ownedByUser=true`); + assert.equal(body.length, 1); + assert(body.find((c) => c.id === query1.id)); + body = await utils.get('editor', `/api/queries?ownedByUser=false`); + assert.equal(body.length, 1); + assert(body.find((c) => c.id === query2.id)); + + // limit & sortBy & offset + params = queryString.stringify({ limit: 1, sortBy: '+name' }); + body = await utils.get('editor', `/api/queries?${params}`); + assert.equal(body.length, 1); + assert.equal(body[0].id, query1.id); + params = queryString.stringify({ limit: 1, sortBy: '-name' }); + body = await utils.get('editor', `/api/queries?${params}`); + assert.equal(body.length, 1); + assert.equal(body[0].id, query2.id); + params = queryString.stringify({ limit: 1, offset: 1, sortBy: '-name' }); + body = await utils.get('editor', `/api/queries?${params}`); + assert.equal(body.length, 1); + assert.equal(body[0].id, query1.id); + + // tags + params = queryString.stringify( + { tags: ['one'] }, + { arrayFormat: 'bracket' } + ); + body = await utils.get('editor', `/api/queries?${params}`); + assert.equal(body.length, 1); + assert.equal(body[0].id, query1.id); + params = queryString.stringify( + { tags: ['one', 'two'] }, + { arrayFormat: 'bracket' } + ); + body = await utils.get('editor', `/api/queries?${params}`); + assert.equal(body.length, 1); + assert.equal(body[0].id, query1.id); + params = queryString.stringify( + { tags: ['two'] }, + { arrayFormat: 'bracket' } + ); + body = await utils.get('editor', `/api/queries?${params}`); + assert.equal(body.length, 2); + + // createdBy + params = queryString.stringify( + { createdBy: utils.users.editor2.email }, + { arrayFormat: 'bracket' } + ); + body = await utils.get('editor', `/api/queries?${params}`); + assert.equal(body.length, 1); + assert.equal(body[0].id, query2.id); + + // searches + params = queryString.stringify( + { search: 'query2' }, + { arrayFormat: 'bracket' } + ); + body = await utils.get('editor', `/api/queries?${params}`); + assert.equal(body.length, 1); + assert.equal(body[0].id, query2.id); + params = queryString.stringify( + { search: 'select-query2' }, + { arrayFormat: 'bracket' } + ); + body = await utils.get('editor', `/api/queries?${params}`); + assert.equal(body.length, 1); + assert.equal(body[0].id, query2.id); + + // has link header + let res = await utils.getResponse('admin', `/api/queries?limit=1`, 200); + let links = parseLinkHeader(res.header.link); + assert(links.next); + assert.equal(links.next.limit, 1); + assert.equal(links.next.offset, 1); + assert.equal(links.next.url, '/api/queries?limit=1&offset=1'); + res = await utils.getResponse( + 'admin', + `/api/queries?limit=1&offset=1`, + 200 + ); + links = parseLinkHeader(res.header.link); + assert.equal(links.next.limit, 1); + assert.equal(links.next.offset, 2); + assert.equal(links.next.url, '/api/queries?limit=1&offset=2'); + assert.equal(links.prev.limit, 1); + assert.equal(links.prev.offset, 0); + assert.equal(links.prev.url, '/api/queries?limit=1&offset=0'); + }); }); From cc26ef44d06c3a0c296073bf7011de655613b550 Mon Sep 17 00:00:00 2001 From: eladeyal-intel Date: Mon, 8 Jun 2020 21:21:08 +0300 Subject: [PATCH 139/658] mention SAML (#672) --- docs/authentication.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/authentication.md b/docs/authentication.md index 59b0e7406..a852cd232 100644 --- a/docs/authentication.md +++ b/docs/authentication.md @@ -79,6 +79,18 @@ For OAuth to be useful this usually involves the following: - `PUBLIC_URL`=`http://localhost` - `DISABLE_USERPASS_AUTH`=`true` (optional - disables plain local user logins) +## SAML + +SAML-based authentication can be enabled by setting the necessary environment variables: + +- `SAML_AUTH_CONTEXT` +- `SAML_CALLBACK_URL` +- `SAML_CERT` +- `SAML_ENTRY_POINT` +- `SAML_ISSUER` +- `PUBLIC_URL` +- `DISABLE_USERPASS_AUTH`=`true` (optional - disables plain local user logins) + ## Whitelist Domains for User Administration An entire domain can be whitelisted for username administration by setting enviornment variable `WHITELISTED_DOMAINS`. This may be particularly useful in combination with OAuth. From 92f4a56743fd87ad5de23aca2edab9471e18c082 Mon Sep 17 00:00:00 2001 From: eladeyal-intel Date: Tue, 9 Jun 2020 02:02:13 +0300 Subject: [PATCH 140/658] remove history view for noauth users (#673) closes #658 --- client/src/app-header/HistoryButton.js | 3 +++ docs/configuration.md | 2 +- server/routes/query-history.js | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/client/src/app-header/HistoryButton.js b/client/src/app-header/HistoryButton.js index ef7b30fb7..ca3ddb6a0 100644 --- a/client/src/app-header/HistoryButton.js +++ b/client/src/app-header/HistoryButton.js @@ -17,6 +17,9 @@ const Connected = connect(mapStateToProps, (store) => ({ function HistoryButton({ currentUser, clearQueries }) { const [showQueryHistory, setShowQueryHistory] = useState(false); + // If an editor has no identity (e.g., logged in without authentication), query history is not available because it can not be distinguished from others'. + if (currentUser.id === 'noauth' && currentUser.role === 'editor') return; + return (