Skip to content

Commit 7c7f53d

Browse files
authored
Merge pull request #12 from zxan1285/v2
KEY-810: Modernize auth0-authentication-api-debugger build process
2 parents d96ecb2 + 257a636 commit 7c7f53d

File tree

14 files changed

+223
-155
lines changed

14 files changed

+223
-155
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,7 @@ build/Release
3030
node_modules
3131

3232
.DS_Store
33+
.idea
34+
dist
3335

3436
npm-debug.log

index.js

Lines changed: 54 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,55 @@
11
const path = require('path');
2-
const cors = require('cors');
3-
const crypto = require('crypto');
4-
const express = require('express')
5-
const bodyParser = require('body-parser')
6-
const handlebars = require('handlebars');
7-
const Webtask = require('webtask-tools');
8-
const expressTools = require('auth0-extension-express-tools');
9-
const middlewares = require('auth0-extension-express-tools').middlewares;
10-
const auth0 = require('auth0-oauth2-express@1.2.0');
11-
const tools = require('auth0-extension-tools');
12-
var _ = require('lodash');
13-
var config = require('auth0-extension-tools').config();
14-
const dashboardAdmins = require('./middleware/dashboardAdmins.js');
15-
16-
var metadata = require('./webtask.json');
17-
var ManagementClient = require('auth0').ManagementClient;
18-
19-
module.exports = function (configProvider, storageProvider) {
20-
const utils = require('./lib/utils');
21-
const index = handlebars.compile(require('./views/index'));
22-
const partial = handlebars.compile(require('./views/partial'));
23-
24-
config.setProvider(configProvider);
25-
26-
const app = express();
27-
app.use(bodyParser.json());
28-
app.use(bodyParser.urlencoded({ extended: false }));
29-
30-
app.use(require('./middleware/develop.js'));
31-
32-
app.use(dashboardAdmins(config('AUTH0_DOMAIN'), 'Authentication API Debugger Extension', config('AUTH0_RTA')));
33-
34-
app.get('/pkce', function (req, res) {
35-
const verifier = utils.base64url(crypto.randomBytes(32));
36-
return res.json({
37-
verifier: verifier,
38-
verifier_challenge: utils.base64url(crypto.createHash('sha256').update(verifier).digest())
39-
})
40-
});
41-
42-
app.get('/hash', function (req, res) {
43-
res.send(partial({
44-
hash: utils.syntaxHighlight(req.query),
45-
id_token: utils.jwt(req.query && req.query.id_token),
46-
access_token: utils.jwt(req.query && req.query.access_token)
47-
}));
48-
});
49-
50-
app.post('/request', function (req, res) {
51-
const request = req.body.request;
52-
delete req.body.request;
53-
res.send(partial({
54-
request: utils.syntaxHighlight(request),
55-
response: utils.syntaxHighlight(req.body),
56-
id_token: utils.jwt(req.body && req.body.id_token),
57-
access_token: utils.jwt(req.body && req.body.access_token)
58-
}));
59-
});
60-
61-
app.get('/meta', cors(), function (req, res) {
62-
res.status(200).send(metadata);
63-
});
64-
65-
const renderIndex = function (req, res) {
66-
const headers = req.headers;
67-
delete headers['x-wt-params'];
68-
69-
res.send(index({
70-
method: req.method,
71-
domain: req.webtaskContext.data.AUTH0_DOMAIN,
72-
baseUrl: expressTools.urlHelpers.getBaseUrl(req).replace('http://', 'https://'),
73-
headers: utils.syntaxHighlight(req.headers),
74-
body: utils.syntaxHighlight(req.body),
75-
query: utils.syntaxHighlight(req.query),
76-
authorization_code: req.query && req.query.code,
77-
samlResponse: utils.samlResponse(req.body && req.body.SAMLResponse),
78-
wsFedResult: utils.wsFedResult(req.body && req.body.wresult),
79-
id_token: utils.jwt(req.body && req.body.id_token),
80-
access_token: utils.jwt(req.body && req.body.access_token)
81-
}));
82-
};
83-
84-
app.get('*', renderIndex);
85-
app.post('*', renderIndex);
86-
87-
return app;
88-
}
2+
const nconf = require('nconf');
3+
const logger = require('./server/lib/logger');
4+
5+
// eslint-disable-next-line import/no-extraneous-dependencies
6+
require('@babel/register')({
7+
ignore: [ /node_modules/ ],
8+
sourceMaps: !(process.env.NODE_ENV === 'production'),
9+
plugins: [
10+
'@babel/plugin-proposal-export-default-from',
11+
'@babel/plugin-proposal-object-rest-spread'
12+
],
13+
presets: [
14+
[ '@babel/env', {
15+
targets: {
16+
node: 'current'
17+
}
18+
} ]
19+
]
20+
});
21+
// eslint-disable-next-line import/no-extraneous-dependencies
22+
require('@babel/polyfill');
23+
24+
// Handle uncaught.
25+
process.on('uncaughtException', (err) => {
26+
logger.error(err);
27+
});
28+
29+
// Initialize configuration.
30+
nconf
31+
.argv()
32+
.env()
33+
.file(path.join(__dirname, './server/config.json'))
34+
.defaults({
35+
NODE_ENV: 'development',
36+
HOSTING_ENV: 'default',
37+
PORT: 3000,
38+
AUTH0_RTA: 'auth0.auth0.com',
39+
AUTH0_DOMAIN: 'xan-test3.eu.auth0.com',
40+
EXTENSION_SECRET: 'secret',
41+
WT_URL: 'http://localhost:3000',
42+
PUBLIC_WT_URL: 'https://49ddb5d2.ngrok.io'
43+
});
44+
45+
// Start the server.
46+
const app = require('./server')((key) => nconf.get(key), null);
47+
const port = nconf.get('PORT');
48+
49+
app.listen(port, (error) => {
50+
if (error) {
51+
logger.error(error);
52+
} else {
53+
logger.info(`Listening on http://localhost:${port}.`);
54+
}
55+
});

