From 17fb4e82038b5a551365671178644b1139dbf1c1 Mon Sep 17 00:00:00 2001 From: Dan Kelly Date: Tue, 19 Oct 2021 13:27:47 +0100 Subject: [PATCH] Update Hapi.js demo server.js The current Hapi.js demo is written for Hapi.js 13.5 and is no longer fit for purpose for the newer versions of Hapi (post version 17) This version implements the same example, but using Hapi 20.2 --- examples/hapi-demo/server.js | 75 ++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 41 deletions(-) diff --git a/examples/hapi-demo/server.js b/examples/hapi-demo/server.js index 8bdb42c..6cb2a9f 100644 --- a/examples/hapi-demo/server.js +++ b/examples/hapi-demo/server.js @@ -1,45 +1,48 @@ -const Hapi = require('hapi'); -const good = require('good'); +const Hapi = require('@hapi/hapi'); const jwt = require('hapi-auth-jwt2'); -const logger = require('debug')('hapi'); -const jwksRsa = require('../../src'); +const jwksRsa = require('jwks-rsa'); const jwksHost = process.env.JWKS_HOST; const audience = process.env.AUDIENCE; const issuer = process.env.ISSUER; // Fake validation, accept any authenticated user. -const validateUser = (decoded, request, callback) => { - logger('Validating user:', decoded); - +const validateUser = async (decoded) => { + console.log(decoded); if (decoded && decoded.sub) { - return callback(null, true); + return { + isValid: true + } + } else { + return { + isValid: false + } } - - return callback(null, false); }; -// Start the server. -const server = new Hapi.Server({ debug: { log: [ 'error' ] } }); -server.connection({ port: 4001 }); -server.register(jwt, (err) => { - if (err) { - logger(err); - } - +const init = async () => { + // eslint-disable-next-line new-cap + const server = new Hapi.server({ + port: 4001, + host: 'localhost' + }); + await server.register(jwt); + // jwks-rsa strategy server.auth.strategy('jwt', 'jwt', { complete: true, - key: jwksRsa.hapiJwt2Key({ + headerKey: 'authorization', + tokenType: 'Bearer', + key: jwksRsa.hapiJwt2KeyAsync({ cache: true, rateLimit: true, jwksRequestsPerMinute: 2, jwksUri: `${jwksHost}/.well-known/jwks.json` }), - validateFunc: validateUser, + validate: validateUser, verifyOptions: { audience: audience, issuer: issuer, - algorithms: [ 'RS256' ] + algorithms: ['RS256'] } }); server.auth.default('jwt'); @@ -49,30 +52,20 @@ server.register(jwt, (err) => { method: 'GET', path: '/me', config: { auth: 'jwt' }, - handler: (request, reply) => { + handler: (request, h) => { // This is the user object - reply(request.auth.credentials); + return (request.auth.credentials) } } ]); -}); - -// Logging. -const options = { - reporters: { - console: [ - { module: 'good-console' }, - 'stdout' - ] - } + await server.start(); + return server; }; -server.register({ register: good, options }, (err) => { - if (err) { - return logger(err); - } - - server.start(() => { - logger('Server running at:', server.info.uri); +init() + .then(server => { + console.log(`Server running at: ${server.info.uri}`); + }) + .catch(err => { + console.error(err); }); -});