diff --git a/.eslintrc b/.eslintrc index 4b79e23..0c6d28a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,5 +1,9 @@ { - "extends": "parsley/esnext", + "extends": ["parsley/esnext", "prettier"], + "plugins": ["prettier"], + "rules": { + "prettier/prettier": "error" + }, "settings": { "import/resolver": "node" }, diff --git a/.prettierignore b/.prettierignore index 72e8ffc..ec6d3cd 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1 @@ -* +package.json diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..544138b --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "singleQuote": true +} diff --git a/lib/methods/perform-query.js b/lib/methods/perform-query.js index 566c7a9..392e37a 100644 --- a/lib/methods/perform-query.js +++ b/lib/methods/perform-query.js @@ -15,6 +15,8 @@ const performQuery = server => { jwtToken, jwtSecret, jwtAudiences, + jwtRole, + jwtVerifyOptions, pgDefaultRole, pgSettings } = options; @@ -25,18 +27,25 @@ const performQuery = server => { jwtToken, jwtSecret, jwtAudiences, + jwtRole, + jwtVerifyOptions, pgDefaultRole, pgSettings }, async context => { - return graphql( - schema, - query, - null, - {...context}, - variables, - operationName - ); + try { + const result = await graphql( + schema, + query, + null, + {...context}, + variables, + operationName + ); + return result; + } catch (error) { + throw error; + } } ); }; diff --git a/lib/routes/graphql.js b/lib/routes/graphql.js index d7734f0..18ee432 100644 --- a/lib/routes/graphql.js +++ b/lib/routes/graphql.js @@ -15,7 +15,7 @@ const shouldVerify = verify => request => { ); }; -const onPostAuth = server => { +const onPreAuth = server => { const {settings} = server.plugins[pkg.name]; const {verifyOrigin} = settings.authentication; const shouldVerifyOrigin = shouldVerify(verifyOrigin); @@ -58,18 +58,16 @@ const onPreResponse = server => { const getJwtToken = server => { const {settings} = server.plugins[pkg.name]; - const {cookieAuthentication, headerAuthentication, schemaOptions} = settings; + const {cookieAuthentication, headerAuthentication} = settings; return async (request, h) => { - let token; - if (request.auth && request.auth.token) { // If using hapi-auth-jwt2 allow it to take over return request.auth.token; } if (cookieAuthentication && cookieAuthentication.name) { - token = request.state[cookieAuthentication.name]; + return request.state[cookieAuthentication.name]; } if (headerAuthentication) { @@ -77,18 +75,7 @@ const getJwtToken = server => { const header = request.headers[headerName.toLowerCase()]; if (header && header.startsWith(tokenType)) { const tokenTypeLength = tokenType.length; - token = header.substr(tokenTypeLength).trim(); - } - } - - if (token) { - const {jwtSecret} = schemaOptions || {}; - - try { - await jwtVerify(token, jwtSecret); - return token; - } catch (error) { - throw Boom.badRequest(error); + return header.substr(tokenTypeLength).trim(); } } @@ -124,7 +111,7 @@ const handler = server => { }; module.exports = { - onPostAuth, + onPreAuth, onPreResponse, getJwtToken, handler diff --git a/lib/routes/index.js b/lib/routes/index.js index 8675af4..1a8ab61 100644 --- a/lib/routes/index.js +++ b/lib/routes/index.js @@ -1,6 +1,6 @@ const Boom = require('boom'); const { - onPostAuth, + onPreAuth, onPreResponse, getJwtToken, handler @@ -20,7 +20,7 @@ const register = server => { if (authentication.verifyOrigin !== 'never') { ext.onPostAuth = { - method: onPostAuth(server) + method: onPreAuth(server) }; } @@ -32,7 +32,8 @@ const register = server => { const pre = routeOptions.pre || []; - pre.push({ + // Place first, in case user functions require + pre.unshift({ assign: 'jwtToken', method: getJwtToken(server) }); diff --git a/package-lock.json b/package-lock.json index 3dc3f1c..f04fa21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2126,6 +2126,23 @@ "eslint-plugin-react": "7.7.0" } }, + "eslint-config-prettier": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz", + "integrity": "sha512-ag8YEyBXsm3nmOv1Hz991VtNNDMRa+MNy8cY47Pl4bw6iuzqKbJajXdqUpiw13STdLLrznxgm1hj9NhxeOYq0A==", + "dev": true, + "requires": { + "get-stdin": "5.0.1" + }, + "dependencies": { + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + } + } + }, "eslint-config-xo": { "version": "0.20.1", "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.20.1.tgz", @@ -2245,6 +2262,16 @@ } } }, + "eslint-plugin-prettier": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz", + "integrity": "sha512-floiaI4F7hRkTrFe8V2ItOK97QYrX75DjmdzmVITZoAP6Cn06oEDPQRsO6MlHEP/u2SxI3xQ52Kpjw6j5WGfeQ==", + "dev": true, + "requires": { + "fast-diff": "1.1.2", + "jest-docblock": "21.2.0" + } + }, "eslint-plugin-react": { "version": "7.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz", @@ -4286,6 +4313,12 @@ "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" }, + "jest-docblock": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", + "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", + "dev": true + }, "joi": { "version": "13.1.2", "resolved": "https://registry.npmjs.org/joi/-/joi-13.1.2.tgz", @@ -5498,6 +5531,12 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, + "prettier": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.0.tgz", + "integrity": "sha512-Wz0SMncgaglBzDcohH3ZIAi4nVpzOIEweFzCOmgVEoRSeO72b4dcKGfgxoRGVMaFlh1r7dlVaJ+f3CIHfeH6xg==", + "dev": true + }, "pretty-ms": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-3.1.0.tgz", diff --git a/package.json b/package.json index 5541d03..58b4ba5 100644 --- a/package.json +++ b/package.json @@ -45,11 +45,14 @@ "dotenv": "^5.0.1", "eslint": "^4.19.1", "eslint-config-parsley": "^1.2.1", + "eslint-config-prettier": "^2.9.0", "eslint-plugin-filenames": "^1.2.0", "eslint-plugin-import": "^2.7.0", + "eslint-plugin-prettier": "^2.6.0", "hapi": "^17.2.3", "pg": "^7.4.1", - "pg-native": "^2.2.0" + "pg-native": "^2.2.0", + "prettier": "^1.12.0" }, "peerDependencies": { "hapi": "^17.0.0",