From f86c34535108c0d41d6a516fbc9baec29acb955c Mon Sep 17 00:00:00 2001 From: joelchu Date: Sat, 9 Nov 2019 18:58:00 +0800 Subject: [PATCH 01/10] finish the new optons check integration --- packages/@jsonql/koa/index.js | 9 +++++---- packages/@jsonql/koa/package.json | 2 +- packages/@jsonql/koa/src/index.js | 4 +++- packages/@jsonql/koa/src/options/index.js | 17 ++++++++++++++--- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/packages/@jsonql/koa/index.js b/packages/@jsonql/koa/index.js index 82633699..fba01ebd 100644 --- a/packages/@jsonql/koa/index.js +++ b/packages/@jsonql/koa/index.js @@ -9,16 +9,17 @@ const { version } = require('./package.json') * @return {object} with several method to control the server */ module.exports = function createKoaServer(config = {}, middlewares = []) { - // keep a copy of the original config - const originalConfig = Object.assign({}, config) + // keep a copy of the original config - do we need this anymore? + // const originalConfig = Object.assign({}, config) const opts = checkOptions(config) - const { server, app, ws } = initServer(config, middlewares) - + const { server, app, ws } = initServer(opts, middlewares) + // call this to start the server const start = () => { debug(`Server version: ${version} start on ${opts.port}`) server.listen(opts.port) } + // call this to stop the server const stop = () => { server.close() } diff --git a/packages/@jsonql/koa/package.json b/packages/@jsonql/koa/package.json index 05a56909..5dbd803d 100644 --- a/packages/@jsonql/koa/package.json +++ b/packages/@jsonql/koa/package.json @@ -50,7 +50,7 @@ "debug": "^4.1.1", "fs-extra": "^8.1.0", "jsonql-constants": "^1.8.10", - "jsonql-koa": "^1.4.4", + "jsonql-koa": "^1.4.5", "jsonql-params-validator": "^1.4.11", "koa": "^2.11.0", "koa-bodyparser": "^4.2.1", diff --git a/packages/@jsonql/koa/src/index.js b/packages/@jsonql/koa/src/index.js index b75a198b..bb8f5bd2 100644 --- a/packages/@jsonql/koa/src/index.js +++ b/packages/@jsonql/koa/src/index.js @@ -7,12 +7,14 @@ const cors = require('koa-cors') const { jsonqlKoa } = require('jsonql-koa') const { getSocketServer } = require('./get-socket-server') + /** * @param {object} config configuration * @param {array} middlewares what it said * @return {object} see below for detail */ function initServer(config, middlewares) { + const app = new Koa() // apply default middlewares app.use(bodyparser()) @@ -25,7 +27,7 @@ function initServer(config, middlewares) { }) const server = http.createServer(app.callback()) - + const ws = getSocketServer(config, server) // return it return { server, app, ws } diff --git a/packages/@jsonql/koa/src/options/index.js b/packages/@jsonql/koa/src/options/index.js index c619037a..0cbb3438 100644 --- a/packages/@jsonql/koa/src/options/index.js +++ b/packages/@jsonql/koa/src/options/index.js @@ -1,6 +1,17 @@ -const { checkConfig } = require('jsonql-params-validator') +// check options const { options } = require('./options') +const { preConfigCheck } = require('jsonql-koa') +const { wsServerDefaultOptions, wsServerConstProps } = require('jsonql-ws-server') -module.exports = function(config) { - return checkConfig(config, options) +/** + * the default api to check and init the config + * @param {object} config user supply configuration + * @return {object} configuration + */ +module.exports = function checkOptions(config) { + // first create a combine options + return preConfigCheck( + wsServerDefaultOptions, + Object.assign(wsServerConstProps, options), + config) } -- Gitee From 8c9530fec9bbdebc24d83be6d6510a4d75d355ec Mon Sep 17 00:00:00 2001 From: joelchu Date: Sat, 9 Nov 2019 19:08:28 +0800 Subject: [PATCH 02/10] preparing the new test for @jsonql/koa --- packages/@jsonql/koa/src/options/index.js | 4 ++-- packages/@jsonql/koa/src/options/options.js | 3 +++ packages/@jsonql/koa/tests/basic.test.js | 8 ++++++++ packages/@jsonql/koa/tests/fixtures/options.js | 14 ++++++++++++++ packages/@jsonql/koa/tests/fixtures/test-server.js | 9 +++------ 5 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 packages/@jsonql/koa/tests/fixtures/options.js diff --git a/packages/@jsonql/koa/src/options/index.js b/packages/@jsonql/koa/src/options/index.js index 0cbb3438..a476c5f2 100644 --- a/packages/@jsonql/koa/src/options/index.js +++ b/packages/@jsonql/koa/src/options/index.js @@ -11,7 +11,7 @@ const { wsServerDefaultOptions, wsServerConstProps } = require('jsonql-ws-server module.exports = function checkOptions(config) { // first create a combine options return preConfigCheck( - wsServerDefaultOptions, - Object.assign(wsServerConstProps, options), + Object.assign(wsServerDefaultOptions, options), + wsServerConstProps, config) } diff --git a/packages/@jsonql/koa/src/options/options.js b/packages/@jsonql/koa/src/options/options.js index 42a17171..dda45cd6 100644 --- a/packages/@jsonql/koa/src/options/options.js +++ b/packages/@jsonql/koa/src/options/options.js @@ -2,6 +2,9 @@ const { createConfig } = require('jsonql-params-validator') const { BOOLEAN_TYPE, NUMBER_TYPE, + STRING_TYPE, + ENUM_KEY, + ALIAS_KEY, DEFAULT_PORT_NUM, JS_WS_NAME, JS_WS_SOCKET_IO_NAME, diff --git a/packages/@jsonql/koa/tests/basic.test.js b/packages/@jsonql/koa/tests/basic.test.js index 6e0509f0..9e0123cc 100644 --- a/packages/@jsonql/koa/tests/basic.test.js +++ b/packages/@jsonql/koa/tests/basic.test.js @@ -1,7 +1,13 @@ +// basic test const test = require('ava') +const fsx = require('fs-extra') +const { join } = require('path') const debug = require('debug')('jsonql-koa:test:basic') const { JS_WS_NAME } = require('jsonql-constants') +const { contractBaseDir, BASIC_DIR } = require('./fixtures/options') +const contractDir = join(contractBaseDir, BASIC_DIR) + const initServer = require('./fixtures/test-server') test.before(t => { @@ -15,6 +21,8 @@ test.before(t => { test.after(t => { t.context.stop() + fsx.removeSync(contractDir) + debug(contractDir) }) diff --git a/packages/@jsonql/koa/tests/fixtures/options.js b/packages/@jsonql/koa/tests/fixtures/options.js new file mode 100644 index 00000000..dad147b2 --- /dev/null +++ b/packages/@jsonql/koa/tests/fixtures/options.js @@ -0,0 +1,14 @@ +const { join } = require('path') +const resolverDir = join(__dirname, 'resolvers') +const contractBaseDir = join(__dirname, 'contract') +const keysDir = join(__dirname, 'keys') +const AUTH_DIR = 'auth' +const BASIC_DIR = 'basic' + +module.exports = { + resolverDir, + contractBaseDir, + keysDir, + AUTH_DIR, + BASIC_DIR +} diff --git a/packages/@jsonql/koa/tests/fixtures/test-server.js b/packages/@jsonql/koa/tests/fixtures/test-server.js index 3673afee..38a89ed8 100644 --- a/packages/@jsonql/koa/tests/fixtures/test-server.js +++ b/packages/@jsonql/koa/tests/fixtures/test-server.js @@ -1,20 +1,17 @@ // create server for testing const initServer = require('../../index') const { join } = require('path') -const resolverDir = join(__dirname, 'resolvers') -const contractBaseDir = join(__dirname, 'contract') -const keysDir = join(__dirname, 'keys') - +const { resolverDir, contractBaseDir, keysDir, AUTH_DIR, BASIC_DIR } = require('./options') module.exports = function(config = {}) { let { enableAuth, serverType } = config; let contractDir; switch (true) { case enableAuth && serverType: - contractDir = join(contractBaseDir, 'auth') + contractDir = join(contractBaseDir, AUTH_DIR) break; default: - contractDir = join(contractBaseDir, 'basic') + contractDir = join(contractBaseDir, BASIC_DIR) } const baseConfig = { -- Gitee From 33238673278461a1c98dc908f8564fd7bf79fde1 Mon Sep 17 00:00:00 2001 From: joelchu Date: Sat, 9 Nov 2019 21:46:19 +0800 Subject: [PATCH 03/10] Hello world test passed --- packages/@jsonql/koa/tests/basic.test.js | 14 +++++++++----- packages/@jsonql/koa/tests/fixtures/test-server.js | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/@jsonql/koa/tests/basic.test.js b/packages/@jsonql/koa/tests/basic.test.js index 9e0123cc..5bc62c98 100644 --- a/packages/@jsonql/koa/tests/basic.test.js +++ b/packages/@jsonql/koa/tests/basic.test.js @@ -2,6 +2,7 @@ const test = require('ava') const fsx = require('fs-extra') const { join } = require('path') +const jsonqlNodeClient = require('jsonql-node-client') const debug = require('debug')('jsonql-koa:test:basic') const { JS_WS_NAME } = require('jsonql-constants') @@ -22,14 +23,17 @@ test.before(t => { test.after(t => { t.context.stop() fsx.removeSync(contractDir) - debug(contractDir) + // debug(contractDir) }) +test(`Basic hello world test`, async t => { + const client = await jsonqlNodeClient({ + hostname: 'http://localhost:8001', + contractDir + }) -test(`Just take a look at the option`, t => { - - const config = {someOption: 'xyz'} + const result = await client.query.helloWorld() - t.pass() + t.truthy(result) }) diff --git a/packages/@jsonql/koa/tests/fixtures/test-server.js b/packages/@jsonql/koa/tests/fixtures/test-server.js index 38a89ed8..58a4c1fb 100644 --- a/packages/@jsonql/koa/tests/fixtures/test-server.js +++ b/packages/@jsonql/koa/tests/fixtures/test-server.js @@ -3,7 +3,7 @@ const initServer = require('../../index') const { join } = require('path') const { resolverDir, contractBaseDir, keysDir, AUTH_DIR, BASIC_DIR } = require('./options') -module.exports = function(config = {}) { +module.exports = function testServer(config = {}) { let { enableAuth, serverType } = config; let contractDir; switch (true) { -- Gitee From 707655bd7fa8c2447d2a56af6f30d0fa6d95c92f Mon Sep 17 00:00:00 2001 From: joelchu Date: Sat, 9 Nov 2019 22:04:19 +0800 Subject: [PATCH 04/10] update some of the default options in the ws-server in case it cause problem down the road --- packages/@jsonql/koa/README.md | 20 ++++++++++++++++--- packages/ws-server/package.json | 2 +- packages/ws-server/src/options/index.js | 9 +-------- packages/ws-server/src/share/add-property.js | 2 -- packages/ws-server/src/share/get-contract.js | 4 ++-- packages/ws-server/src/share/helpers.js | 4 ++-- .../ws-server/src/share/resolve-method.js | 1 - 7 files changed, 23 insertions(+), 19 deletions(-) diff --git a/packages/@jsonql/koa/README.md b/packages/@jsonql/koa/README.md index 10b65a9f..00fa7bb7 100644 --- a/packages/@jsonql/koa/README.md +++ b/packages/@jsonql/koa/README.md @@ -1,4 +1,4 @@ -# jsonql-node-server +# jsonql Koa server This is an all in one setup to have your jsonql API server setup in no time. @@ -6,8 +6,22 @@ It includes: 1. Koa 2. bodyparser, cors middleware -3. jsonql-koa middleware -4. jsonql-ws-server +3. [jsonql-koa](https://npmjs.com/pacakge/jsonql-koa) middleware +4. OptionalDependencies [jsonql-ws-server](https://npmjs.com/package/jsonql-ws-server) +5. OptionalDependencies jsonql-socketio-server (coming soon) + +## Quick start + +```js +const jsonqlKoaServer = require('@jsonql/koa') + +jsonqlKoaServer({ + autoStart: true, + port: 3000 +}) +``` + +That's it. ## Configuration diff --git a/packages/ws-server/package.json b/packages/ws-server/package.json index a8a3e322..708090bc 100755 --- a/packages/ws-server/package.json +++ b/packages/ws-server/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-ws-server", - "version": "1.4.0", + "version": "1.4.1", "description": "Setup WebSocket server for the jsonql to run on the same host, automatic generate public / private channel using contract", "main": "index.js", "files": [ diff --git a/packages/ws-server/src/options/index.js b/packages/ws-server/src/options/index.js index 8f1a6fe3..82daeaff 100644 --- a/packages/ws-server/src/options/index.js +++ b/packages/ws-server/src/options/index.js @@ -30,14 +30,8 @@ const { AVAILABLE_SERVERS, SECRET_MISSING_ERR } = require('../share/constants') - const getContract = require('../share/get-contract') - -// const HANDSHAKE_TYPE = 'handshake'; -// const ROUNDTRIP_TYPE = 'roundtrip'; - const { JsonqlValidationError } = require('jsonql-errors') - // base options const defaultOptions = { // @TODO this will be moving out shortly after the test done @@ -51,7 +45,7 @@ const defaultOptions = { enableAuth: createConfig(false, [BOOLEAN_TYPE]), // this option now is only for passing the key // this cause a bug because this option is always BOOLEAN and STRING TYPE! - useJwt: createConfig(false, [STRING_TYPE, BOOLEAN_TYPE]), // need to double check this + useJwt: createConfig(true, [STRING_TYPE, BOOLEAN_TYPE]), // need to double check this // we don't actually use this two contractDir: createConfig('', [STRING_TYPE]), resolverDir: createConfig('', [STRING_TYPE]), @@ -100,5 +94,4 @@ function checkConfig(config) { } // breaking change export as name also the options for merge with the upstream server - module.exports = { checkConfig, defaultOptions, constProps } diff --git a/packages/ws-server/src/share/add-property.js b/packages/ws-server/src/share/add-property.js index e4a2f7c9..c70c1218 100644 --- a/packages/ws-server/src/share/add-property.js +++ b/packages/ws-server/src/share/add-property.js @@ -9,9 +9,7 @@ const { // @BUG it's weird this file is not here but no error was throw const { objDefineProps, injectToFn } = require('jsonql-utils') const { provideUserdata } = require('jsonql-jwt') - const { nil, createWsReply, getDebug } = require('../share/helpers') - const debug = getDebug(`addProperty`) /* diff --git a/packages/ws-server/src/share/get-contract.js b/packages/ws-server/src/share/get-contract.js index b607ac27..47e39006 100644 --- a/packages/ws-server/src/share/get-contract.js +++ b/packages/ws-server/src/share/get-contract.js @@ -35,10 +35,10 @@ function getContractFromFile(config) { c = readContract(contractDir) if (!c) { if (config.initContract && config.initContract.then) { - // this is a pending promise + // this is a pending promise from the middleware (koa or express) return config.initContract.then(resolver) } - /* the last fallback */ + /* the final fallback */ setTimeout(() => { c = readContract(contractDir) if (c) { diff --git a/packages/ws-server/src/share/helpers.js b/packages/ws-server/src/share/helpers.js index 81eedd2a..d507cddb 100644 --- a/packages/ws-server/src/share/helpers.js +++ b/packages/ws-server/src/share/helpers.js @@ -1,5 +1,4 @@ -// util methods -const debug = require('debug') +// Helpers methods // jsonql libraries const { JSONQL_PATH, @@ -14,6 +13,7 @@ const { toJson, packError, isObjectHasKey } = require('jsonql-utils') const { MODULE_NAME } = require('./constants') // create debug +const debug = require('debug') const getDebug = name => debug(MODULE_NAME).extend(name) const _debug = getDebug('helpers') const WS_KEYS = [ WS_REPLY_TYPE, WS_EVT_NAME, WS_DATA_NAME ] diff --git a/packages/ws-server/src/share/resolve-method.js b/packages/ws-server/src/share/resolve-method.js index d962d346..a3729852 100644 --- a/packages/ws-server/src/share/resolve-method.js +++ b/packages/ws-server/src/share/resolve-method.js @@ -2,7 +2,6 @@ const fs = require('fs') const { join } = require('path') const { isUndefined } = require('lodash') - const { JsonqlAuthorisationError, JsonqlResolverNotFoundError, -- Gitee From 3dd82abde17b062fa932474faf320f2d77b10c2e Mon Sep 17 00:00:00 2001 From: joelchu Date: Sat, 9 Nov 2019 22:04:53 +0800 Subject: [PATCH 05/10] Add a init method for the @jsonql/koa to create folder structures --- packages/@jsonql/koa/src/init.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 packages/@jsonql/koa/src/init.js diff --git a/packages/@jsonql/koa/src/init.js b/packages/@jsonql/koa/src/init.js new file mode 100644 index 00000000..29408a92 --- /dev/null +++ b/packages/@jsonql/koa/src/init.js @@ -0,0 +1,9 @@ +// when run for the first time, check those important folder exists or not +// if not exist (especially resolver directory) then we run this init and create the structure +// for the developer +const fsx = require('fs-extra') + + +module.exports = function init(config) { + +} -- Gitee From 335b51cef8865d423ae48416ee8b7867c28a5d21 Mon Sep 17 00:00:00 2001 From: joelchu Date: Sat, 9 Nov 2019 22:06:05 +0800 Subject: [PATCH 06/10] update jsonql-ws-server --- packages/@jsonql/koa/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@jsonql/koa/package.json b/packages/@jsonql/koa/package.json index 5dbd803d..28576640 100644 --- a/packages/@jsonql/koa/package.json +++ b/packages/@jsonql/koa/package.json @@ -58,7 +58,7 @@ "yargs": "^14.2.0" }, "optionalDependencies": { - "jsonql-ws-server": "^1.4.0" + "jsonql-ws-server": "^1.4.1" }, "bin": { "jsonql-koa-cli": "./cli.js" -- Gitee From 94b410d252659c5e55a0e4e1890e358eafddcd76 Mon Sep 17 00:00:00 2001 From: joelchu Date: Sat, 9 Nov 2019 23:27:07 +0800 Subject: [PATCH 07/10] setup the rest of the test skeletons --- packages/@jsonql/koa/package.json | 3 ++ packages/@jsonql/koa/tests/auth.test.js | 36 ++++++++++++++----- packages/@jsonql/koa/tests/basic.test.js | 8 ++--- .../@jsonql/koa/tests/fixtures/options.js | 8 ++++- .../@jsonql/koa/tests/fixtures/test-server.js | 14 +++++--- packages/@jsonql/koa/tests/ms.test.js | 12 +++++++ packages/@jsonql/koa/tests/socket.test.js | 10 +++++- 7 files changed, 73 insertions(+), 18 deletions(-) create mode 100644 packages/@jsonql/koa/tests/ms.test.js diff --git a/packages/@jsonql/koa/package.json b/packages/@jsonql/koa/package.json index 28576640..6b7eeb92 100644 --- a/packages/@jsonql/koa/package.json +++ b/packages/@jsonql/koa/package.json @@ -6,6 +6,9 @@ "scripts": { "test": "ava --verbose", "test:basic": "DEBUG=jsonql-koa* ava --verbose ./tests/basic.test.js", + "test:auth": "DEBUG=jsonql-koa* ava --verbose ./tests/auth.test.js", + "test:socket": "DEBUG=jsonql-koa* ava --verbose ./tests/socket.test.js", + "test:ms": "DEBUG=jsonql-koa* ava --verbose ./tests/ms.test.js", "test:cli": "DEBUG=jsonql-koa* node ./cli.js" }, "keywords": [ diff --git a/packages/@jsonql/koa/tests/auth.test.js b/packages/@jsonql/koa/tests/auth.test.js index 186fdea9..6dd117a9 100644 --- a/packages/@jsonql/koa/tests/auth.test.js +++ b/packages/@jsonql/koa/tests/auth.test.js @@ -1,22 +1,42 @@ const test = require('ava') -const { JS_WS_NAME } = require('jsonql-constants') -const initServer = require('./fixtures/test-server') +const fsx = require('fs-extra') +const jsonqlNodeClient = require('jsonql-node-client') +const { JS_WS_NAME, HELLO } = require('jsonql-constants') +const jsonqlKoaServer = require('./fixtures/test-server') +const { contractBaseDir, AUTH_DIR } = require('./fixtures/options') +const contracctDir = join(contractBaseDir, AUTH_DIR) +const port = 8082; test.before(t => { - const { stop } = initServer({ - port: 8082, + const { stop } = jsonqlKoaServer({ + port: port, autoStart: true, - enableAuth: true, - socketType: JS_WS_NAME + enableAuth: true + // socketType: JS_WS_NAME }) t.context.stop = stop; - }) test.after( t => { t.context.stop() + fsx.removeSync(contractDir) }) +test.serial(`It should able to setup a auth server`, async t => { + t.context.client = await jsonqlNodeClient({ + hostname: `http://localhost:${port}`, + enableAuth: true, + contractDir + }) + + const result = await t.context.query.helloWorld() + + t.is(result, HELLO) +}) + +test.todo(`It should not able to connect to a private method`) + +test.todo(`It should able to login`) -test.todo(`It should able to setup a auth server`) +test.todo(`It should able to connect to a private method after login`) diff --git a/packages/@jsonql/koa/tests/basic.test.js b/packages/@jsonql/koa/tests/basic.test.js index 5bc62c98..4db99eb0 100644 --- a/packages/@jsonql/koa/tests/basic.test.js +++ b/packages/@jsonql/koa/tests/basic.test.js @@ -4,15 +4,15 @@ const fsx = require('fs-extra') const { join } = require('path') const jsonqlNodeClient = require('jsonql-node-client') const debug = require('debug')('jsonql-koa:test:basic') -const { JS_WS_NAME } = require('jsonql-constants') +const { JS_WS_NAME, HELLO } = require('jsonql-constants') const { contractBaseDir, BASIC_DIR } = require('./fixtures/options') const contractDir = join(contractBaseDir, BASIC_DIR) -const initServer = require('./fixtures/test-server') +const jsonqlKoaServer = require('./fixtures/test-server') test.before(t => { - const { stop } = initServer({ + const { stop } = jsonqlKoaServer({ port: 8001, autoStart: true }) @@ -34,6 +34,6 @@ test(`Basic hello world test`, async t => { const result = await client.query.helloWorld() - t.truthy(result) + t.is(result, HELLO) }) diff --git a/packages/@jsonql/koa/tests/fixtures/options.js b/packages/@jsonql/koa/tests/fixtures/options.js index dad147b2..1c7636ca 100644 --- a/packages/@jsonql/koa/tests/fixtures/options.js +++ b/packages/@jsonql/koa/tests/fixtures/options.js @@ -4,11 +4,17 @@ const contractBaseDir = join(__dirname, 'contract') const keysDir = join(__dirname, 'keys') const AUTH_DIR = 'auth' const BASIC_DIR = 'basic' +const SOCKET_DIR = 'socket' +const MS_DIR = 'ms' +const MAIN_DIR = 'main' module.exports = { resolverDir, contractBaseDir, keysDir, AUTH_DIR, - BASIC_DIR + BASIC_DIR, + SOCKET_DIR, + MS_DIR, + MAIN_DIR } diff --git a/packages/@jsonql/koa/tests/fixtures/test-server.js b/packages/@jsonql/koa/tests/fixtures/test-server.js index 58a4c1fb..b0fee2ac 100644 --- a/packages/@jsonql/koa/tests/fixtures/test-server.js +++ b/packages/@jsonql/koa/tests/fixtures/test-server.js @@ -1,15 +1,21 @@ // create server for testing -const initServer = require('../../index') +const jsonqlKoaServer = require('../../index') const { join } = require('path') -const { resolverDir, contractBaseDir, keysDir, AUTH_DIR, BASIC_DIR } = require('./options') +const { + resolverDir, contractBaseDir, keysDir, + AUTH_DIR, BASIC_DIR, SOCKET_DIR +} = require('./options') module.exports = function testServer(config = {}) { let { enableAuth, serverType } = config; let contractDir; switch (true) { - case enableAuth && serverType: + case enableAuth && !serverType: contractDir = join(contractBaseDir, AUTH_DIR) break; + case enableAuth && serverType: + contractDir = join(contractBaseDir, SOCKET_DIR) + break; default: contractDir = join(contractBaseDir, BASIC_DIR) } @@ -19,5 +25,5 @@ module.exports = function testServer(config = {}) { contractDir, keysDir } - return initServer(Object.assign(baseConfig, config)) + return jsonqlKoaServer(Object.assign(baseConfig, config)) } diff --git a/packages/@jsonql/koa/tests/ms.test.js b/packages/@jsonql/koa/tests/ms.test.js new file mode 100644 index 00000000..0297cbe5 --- /dev/null +++ b/packages/@jsonql/koa/tests/ms.test.js @@ -0,0 +1,12 @@ +// ms test +const test = require('ava') +const fsx = require('fs-extra') +const { join } = require('path') +const jsonqlNodeClient = require('jsonql-node-client') +const debug = require('debug')('jsonql-koa:test:basic') +const { JS_WS_NAME, HELLO } = require('jsonql-constants') + +const { contractBaseDir, MS_DIR, MAIN_DIR } = require('./fixtures/options') +const contractDir = join(contractBaseDir, MAIN_DIR) + +test.todo(`It should able to connect to another service via the internal nodeClient`) diff --git a/packages/@jsonql/koa/tests/socket.test.js b/packages/@jsonql/koa/tests/socket.test.js index 79506a14..55af70a6 100644 --- a/packages/@jsonql/koa/tests/socket.test.js +++ b/packages/@jsonql/koa/tests/socket.test.js @@ -1,7 +1,15 @@ const test = require('ava') +const fsx = require('fs-extra') +const { join } = require('path') +const jsonqlNodeClient = require('jsonql-node-client') +const debug = require('debug')('jsonql-koa:test:basic') +const { JS_WS_NAME, HELLO } = require('jsonql-constants') + +const { contractBaseDir, SOCKET_DIR } = require('./fixtures/options') +const contractDir = join(contractBaseDir, SOCKET_DIR) test.before(t => { - const { stop } = initServer({ + const { stop } = jsonqlKoaServer({ port: 8082, autoStart: true, enableAuth: true, -- Gitee From 064356b350993cdc1c0442039dcd4e6f84c01161 Mon Sep 17 00:00:00 2001 From: joelchu Date: Sat, 9 Nov 2019 23:40:19 +0800 Subject: [PATCH 08/10] found a problem with the getter and setter which is on the next todo list, to allow an external function --- packages/@jsonql/koa/tests/auth.test.js | 5 +++-- .../koa/tests/fixtures/keys/privateKey.pem | 15 +++++++++++++++ .../koa/tests/fixtures/keys/publicKey.pem | 6 ++++++ packages/koa/src/options/process-jwt-keys.js | 18 +++++++++++++----- 4 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 packages/@jsonql/koa/tests/fixtures/keys/privateKey.pem create mode 100644 packages/@jsonql/koa/tests/fixtures/keys/publicKey.pem diff --git a/packages/@jsonql/koa/tests/auth.test.js b/packages/@jsonql/koa/tests/auth.test.js index 6dd117a9..f39c3841 100644 --- a/packages/@jsonql/koa/tests/auth.test.js +++ b/packages/@jsonql/koa/tests/auth.test.js @@ -1,10 +1,11 @@ const test = require('ava') const fsx = require('fs-extra') +const { join } = require('path') const jsonqlNodeClient = require('jsonql-node-client') const { JS_WS_NAME, HELLO } = require('jsonql-constants') const jsonqlKoaServer = require('./fixtures/test-server') const { contractBaseDir, AUTH_DIR } = require('./fixtures/options') -const contracctDir = join(contractBaseDir, AUTH_DIR) +const contractDir = join(contractBaseDir, AUTH_DIR) const port = 8082; test.before(t => { @@ -30,7 +31,7 @@ test.serial(`It should able to setup a auth server`, async t => { contractDir }) - const result = await t.context.query.helloWorld() + const result = await t.context.client.query.helloWorld() t.is(result, HELLO) }) diff --git a/packages/@jsonql/koa/tests/fixtures/keys/privateKey.pem b/packages/@jsonql/koa/tests/fixtures/keys/privateKey.pem new file mode 100644 index 00000000..49e03d8f --- /dev/null +++ b/packages/@jsonql/koa/tests/fixtures/keys/privateKey.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQDGAgRsj3oaUjHGoAU/9mbRwMxfH6aLD3xr+WRtZ0twYEy5gzcx +rAvgFooLCJSditTp+KeAnibb443X90dGd/Y+Frb4eMwvQBfsDT682EdkHdiM+wtQ +Y4/f7v5lUKWelhCJ6HhdKrsRtrK7dsxmC1+jGYMxEqiiwwvtoSjmdzgHVwIDAQAB +AoGBAKAsy5ViLz0RlpB9rCGE2sH8+5ZLjTbazSSvNu1FbQI39HjxS3nUGjspIHwy +cb5Lq1alviJOTVL9biXxM+gubLN5BzA6xtt7+r7xh4x2LnM0kR47I7WiL0dboHGY +KhgZWAg/ryUVEtSx3RsOg30hABw43t8hS23IO99L2YXQ/KOxAkEA+bnHAlxWZyfp +D9exZ7RhgNZ0slTy/0+tbP6z2KFso17RIeyUVsUx4Uc1vozGaQmeEZAKXxVMNn3b +qPxskpLnLwJBAMr7l/gTbBG/XdLQlCFpNcZMQcMqr/mBWFtIQnws7gYRG4MJhfeQ +U0mWg4PJG0/4OnZJtm91HTaW0AiAOBzK2FkCQG/EqkFwOmuo/TLOAuS7YvhbA5fd +VXTXoHMr/Cp09T6ZbViVnj7Hu29sg61pLFROraSGp12vFpE8+1dCwwVHIpkCQD6h +BFHBxF1xe0R5oMrySGpHyx6pxCQq2ZVIpWLlBggPLTrwLEqnWFtjOm7mFSxGfdtT +gRvAuePHAqcs0KNpnvkCQQCkOFLl6pHK4JUr2jWSH2Mk4CFUmY2LUQUZuII9XCGy +z3lh17zp4cmg2JYvA6YtBzE7oDdlU7HAnxSUf6AC0UbK +-----END RSA PRIVATE KEY----- diff --git a/packages/@jsonql/koa/tests/fixtures/keys/publicKey.pem b/packages/@jsonql/koa/tests/fixtures/keys/publicKey.pem new file mode 100644 index 00000000..ae7b97b2 --- /dev/null +++ b/packages/@jsonql/koa/tests/fixtures/keys/publicKey.pem @@ -0,0 +1,6 @@ +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGAgRsj3oaUjHGoAU/9mbRwMxf +H6aLD3xr+WRtZ0twYEy5gzcxrAvgFooLCJSditTp+KeAnibb443X90dGd/Y+Frb4 +eMwvQBfsDT682EdkHdiM+wtQY4/f7v5lUKWelhCJ6HhdKrsRtrK7dsxmC1+jGYMx +EqiiwwvtoSjmdzgHVwIDAQAB +-----END PUBLIC KEY----- diff --git a/packages/koa/src/options/process-jwt-keys.js b/packages/koa/src/options/process-jwt-keys.js index c8face10..f89d59d0 100644 --- a/packages/koa/src/options/process-jwt-keys.js +++ b/packages/koa/src/options/process-jwt-keys.js @@ -7,9 +7,11 @@ import _ from 'lodash' import fsx from 'fs-extra' import { jwtProcessKey } from './options' -import { isObjectHasKey } from '../utils' +import { isObjectHasKey, getDebug } from '../utils' import { isString } from 'jsonql-params-validator' +const debug = getDebug('process-jwt-keys') + /** * Get the keys from cache call * @param {object} ctx koa context @@ -17,16 +19,22 @@ import { isString } from 'jsonql-params-validator' * @return {mixed} boolean on failed or object on success */ const getKeysFromCache = (ctx, config) => { + // @BUG when init this at run time, we could get a getter is not a function error? + // this happen in @jsonql/koa test + // @TODO need to check the getter sequence, also allow supply a setter and getter const { setter, getter } = ctx.state.jsonql; if (config.enableAuth && config.useJwt && !isString(config.useJwt) && (!config.publicKey || !config.privateKey)) { - let privateKey = getter('privateKey') - let publicKey = getter('publicKey') - if (privateKey && publicKey) { - return _.extend(config, { publicKey, privateKey }) + if (typeof getter === 'function') { + let privateKey = getter('privateKey') + let publicKey = getter('publicKey') + if (privateKey && publicKey) { + return _.extend(config, { publicKey, privateKey }) + } } + debug('getter', getter) } return false; } -- Gitee From b5792db008ff9e50e9632aa30d7350e98f70c74d Mon Sep 17 00:00:00 2001 From: joelchu Date: Sun, 10 Nov 2019 10:59:19 +0800 Subject: [PATCH 09/10] I think the setter and getter is disable for now this is why the get key from cache throw errors --- packages/koa/src/middlewares/init-middleware.js | 2 +- packages/koa/src/options/process-jwt-keys.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/koa/src/middlewares/init-middleware.js b/packages/koa/src/middlewares/init-middleware.js index feda87a9..f325e033 100644 --- a/packages/koa/src/middlewares/init-middleware.js +++ b/packages/koa/src/middlewares/init-middleware.js @@ -83,7 +83,7 @@ const isJsonpCall = function(ctx) { export default function initMiddleware(opts) { // export return async function(ctx, next) { - ctx.state.jsonql = {}; + ctx.state.jsonql = {} // ctx.state.jsonql.setter = setter; // ctx.state.jsonql.getter = getter; // first check if its calling the jsonql api diff --git a/packages/koa/src/options/process-jwt-keys.js b/packages/koa/src/options/process-jwt-keys.js index f89d59d0..9eb38a3b 100644 --- a/packages/koa/src/options/process-jwt-keys.js +++ b/packages/koa/src/options/process-jwt-keys.js @@ -21,7 +21,7 @@ const debug = getDebug('process-jwt-keys') const getKeysFromCache = (ctx, config) => { // @BUG when init this at run time, we could get a getter is not a function error? // this happen in @jsonql/koa test - // @TODO need to check the getter sequence, also allow supply a setter and getter + // @TODO need to check the getter sequence, also allow supply a setter and getter const { setter, getter } = ctx.state.jsonql; if (config.enableAuth && config.useJwt && @@ -34,7 +34,7 @@ const getKeysFromCache = (ctx, config) => { return _.extend(config, { publicKey, privateKey }) } } - debug('getter', getter) + // debug('getter', getter) } return false; } -- Gitee From 937d85a5df1edb5e549c9f7f6983cdaf5267dbcd Mon Sep 17 00:00:00 2001 From: joelchu Date: Sun, 10 Nov 2019 11:08:56 +0800 Subject: [PATCH 10/10] add back some of the missing clean up action --- packages/koa/package.json | 4 ++-- packages/koa/src/options/process-jwt-keys.js | 6 +++--- packages/koa/tests/config.test.js | 2 +- packages/koa/tests/fail.test.js | 7 +++---- packages/koa/tests/jwt.test.js | 4 ++++ 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/koa/package.json b/packages/koa/package.json index 24dbe4a9..01b45c57 100644 --- a/packages/koa/package.json +++ b/packages/koa/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-koa", - "version": "1.4.5", + "version": "1.4.6", "description": "jsonql Koa middleware", "main": "main.js", "module": "index.js", @@ -88,7 +88,7 @@ }, "devDependencies": { "ava": "^2.4.0", - "jsonql-ws-server": "^1.3.6", + "jsonql-ws-server": "^1.4.1", "jwt-decode": "^2.2.0", "koa-bodyparser": "^4.2.1", "nb-split-tasks": "^0.6.0", diff --git a/packages/koa/src/options/process-jwt-keys.js b/packages/koa/src/options/process-jwt-keys.js index 9eb38a3b..3be63d45 100644 --- a/packages/koa/src/options/process-jwt-keys.js +++ b/packages/koa/src/options/process-jwt-keys.js @@ -7,10 +7,10 @@ import _ from 'lodash' import fsx from 'fs-extra' import { jwtProcessKey } from './options' -import { isObjectHasKey, getDebug } from '../utils' +import { isObjectHasKey } from '../utils' import { isString } from 'jsonql-params-validator' - -const debug = getDebug('process-jwt-keys') +// @BUG this throw error +// const debug = getDebug('process-jwt-keys') /** * Get the keys from cache call diff --git a/packages/koa/tests/config.test.js b/packages/koa/tests/config.test.js index 6dea537d..1f5dfc48 100644 --- a/packages/koa/tests/config.test.js +++ b/packages/koa/tests/config.test.js @@ -28,7 +28,7 @@ let ctx = { } test.after( t => { - // fsx.removeSync(keysDir) + fsx.removeSync(keysDir) }) test('It should able to check the in dir', t => { diff --git a/packages/koa/tests/fail.test.js b/packages/koa/tests/fail.test.js index a5e69c66..035a67a0 100644 --- a/packages/koa/tests/fail.test.js +++ b/packages/koa/tests/fail.test.js @@ -6,16 +6,16 @@ const debug = require('debug')('jsonql-koa:test:fail') // const jsonqlMiddleware = require(join(__dirname, '..', 'index')) const { type, headers, dirs } = require('./fixtures/options') const fsx = require('fs-extra') - +const _dir = 'failed'; const createServer = require('./helpers/server') test.before((t) => { - t.context.app = createServer({}, 'failed'); + t.context.app = createServer({}, _dir); }) test.after( () => { // remove the files after - fsx.removeSync(join(dirs.contractDir, 'failed')) + fsx.removeSync(join(dirs.contractDir, _dir)) }) test("Should fail this Hello world test", async t => { @@ -28,5 +28,4 @@ test("Should fail this Hello world test", async t => { } }) t.is(404, res.status) - }) diff --git a/packages/koa/tests/jwt.test.js b/packages/koa/tests/jwt.test.js index 603837e5..10a9d00c 100644 --- a/packages/koa/tests/jwt.test.js +++ b/packages/koa/tests/jwt.test.js @@ -34,8 +34,12 @@ test.before( t => { publicKey, useJwt: true }) +}) +test.after( t => { + fsx.removeSync(join(dirs.contractDir, dir)) }) + // we need this one run first to get the token test('It should able to provide a token that can be decode with the client side module', async t => { let name = 'Joel'; -- Gitee