middleware/dashboardAdmins.js

Lines changed: 0 additions & 31 deletions
This file was deleted.

package.json

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,40 @@
11
{
22
"name": "auth0-authentication-api-debugger-extension",
3-
"version": "1.1.3",
3+
"version": "2.0.0",
44
"description": "My extension for ..",
55
"main": "index.js",
66
"scripts": {
7-
"start": "wt-bundle server.js -o ./build/bundle.js && node ./build/bundle.js",
8-
"bundle": "wt-bundle webtask.js -m -o ./build/bundle.js"
7+
"build": "npm run clean && npm run extension:build",
8+
"clean": "rimraf dist",
9+
"extension:build": "a0-ext build:server ./webtask.js ./dist",
10+
"serve:dev": "node index.js"
911
},
1012
"keywords": [
1113
"auth0",
1214
"extension"
1315
],
14-
"author": "",
16+
"author": "Auth0",
1517
"license": "MIT",
18+
"auth0-extension": {
19+
"externals": [
20+
"auth0-extension-tools@1.3.2",
21+
"auth0-extension-express-tools@1.1.6",
22+
"cors",
23+
"express@4.12.4",
24+
"handlebars",
25+
"lodash@4.8.2",
26+
"winston@1.0.0",
27+
"jsonwebtoken@7.1.9",
28+
"body-parser@1.12.4",
29+
"webtask-tools"
30+
],
31+
"excluded": [
32+
"express-conditional-middleware"
33+
]
34+
},
1635
"dependencies": {
17-
"auth0-extension-express-tools": "^0.6.0",
18-
"auth0-extension-tools": "^0.14.0",
19-
"auth0-oauth2-express": "^1.1.10",
36+
"auth0-extension-express-tools": "^1.1.9",
37+
"auth0-extension-tools": "^1.3.3",
2038
"body-parser": "^1.15.2",
2139
"cors": "2.8.1",
2240
"crypto": "^0.0.3",
@@ -26,10 +44,11 @@
2644
"jsonwebtoken": "^7.1.9",
2745
"lodash": "^4.16.4",
2846
"nconf": "^0.8.4",
29-
"webtask-tools": "^3.1.0"
47+
"webtask-tools": "^3.1.0",
48+
"winston": "^2.2.0"
3049
},
3150
"devDependencies": {
3251
"nodemon": "^1.11.0",
33-
"webtask-bundle": "^2.1.1"
52+
"auth0-extensions-cli": "^1.3.1"
3453
}
3554
}

server.js

Lines changed: 0 additions & 16 deletions
This file was deleted.

