1 | 'use strict'
|
2 |
|
3 | const path = require('path')
|
4 | const security = require('./routeSecurity')
|
5 | const routeBuilder = require('./routeBuilder')
|
6 | const assert = require('assert')
|
7 |
|
8 | exports.registerRoutes = registerRoutes
|
9 |
|
10 | function registerRoutes(app, operations, options) {
|
11 | registerOperationRoutes(app, operations, options)
|
12 | registerDocsRoute(app, options)
|
13 | return app
|
14 | }
|
15 |
|
16 | function registerOperationRoutes(app, operations, options) {
|
17 | const authorizers = security.getAuthorizers(options.api.securityDefinitions, options)
|
18 | operations.forEach(operation => {
|
19 | const opPath = operation.fullPath.replace(/{([^}]+)}/g, ':$1')
|
20 | const stack = routeBuilder.buildHandlerStack(operation, authorizers, options)
|
21 | assert.ok(stack.length > 1, `Missing operation handler for '${operation.id}'`)
|
22 | getHttpMethod(app, operation).apply(app, [ opPath ].concat(stack))
|
23 | })
|
24 | }
|
25 |
|
26 | function getHttpMethod(app, operation) {
|
27 | const method = operation.method
|
28 | let func = app[method]
|
29 | if (func) return func
|
30 | else if (method === 'delete') return app['del']
|
31 | else return null
|
32 | }
|
33 |
|
34 | function registerDocsRoute(app, options) {
|
35 | const docsPath = path.normalize(`/${options.api.basePath}/${options.docsPath}`)
|
36 | app.get(docsPath, function handler(req, res) { res.json(options.api) })
|
37 | }
|