Created
July 17, 2018 09:39
-
-
Save shishirsharma/be5f086aa4e7ff5d8b0ace64d9a4429a to your computer and use it in GitHub Desktop.
Swagger UI middleware upgrade latest version
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
var debug = require('debug')('botkit:register_with_swagger_express'); | |
var SwaggerExpress = require('swagger-express-mw'); | |
var SwaggerUi = require('swagger-tools/middleware/swagger-ui'); | |
// var ejwt = require('express-jwt'); | |
// // Initialize express-jwt | |
// var jwt = ejwt({ | |
// secret: "bla bla blackship" //new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64'), | |
// // audience: process.env.AUTH0_CLIENT_ID | |
// }); | |
var jwt = require('jsonwebtoken'); | |
let main_config = require('./../../config'); | |
const path = require("path"); | |
const fs = require('fs'); | |
module.exports = function(webserver, controller) { | |
var config = { | |
host: main_config.server.apiBaseEndpoint, | |
appRoot: __dirname + '../..', // required config | |
swaggerFile: __dirname + '../../../swagger/swagger.yaml', | |
swaggerSecurityHandlers: { | |
ApiKeyAuth: function(req, authOrSecDef, scopesOrApiKey, cb) { | |
var token = req.headers['x-api-key']; | |
let public_key = fs.readFileSync(__dirname + '/../../config/public_key.pem'); | |
jwt.verify(token, public_key, function(err, decoded){ | |
if(!err){ | |
let userId = decoded.userId; | |
let teamId = decoded.teamId; | |
req.user = {userId, teamId}; | |
return cb(null); | |
// req.res.json(secrets); | |
} else { | |
return cb(new Error('access denied - user does not exist in auth')); | |
// req.res.send(err); | |
} | |
}); | |
// jwt(req, req.res, function(err) { | |
// if (req.user == undefined) { | |
// return cb(new Error('access denied - user does not exist in auth0')); | |
// } | |
// else { | |
// console.log(req.user); // Contains { iss: 'https://xxx.auth0.com/', sub: 'auth0|xxx', ... } | |
// return cb(null); | |
// } | |
// }); | |
} | |
} | |
}; | |
SwaggerExpress.create(config, function(err, swaggerExpress) { | |
if (err) { throw err; } | |
// Add swagger-ui (This must be before swaggerExpress.register) | |
// let apiDeclarations = swaggerExpress.runner.swagger; | |
// apiDeclarations.swaggerUiDir = path.join(__dirname, '..', '..', 'node_modules', 'swagger-ui-dist'); | |
// let options = { | |
// apiDocs: "/api-docs", | |
// swaggerUi: "/docs", | |
// swaggerUiDir: path.join(__dirname, '..', '..', 'node_modules', 'swagger-ui-dist') | |
// } | |
// webserver.use(SwaggerUi(swaggerExpress.runner.swagger)); | |
// install middleware | |
swaggerExpress.register(webserver); | |
// webserver.use(SwaggerUi(swaggerExpress.runner.swagger)); | |
var port = process.env.PORT || 8080; | |
// app.listen(port); | |
if (swaggerExpress.runner.swagger.paths['/hello']) { | |
console.log('try this:\ncurl http://127.0.0.1:' + port + '/hello?name=Scott'); | |
} | |
}); | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
var fs = require('fs'); | |
var path = require('path'); | |
var serveStatic = require('serve-static'); | |
var yaml = require('js-yaml'); | |
var SWAGGER_UI_PATH = '/docs'; | |
var SWAGGER_UI_FILES = __dirname + '/./../../node_modules/swagger-ui-dist'; | |
var indexHtml = fs.readFileSync(path.join(SWAGGER_UI_FILES, 'index.html'), 'utf-8'); | |
var swaggerJson = yaml.safeLoad(fs.readFileSync(__dirname + '/./../../swagger/swagger.yaml', 'utf-8')); | |
// put relative path for loading url in swagger-ui index.html | |
indexHtml = indexHtml.replace( | |
'url: "https://petstore.swagger.io/v2/swagger.json"', | |
'url: "/api-docs"' | |
); | |
module.exports = function(webserver, controller) { | |
// --------------------------- SwaggerUI ------------------------------------- | |
webserver.get("/api-docs/", function(req, res){ | |
res.send(swaggerJson); //return swagger json | |
}); | |
// serve the modified index.html for swagger ui | |
webserver.get(SWAGGER_UI_PATH, function(req, res) { | |
res.setHeader('content-type', 'text/html'); | |
res.send(indexHtml); | |
}); | |
// serve the static assets for swagger ui | |
webserver.use(SWAGGER_UI_PATH, serveStatic(SWAGGER_UI_FILES)); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment