From e1c79a60b9131d0e5ea717bcad96059ad4448ddd Mon Sep 17 00:00:00 2001 From: Eric LaForce Date: Fri, 3 Dec 2021 09:12:26 -0500 Subject: [PATCH] fix(express): fixed express exports --- .../authentication/regular-web-app/app.js | 7 +- .../lib/middleware/hasteStrategy.js | 31 -- .../lib/middleware/hasteUserInViews.js | 15 - .../regular-web-app/package-lock.json | 425 ++++++++++++++++++ .../regular-web-app/package.json | 1 + .../regular-web-app/routes/hasteAuthRoutes.js | 68 --- package-lock.json | 201 ++++++++- packages/haste-express/lib/hasteAuthRoutes.js | 5 +- packages/haste-express/lib/hasteStrategy.js | 2 +- .../haste-express/lib/hasteUserInViews.js | 4 +- packages/haste-express/lib/index.js | 6 +- packages/haste-express/package.json | 7 +- 12 files changed, 638 insertions(+), 134 deletions(-) delete mode 100644 examples/authentication/regular-web-app/lib/middleware/hasteStrategy.js delete mode 100644 examples/authentication/regular-web-app/lib/middleware/hasteUserInViews.js delete mode 100644 examples/authentication/regular-web-app/routes/hasteAuthRoutes.js diff --git a/examples/authentication/regular-web-app/app.js b/examples/authentication/regular-web-app/app.js index 188e84d..4a234ac 100644 --- a/examples/authentication/regular-web-app/app.js +++ b/examples/authentication/regular-web-app/app.js @@ -15,9 +15,7 @@ import cookieParser from 'cookie-parser'; import indexRouter from './routes/index.js'; import usersRouter from './routes/user.js'; -import hasteAuthRouter from './routes/hasteAuthRoutes.js'; -import hasteUserInViews from './lib/middleware/hasteUserInViews.js'; -import HasteStrategy from './lib/middleware/hasteStrategy.js'; +import { hasteAuthRoutes, hasteUserInViews, HasteStrategy } from '@hastearcade/haste-express'; config(); @@ -32,7 +30,6 @@ passport.deserializeUser(function (user, done) { done(null, user); }); -// config express-session const sess = { secret: 'shhhh', // this would change in a real application resave: false, @@ -57,7 +54,7 @@ app.use(urlencoded({ extended: false })); app.use(stc(join('.', 'public'))); app.use(hasteUserInViews()); -app.use('/', hasteAuthRouter); +app.use('/', hasteAuthRoutes); app.use('/', indexRouter); app.use('/', usersRouter); diff --git a/examples/authentication/regular-web-app/lib/middleware/hasteStrategy.js b/examples/authentication/regular-web-app/lib/middleware/hasteStrategy.js deleted file mode 100644 index aacd107..0000000 --- a/examples/authentication/regular-web-app/lib/middleware/hasteStrategy.js +++ /dev/null @@ -1,31 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable @typescript-eslint/no-unsafe-call */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import Auth0Strategy from 'passport-auth0'; - -class HasteStrategy { - static initialize(options, verify) { - if (!options) { - options = { - domain: process.env.AUTH0_DOMAIN, - clientID: process.env.AUTH0_CLIENT_ID, - clientSecret: process.env.AUTH0_CLIENT_SECRET, - callbackURL: process.env.AUTH0_CALLBACK_URL || 'http://localhost:3002/', - }; - } - - if (!verify) { - verify = function (accessToken, refreshToken, extraParams, profile, done) { - // accessToken is the token to call Auth0 API (not needed in the most cases) - // extraParams.id_token has the JSON Web Token - // profile has all the information from the user - return done(null, profile); - }; - } - return new Auth0Strategy(options, verify); - } -} - -export default HasteStrategy; diff --git a/examples/authentication/regular-web-app/lib/middleware/hasteUserInViews.js b/examples/authentication/regular-web-app/lib/middleware/hasteUserInViews.js deleted file mode 100644 index 465e584..0000000 --- a/examples/authentication/regular-web-app/lib/middleware/hasteUserInViews.js +++ /dev/null @@ -1,15 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-call */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ - -export default function () { - return function (req, res, next) { - if (req.user && req.user._json) { - res.locals.user = { - displayName: req.user._json['https://hastearcade.com/displayName'], - picture: req.user.picture, - }; - } - next(); - }; -} diff --git a/examples/authentication/regular-web-app/package-lock.json b/examples/authentication/regular-web-app/package-lock.json index 10e278a..7031beb 100644 --- a/examples/authentication/regular-web-app/package-lock.json +++ b/examples/authentication/regular-web-app/package-lock.json @@ -8,6 +8,7 @@ "name": "haste-regular-web-app-auth-example", "version": "0.0.0", "dependencies": { + "@hastearcade/haste-express": "^1.0.0", "cookie-parser": "~1.4.4", "debug": "~2.6.9", "dotenv": "^10.0.0", @@ -21,6 +22,233 @@ "serve-favicon": "^2.5.0" } }, + "node_modules/@hastearcade/haste-express": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@hastearcade/haste-express/-/haste-express-1.0.0.tgz", + "integrity": "sha512-akH0N5BSuJg7dVZryYKlyS0yddtrSgSu7fyYvy4aQfF40bh2Kxb0nYsd0sIJ6bBb+dWQhG9EQbt+GRhUGDzZmg==", + "dependencies": { + "dotenv": "^10.0.0", + "express": "^4.17.1" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node_modules/@hastearcade/haste-express/node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@hastearcade/haste-express/node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/@hastearcade/haste-express/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -991,6 +1219,14 @@ "node": ">= 0.6" } }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/transformers": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", @@ -1182,6 +1418,190 @@ } }, "dependencies": { + "@hastearcade/haste-express": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@hastearcade/haste-express/-/haste-express-1.0.0.tgz", + "integrity": "sha512-akH0N5BSuJg7dVZryYKlyS0yddtrSgSu7fyYvy4aQfF40bh2Kxb0nYsd0sIJ6bBb+dWQhG9EQbt+GRhUGDzZmg==", + "requires": { + "dotenv": "^10.0.0", + "express": "^4.17.1" + }, + "dependencies": { + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } + } + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -1920,6 +2340,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "transformers": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", diff --git a/examples/authentication/regular-web-app/package.json b/examples/authentication/regular-web-app/package.json index 95c6b49..e6c0e3b 100644 --- a/examples/authentication/regular-web-app/package.json +++ b/examples/authentication/regular-web-app/package.json @@ -6,6 +6,7 @@ "start": "node ./bin/www.js" }, "dependencies": { + "@hastearcade/haste-express": "^1.0.0", "cookie-parser": "~1.4.4", "debug": "~2.6.9", "dotenv": "^10.0.0", diff --git a/examples/authentication/regular-web-app/routes/hasteAuthRoutes.js b/examples/authentication/regular-web-app/routes/hasteAuthRoutes.js deleted file mode 100644 index edd50c2..0000000 --- a/examples/authentication/regular-web-app/routes/hasteAuthRoutes.js +++ /dev/null @@ -1,68 +0,0 @@ -/* eslint-disable @typescript-eslint/restrict-plus-operands */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable @typescript-eslint/no-unused-vars */ -/* eslint-disable @typescript-eslint/no-unsafe-call */ -import { Router } from 'express'; -import passport from 'passport'; -import { config } from 'dotenv'; -import { format } from 'util'; -import { URL } from 'url'; -import { stringify } from 'querystring'; - -const router = Router(); -config(); - -router.get( - '/login', - passport.authenticate('auth0', { - connection: 'Haste-Authorization', - scope: 'openid email profile offline_access', - }), - function (req, res) { - res.redirect('/'); - }, -); - -// Perform the final stage of authentication and redirect to previously requested URL or '/user' -router.get('/callback', function (req, res, next) { - passport.authenticate('auth0', function (err, user, info) { - if (err) { - return next(err); - } - if (!user) { - return res.redirect('/login'); - } - req.logIn(user, function (err) { - if (err) { - return next(err); - } - const returnTo = req.session.returnTo; - delete req.session.returnTo; - res.redirect(returnTo || '/user'); - }); - })(req, res, next); -}); - -// Perform session logout and redirect to homepage -router.get('/logout', (req, res) => { - req.logout(); - - let returnTo = req.protocol + '://' + req.hostname; - const port = req.connection.localPort; - if (port !== undefined && port !== 80 && port !== 443) { - returnTo += ':' + port; - } - - const logoutURL = new URL(format('https://%s/v2/logout', process.env.AUTH0_DOMAIN)); - const searchString = stringify({ - client_id: process.env.AUTH0_CLIENT_ID, - returnTo: returnTo, - }); - - logoutURL.search = searchString; - - res.redirect(logoutURL); -}); - -export default router; diff --git a/package-lock.json b/package-lock.json index 6c8a0dd..3afc2d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3103,10 +3103,11 @@ } }, "node_modules/axios": { - "version": "0.21.1", - "license": "MIT", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dependencies": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" } }, "node_modules/babel-jest": { @@ -3346,6 +3347,14 @@ "node": "^4.5.0 || >= 5.9" } }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/batch": { "version": "0.6.1", "dev": true, @@ -15299,6 +15308,11 @@ "dev": true, "license": "MIT" }, + "node_modules/oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" + }, "node_modules/object-assign": { "version": "4.1.1", "license": "MIT", @@ -15780,6 +15794,88 @@ "node": ">=0.10.0" } }, + "node_modules/passport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.0.tgz", + "integrity": "sha512-ln+ue5YaNDS+fes6O5PCzXKSseY5u8MYhX9H5Co4s+HfYI5oqvnHKoOORLYDUPh+8tHvrxugF2GFcUA1Q1Gqfg==", + "dependencies": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-auth0": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/passport-auth0/-/passport-auth0-1.4.1.tgz", + "integrity": "sha512-CRGGZuwghLCjvnfawMs6FvPrSO9wu3wrbi2eDtxLHoM7lHpUy+dmBKOwzSgV18wDKV6fgq5EK8ykupkRs4s7VQ==", + "dependencies": { + "axios": "^0.21.4", + "passport-oauth": "^1.0.0", + "passport-oauth2": "^1.6.0" + } + }, + "node_modules/passport-oauth": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-oauth/-/passport-oauth-1.0.0.tgz", + "integrity": "sha1-kK/2M4dUDwIImvKM2tOep/gNd98=", + "dependencies": { + "passport-oauth1": "1.x.x", + "passport-oauth2": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-oauth1": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/passport-oauth1/-/passport-oauth1-1.2.0.tgz", + "integrity": "sha512-Sv2YWodC6jN12M/OXwmR4BIXeeIHjjbwYTQw4kS6tHK4zYzSEpxBgSJJnknBjICA5cj0ju3FSnG1XmHgIhYnLg==", + "dependencies": { + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "utils-merge": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-oauth2": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", + "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", + "dependencies": { + "base64url": "3.x.x", + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/path": { "version": "0.12.7", "license": "MIT", @@ -15839,6 +15935,11 @@ "node": ">=8" } }, + "node_modules/pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, "node_modules/pause-stream": { "version": "0.0.11", "dev": true, @@ -19561,6 +19662,11 @@ "node": ">=0.8.0" } }, + "node_modules/uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" + }, "node_modules/unbox-primitive": { "version": "1.0.1", "dev": true, @@ -21253,7 +21359,9 @@ "license": "MIT", "dependencies": { "dotenv": "^10.0.0", - "express": "^4.17.1" + "express": "^4.17.1", + "passport": "^0.5.0", + "passport-auth0": "^1.4.1" }, "devDependencies": { "@semantic-release/git": "^9.0.0" @@ -22070,7 +22178,9 @@ "requires": { "@semantic-release/git": "^9.0.0", "dotenv": "^10.0.0", - "express": "^4.17.1" + "express": "^4.17.1", + "passport": "*", + "passport-auth0": "^1.4.1" } }, "@hastearcade/haste-game-client": { @@ -23876,9 +23986,11 @@ "dev": true }, "axios": { - "version": "0.21.1", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "requires": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" } }, "babel-jest": { @@ -24049,6 +24161,11 @@ "base64id": { "version": "2.0.0" }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, "batch": { "version": "0.6.1", "dev": true @@ -32010,6 +32127,11 @@ "version": "2.2.0", "dev": true }, + "oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" + }, "object-assign": { "version": "4.1.1" }, @@ -32318,6 +32440,61 @@ "version": "0.1.1", "dev": true }, + "passport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.0.tgz", + "integrity": "sha512-ln+ue5YaNDS+fes6O5PCzXKSseY5u8MYhX9H5Co4s+HfYI5oqvnHKoOORLYDUPh+8tHvrxugF2GFcUA1Q1Gqfg==", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + } + }, + "passport-auth0": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/passport-auth0/-/passport-auth0-1.4.1.tgz", + "integrity": "sha512-CRGGZuwghLCjvnfawMs6FvPrSO9wu3wrbi2eDtxLHoM7lHpUy+dmBKOwzSgV18wDKV6fgq5EK8ykupkRs4s7VQ==", + "requires": { + "axios": "^0.21.4", + "passport-oauth": "^1.0.0", + "passport-oauth2": "^1.6.0" + } + }, + "passport-oauth": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-oauth/-/passport-oauth-1.0.0.tgz", + "integrity": "sha1-kK/2M4dUDwIImvKM2tOep/gNd98=", + "requires": { + "passport-oauth1": "1.x.x", + "passport-oauth2": "1.x.x" + } + }, + "passport-oauth1": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/passport-oauth1/-/passport-oauth1-1.2.0.tgz", + "integrity": "sha512-Sv2YWodC6jN12M/OXwmR4BIXeeIHjjbwYTQw4kS6tHK4zYzSEpxBgSJJnknBjICA5cj0ju3FSnG1XmHgIhYnLg==", + "requires": { + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "utils-merge": "1.x.x" + } + }, + "passport-oauth2": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", + "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", + "requires": { + "base64url": "3.x.x", + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, "path": { "version": "0.12.7", "requires": { @@ -32356,6 +32533,11 @@ "version": "4.0.0", "dev": true }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, "pause-stream": { "version": "0.0.11", "dev": true, @@ -34804,6 +34986,11 @@ "dev": true, "optional": true }, + "uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" + }, "unbox-primitive": { "version": "1.0.1", "dev": true, diff --git a/packages/haste-express/lib/hasteAuthRoutes.js b/packages/haste-express/lib/hasteAuthRoutes.js index edd50c2..2a697ff 100644 --- a/packages/haste-express/lib/hasteAuthRoutes.js +++ b/packages/haste-express/lib/hasteAuthRoutes.js @@ -9,10 +9,13 @@ import { config } from 'dotenv'; import { format } from 'util'; import { URL } from 'url'; import { stringify } from 'querystring'; +import { HasteStrategy } from './hasteStrategy.js'; const router = Router(); config(); +passport.use(HasteStrategy.initialize()); + router.get( '/login', passport.authenticate('auth0', { @@ -65,4 +68,4 @@ router.get('/logout', (req, res) => { res.redirect(logoutURL); }); -export default router; +export { router as hasteAuthRoutes }; diff --git a/packages/haste-express/lib/hasteStrategy.js b/packages/haste-express/lib/hasteStrategy.js index aacd107..5b68c7d 100644 --- a/packages/haste-express/lib/hasteStrategy.js +++ b/packages/haste-express/lib/hasteStrategy.js @@ -28,4 +28,4 @@ class HasteStrategy { } } -export default HasteStrategy; +export { HasteStrategy }; diff --git a/packages/haste-express/lib/hasteUserInViews.js b/packages/haste-express/lib/hasteUserInViews.js index 465e584..3f57bfe 100644 --- a/packages/haste-express/lib/hasteUserInViews.js +++ b/packages/haste-express/lib/hasteUserInViews.js @@ -2,7 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -export default function () { +function hasteUserInViews() { return function (req, res, next) { if (req.user && req.user._json) { res.locals.user = { @@ -13,3 +13,5 @@ export default function () { next(); }; } + +export { hasteUserInViews }; diff --git a/packages/haste-express/lib/index.js b/packages/haste-express/lib/index.js index b6119d2..0d7bc90 100644 --- a/packages/haste-express/lib/index.js +++ b/packages/haste-express/lib/index.js @@ -1,3 +1,3 @@ -export * as HasteStrategy from './hasteStrategy.js'; -export * as hasteAuthRoutes from './hasteAuthRoutes.js'; -export * as hasteUserInViews from './hasteUserInViews.js'; +export * from './hasteStrategy.js'; +export * from './hasteAuthRoutes.js'; +export * from './hasteUserInViews.js'; diff --git a/packages/haste-express/package.json b/packages/haste-express/package.json index 556d85a..a67b1b8 100644 --- a/packages/haste-express/package.json +++ b/packages/haste-express/package.json @@ -27,7 +27,9 @@ }, "dependencies": { "dotenv": "^10.0.0", - "express": "^4.17.1" + "express": "^4.17.1", + "passport": "^0.5.0", + "passport-auth0": "^1.4.1" }, "keywords": [ "haste", @@ -42,5 +44,6 @@ }, "publishConfig": { "access": "public" - } + }, + "type": "module" }