Skip to content

Commit 8747d13

Browse files
author
hirsch88
committed
Add swagger ui
1 parent f9e679d commit 8747d13

File tree

7 files changed

+73
-1
lines changed

7 files changed

+73
-1
lines changed

.env.example

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,12 @@ DB_PASSWORD=""
2323
DB_DATABASE="my_database"
2424
DB_SYNCHRONIZE=true
2525
DB_LOGGING=true
26+
27+
#
28+
# Swagger
29+
#
30+
SWAGGER_ENABLED=true
31+
SWAGGER_ROUTE="/swagger"
32+
SWAGGER_FILE="api/swagger.json"
33+
SWAGGER_USERNAME="admin"
34+
SWAGGER_PASSWORD="1234"

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"cors": "^2.8.4",
6161
"dotenv": "^4.0.0",
6262
"express": "^4.16.2",
63+
"express-basic-auth": "^1.1.3",
6364
"figlet": "^1.2.0",
6465
"helmet": "^3.9.0",
6566
"lodash": "^4.17.4",
@@ -71,6 +72,7 @@
7172
"reflect-metadata": "^0.1.10",
7273
"routing-controllers": "^0.7.6",
7374
"serve-favicon": "^2.4.5",
75+
"swagger-ui-express": "^2.0.10",
7476
"trash-cli": "^1.4.0",
7577
"ts-node": "^3.3.0",
7678
"tslint": "^5.8.0",

src/app.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@ import { bootstrapMicroframework } from 'microframework';
2020
import { expressLoader } from './modules/expressLoader';
2121
import { winstonLoader } from './modules/winstonLoader';
2222
import { typeormLoader } from './modules/typeormLoader';
23+
import { swaggerLoader } from './modules/swaggerLoader';
2324

2425

2526
bootstrapMicroframework({
2627
loaders: [
2728
winstonLoader,
2829
expressLoader,
29-
typeormLoader
30+
typeormLoader,
31+
swaggerLoader
3032
// here we can setup other databases, any other lib we want to setup in our application
3133
]
3234
})

src/core/env.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1+
const pkg = require('../../package.json');
2+
13
/**
24
* Environment variables
35
*/
46
export const env = {
57
node: process.env.NODE_ENV || 'development',
68
app: {
79
name: getOsEnv('APP_NAME'),
10+
version: pkg.version,
11+
description: pkg.description,
812
host: getOsEnv('APP_HOST'),
913
port: normalizePort(process.env.PORT || '3000'),
1014
routePrefix: getOsEnv('APP_ROUTE_PREFIX')
@@ -23,6 +27,13 @@ export const env = {
2327
database: getOsEnv('DB_DATABASE'),
2428
synchronize: toBool(getOsEnv('DB_SYNCHRONIZE')),
2529
logging: toBool(getOsEnv('DB_LOGGING'))
30+
},
31+
swagger: {
32+
enabled: toBool(getOsEnv('SWAGGER_ENABLED')),
33+
route: getOsEnv('SWAGGER_ROUTE'),
34+
file: getOsEnv('SWAGGER_FILE'),
35+
username: getOsEnv('SWAGGER_USERNAME'),
36+
password: getOsEnv('SWAGGER_PASSWORD')
2637
}
2738
};
2839

src/modules/swaggerLoader.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import * as path from 'path';
2+
import * as swaggerUi from 'swagger-ui-express';
3+
import * as basicAuth from 'express-basic-auth';
4+
import { MicroframeworkSettings, MicroframeworkLoader } from 'microframework';
5+
import { env } from '../core/env';
6+
7+
8+
export const swaggerLoader: MicroframeworkLoader = (settings: MicroframeworkSettings | undefined) => {
9+
if (settings && env.swagger.enabled) {
10+
const expressApp = settings.getData('express_app');
11+
const swaggerFile = require(path.join(__dirname, '..', env.swagger.file));
12+
13+
// Add npm infos to the swagger doc
14+
swaggerFile.info = {
15+
title: env.app.name,
16+
description: env.app.description,
17+
version: env.app.version
18+
};
19+
20+
expressApp.use(
21+
env.swagger.route,
22+
basicAuth({
23+
users: {
24+
[`${env.swagger.username}`]: env.swagger.password
25+
},
26+
challenge: true
27+
}),
28+
swaggerUi.serve,
29+
swaggerUi.setup(swaggerFile)
30+
);
31+
32+
}
33+
};

tslint.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
160
77
],
88
"no-unnecessary-initializer": false,
9+
"no-var-requires": false,
910
"no-consecutive-blank-lines": false,
1011
"quotemark": [true, "single", "avoid-escape"],
1112
"interface-name": false,

yarn.lock

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,10 @@ balanced-match@^1.0.0:
515515
version "1.0.0"
516516
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
517517

518+
basic-auth@^1.1.0:
519+
version "1.1.0"
520+
resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884"
521+
518522
basic-auth@~2.0.0:
519523
version "2.0.0"
520524
resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.0.tgz#015db3f353e02e56377755f962742e8981e7bbba"
@@ -1343,6 +1347,12 @@ expect@^21.2.1:
13431347
jest-message-util "^21.2.1"
13441348
jest-regex-util "^21.2.0"
13451349

1350+
express-basic-auth@^1.1.3:
1351+
version "1.1.3"
1352+
resolved "https://registry.yarnpkg.com/express-basic-auth/-/express-basic-auth-1.1.3.tgz#18924c02fef18d9efe58e22847ee31e240749f33"
1353+
dependencies:
1354+
basic-auth "^1.1.0"
1355+
13461356
express@^4.16.2:
13471357
version "4.16.2"
13481358
resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"
@@ -4086,6 +4096,10 @@ supports-color@^4.0.0:
40864096
dependencies:
40874097
has-flag "^2.0.0"
40884098

4099+
swagger-ui-express@^2.0.10:
4100+
version "2.0.10"
4101+
resolved "https://registry.yarnpkg.com/swagger-ui-express/-/swagger-ui-express-2.0.10.tgz#a7beb3e44ad0abd3c9915afc6b41cb87a91aa3e7"
4102+
40894103
symbol-tree@^3.2.1:
40904104
version "3.2.2"
40914105
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"

0 commit comments

Comments
 (0)