server/index.js

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
const cors = require('cors');
2+
const crypto = require('crypto');
3+
const Express = require('express');
4+
const bodyParser = require('body-parser');
5+
const handlebars = require('handlebars');
6+
const { middlewares, routes, urlHelpers } = require('auth0-extension-express-tools');
7+
8+
const config = require('./lib/config');
9+
const utils = require('./lib/utils');
10+
const metadata = require('../webtask.json');
11+
12+
module.exports = (configProvider) => {
13+
config.setProvider(configProvider);
14+
15+
const index = handlebars.compile(require('./views'));
16+
const partial = handlebars.compile(require('./views/partial'));
17+
const app = new Express();
18+
19+
const adminsOnly = middlewares.authenticateAdmins({
20+
credentialsRequired: true,
21+
secret: config('EXTENSION_SECRET'),
22+
audience: 'urn:authentication-api-debugger',
23+
baseUrl: config('PUBLIC_WT_URL'),
24+
onLoginSuccess: (req, res, next) => {
25+
next();
26+
}
27+
});
28+
29+
app.use(bodyParser.json());
30+
app.use(bodyParser.urlencoded({ extended: false }));
31+
32+
app.use(routes.dashboardAdmins({
33+
secret: config('EXTENSION_SECRET'),
34+
audience: 'urn:authentication-api-debugger',
35+
rta: config('AUTH0_RTA').replace('https://', ''),
36+
domain: config('AUTH0_DOMAIN'),
37+
baseUrl: config('PUBLIC_WT_URL'),
38+
clientName: `Auth0 Authentication API Debugger`,
39+
sessionStorageKey: 'auth-api-debugger:apiToken',
40+
}));
41+
42+
app.get('/pkce', adminsOnly, function (req, res) {
43+
const verifier = utils.base64url(crypto.randomBytes(32));
44+
return res.json({
45+
verifier: verifier,
46+
verifier_challenge: utils.base64url(crypto.createHash('sha256').update(verifier).digest())
47+
})
48+
});
49+
50+
app.get('/hash', adminsOnly, function (req, res) {
51+
res.send(partial({
52+
hash: utils.syntaxHighlight(req.query),
53+
id_token: utils.jwt(req.query && req.query.id_token),
54+
access_token: utils.jwt(req.query && req.query.access_token)
55+
}));
56+
});
57+
58+
app.post('/request', adminsOnly, function (req, res) {
59+
const request = req.body.request;
60+
delete req.body.request;
61+
res.send(partial({
62+
request: utils.syntaxHighlight(request),
63+
response: utils.syntaxHighlight(req.body),
64+
id_token: utils.jwt(req.body && req.body.id_token),
65+
access_token: utils.jwt(req.body && req.body.access_token)
66+
}));
67+
});
68+
69+
app.get('/meta', cors(), function (req, res) {
70+
res.status(200).send(metadata);
71+
});
72+
73+
const renderIndex = function (req, res) {
74+
const headers = req.headers;
75+
delete headers['x-wt-params'];
76+
77+
res.send(index({
78+
method: req.method,
79+
domain: config('AUTH0_DOMAIN'),
80+
baseUrl: urlHelpers.getBaseUrl(req).replace('http://', 'https://'),
81+
headers: utils.syntaxHighlight(req.headers),
82+
body: utils.syntaxHighlight(req.body),
83+
query: utils.syntaxHighlight(req.query),
84+
authorization_code: req.query && req.query.code,
85+
samlResponse: utils.samlResponse(req.body && req.body.SAMLResponse),
86+
wsFedResult: utils.wsFedResult(req.body && req.body.wresult),
87+
id_token: utils.jwt(req.body && req.body.id_token),
88+
access_token: utils.jwt(req.body && req.body.access_token)
89+
}));
90+
};
91+
92+
app.get('*', renderIndex);
93+
app.post('*', renderIndex);
94+
95+
return app;
96+
};

server/lib/config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('auth0-extension-tools').config();

server/lib/logger.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const winston = require('winston');
2+
3+
winston.emitErrs = true;
4+
5+
const logger = new winston.Logger({
6+
transports: [
7+
new winston.transports.Console({
8+
timestamp: true,
9+
level: 'debug',
10+
handleExceptions: true,
11+
json: false,
12+
colorize: true
13+
})
14+
],
15+
exitOnError: false
16+
});
17+
18+
module.exports = logger;
19+
module.exports.stream = {
20+
write: (message) => {
21+
logger.info(message.replace(/\n$/, ''));
22+
}
23+
};
File renamed without changes.

0 commit comments

Comments
 (0)