From 293a1ef2a71b5e7ec1ce80aa48e9f2646cc27f39 Mon Sep 17 00:00:00 2001 From: joelchu Date: Tue, 8 Oct 2019 22:47:38 +0800 Subject: [PATCH 1/5] modify the test for the auth test but its failed at the moment --- packages/node-client/tests/auth.test.js | 37 +++++++++++++++---------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/packages/node-client/tests/auth.test.js b/packages/node-client/tests/auth.test.js index a2a52d55..dfe23da0 100755 --- a/packages/node-client/tests/auth.test.js +++ b/packages/node-client/tests/auth.test.js @@ -6,7 +6,7 @@ const debug = require('debug')('jsonql-node-client:test:auth') const { PUBLIC_CONTRACT_FILE_NAME } = require('jsonql-constants') const server = require('./fixtures/server-with-auth') const nodeClient = require('../index') -const contractDir =join(__dirname,'fixtures','contract','tmp' ,'client-with-auth') +const contractDir =join(__dirname, 'fixtures','contract','tmp' ,'client-with-auth') const { contractKey, loginToken, token } = require('./fixtures/options') const { JsonqlAuthorisationError } = require('jsonql-errors') @@ -21,8 +21,11 @@ test.before(async (t) => { contractDir, contractKey }) + // we need to login here otherwise its hard to test the next call in sequence + let { login } = client; + // t.is(true, typeof login === 'function', 'check if the auth method generate correctly') + let result = await login(loginToken) t.context.client = client; - }) test.after(t => { @@ -30,22 +33,28 @@ test.after(t => { fsx.removeSync(contractDir) }) -test('Testing the login function', async (t) => { +test.cb("Try a wrong password and cause the server to throw error", t => { + t.plan(1) let client = t.context.client; + client.login('wrong-password') + .catch(err => { + t.is(err.className, 'JsonqlAuthorisationError') + t.end() + }) +}) + +test('Testing the login function', async (t) => { + // let client = t.context.client; t.is(true, fs.existsSync(join(contractDir, PUBLIC_CONTRACT_FILE_NAME)), 'verify the public contract file is generated') - let { login } = client; - t.is(true, typeof login === 'function', 'check if the auth method generate correctly') - let result = await login(loginToken) // remove the compare because the token is not the same anymore - t.truthy(result, 'verify the return token is what we expected') + // t.truthy(result, 'verify the return token is what we expected') }) -test("Try a wrong password and cause the server to throw error", async t => { +test(`Test if the loggin client token is persist`, async t => { let client = t.context.client; - client.login('wrong-password') - .catch(err => { - t.true(err.className === 'JsonqlAuthorisationError') - }) -}) + let { getUser } = client.query; -test.todo(`Test if the loggin client token is persist`) + let user = await getUser(1) + + t.is(user, 'Davide') +}) -- Gitee From 02ec5b46b1be4e5caddf5d85d3196cbf15dd7d8c Mon Sep 17 00:00:00 2001 From: joelchu Date: Tue, 8 Oct 2019 23:07:16 +0800 Subject: [PATCH 2/5] change the error message to make it clearer --- packages/koa/src/middlewares/auth-middleware.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/koa/src/middlewares/auth-middleware.js b/packages/koa/src/middlewares/auth-middleware.js index fea1cc12..bd341e32 100644 --- a/packages/koa/src/middlewares/auth-middleware.js +++ b/packages/koa/src/middlewares/auth-middleware.js @@ -138,7 +138,7 @@ export default function authMiddleware(config) { } } else { debug('throw at headers not found', ctx.request.headers) - return forbiddenHandler(ctx, {message: 'header is not found!'}) + return forbiddenHandler(ctx, {message: 'Auth header not found!'}) } } catch(e) { if (e instanceof JsonqlResolverNotFoundError) { -- Gitee From dc467640864ac11db5b6ebdd47bebbaa4d8f0b67 Mon Sep 17 00:00:00 2001 From: joelchu Date: Tue, 8 Oct 2019 23:18:00 +0800 Subject: [PATCH 3/5] update the jsonql-koa deps first --- packages/koa/package.json | 4 ++-- packages/node-client/src/base/jsonql-base-cls.js | 6 +++++- packages/node-client/tests/auth.test.js | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/koa/package.json b/packages/koa/package.json index 9d1f6ce2..e8b16ad6 100644 --- a/packages/koa/package.json +++ b/packages/koa/package.json @@ -72,12 +72,12 @@ "esm": "^3.2.25", "fs-extra": "^8.1.0", "jsonql-constants": "^1.8.3", - "jsonql-contract": "^1.7.20", + "jsonql-contract": "^1.7.21", "jsonql-errors": "^1.1.3", "jsonql-jwt": "^1.3.2", "jsonql-node-client": "^1.1.9", "jsonql-params-validator": "^1.4.11", - "jsonql-resolver": "^0.9.2", + "jsonql-resolver": "^0.9.3", "jsonql-utils": "^0.6.12", "jsonql-web-console": "^0.4.3", "koa": "^2.8.2", diff --git a/packages/node-client/src/base/jsonql-base-cls.js b/packages/node-client/src/base/jsonql-base-cls.js index decf4cd7..497f2323 100755 --- a/packages/node-client/src/base/jsonql-base-cls.js +++ b/packages/node-client/src/base/jsonql-base-cls.js @@ -109,7 +109,10 @@ class JsonqlClient extends JsonqlCacheClass { */ __createHeaders(header = {}) { const authHeader = this.__getAuthHeader() - return merge({}, this.baseHeader, header, authHeader) + let _header = merge({}, this.baseHeader, header, authHeader) + debug('sending header', _header) + + return _header; } /** @@ -198,6 +201,7 @@ class JsonqlClient extends JsonqlCacheClass { */ __getAuthHeader() { let t = this.__getAuthToken() + debug(`[getAuthHeader] ${t}`) return t ? { [AUTH_HEADER]: `${BEARER} ${t}` } : {}; } diff --git a/packages/node-client/tests/auth.test.js b/packages/node-client/tests/auth.test.js index dfe23da0..9d7ec5a9 100755 --- a/packages/node-client/tests/auth.test.js +++ b/packages/node-client/tests/auth.test.js @@ -50,7 +50,7 @@ test('Testing the login function', async (t) => { // t.truthy(result, 'verify the return token is what we expected') }) -test(`Test if the loggin client token is persist`, async t => { +test.only(`Test if the loggin client token is persist`, async t => { let client = t.context.client; let { getUser } = client.query; -- Gitee From 9326784b61ff6405f23b1fcf37b69af1e41719f6 Mon Sep 17 00:00:00 2001 From: joelchu Date: Tue, 8 Oct 2019 23:34:30 +0800 Subject: [PATCH 4/5] fixed the Auth problem it happens in our test code not the module itself --- packages/koa/src/middlewares/auth-middleware.js | 4 ++++ .../node-client/tests/fixtures/resolvers/auth/login.js | 9 +++++---- .../tests/fixtures/resolvers/auth/validator.js | 9 +++++---- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/koa/src/middlewares/auth-middleware.js b/packages/koa/src/middlewares/auth-middleware.js index bd341e32..3ba9164d 100644 --- a/packages/koa/src/middlewares/auth-middleware.js +++ b/packages/koa/src/middlewares/auth-middleware.js @@ -27,6 +27,7 @@ import { JsonqlValidationError, finalCatch } from 'jsonql-errors' +// this method just search if the user provide their own validate token method import { getLocalValidator } from 'jsonql-resolver' import { trim } from 'lodash' @@ -87,6 +88,7 @@ const createJwtValidatorChain = (config, validator = false) => { */ const getValidator = (config, type, contract) => { if (validatorFn && typeof validatorFn === 'function') { + debug(`return the cache validatorFn`) return validatorFn; } let localValidator; @@ -99,8 +101,10 @@ const getValidator = (config, type, contract) => { } } if (config.useJwt) { + debug(`return the jwt validation chain`) return createJwtValidatorChain(config, localValidator) } + debug(`return a local validator`) return localValidator; } diff --git a/packages/node-client/tests/fixtures/resolvers/auth/login.js b/packages/node-client/tests/fixtures/resolvers/auth/login.js index 55e16ded..f27d7d58 100755 --- a/packages/node-client/tests/fixtures/resolvers/auth/login.js +++ b/packages/node-client/tests/fixtures/resolvers/auth/login.js @@ -1,10 +1,11 @@ -const debug = require('debug')('jsonql-node-client:test:login'); -const { loginToken, token } = require('../../options'); +const debug = require('debug')('jsonql-node-client:test:login') +const { loginToken, token } = require('../../options') /** * @param {string} credential to check * @return {boolean|string} string on ok */ -module.exports = function(credential) { - debug(`I got ${credential}`); +module.exports = function login(credential) { + debug(`I got [${credential}] compare to ${loginToken}`) + // @NOTE we expect the return result is an object! return credential === loginToken ? token : false; } diff --git a/packages/node-client/tests/fixtures/resolvers/auth/validator.js b/packages/node-client/tests/fixtures/resolvers/auth/validator.js index 45150054..2d176152 100755 --- a/packages/node-client/tests/fixtures/resolvers/auth/validator.js +++ b/packages/node-client/tests/fixtures/resolvers/auth/validator.js @@ -1,10 +1,11 @@ -const debug = require('debug')('jsonql-node-client:test:issuer'); -const { token } = require('../../options'); +const debug = require('debug')('jsonql-node-client:test:issuer') +const { token } = require('../../options') /** + * This is secondary valdiator provide by the developer * @param {string} userToken - * @return {boolean} true on ok + * @return {object} IT MUST RETURN AN OBJECT!!! */ module.exports = function validator(userToken) { - return token === userToken ? 1 : 0; + return token === userToken ? {userId: 1} : 0; } -- Gitee From bb178a3e440a81f960869b565fd5dcabedcab3c0 Mon Sep 17 00:00:00 2001 From: joelchu Date: Tue, 8 Oct 2019 23:36:36 +0800 Subject: [PATCH 5/5] jsonql-node-client to 1.1.11 --- packages/node-client/tests/fixtures/resolvers/auth/login.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/node-client/tests/fixtures/resolvers/auth/login.js b/packages/node-client/tests/fixtures/resolvers/auth/login.js index f27d7d58..6a5fadd3 100755 --- a/packages/node-client/tests/fixtures/resolvers/auth/login.js +++ b/packages/node-client/tests/fixtures/resolvers/auth/login.js @@ -1,6 +1,8 @@ const debug = require('debug')('jsonql-node-client:test:login') const { loginToken, token } = require('../../options') + /** + * The login function * @param {string} credential to check * @return {boolean|string} string on ok */ -- Gitee