Skip to content

Commit c87b14c

Browse files
committed
Bumped deps, Added cors, Fixed rate limiting per scttcper/koa-simple-ratelimit#34
1 parent d2748f3 commit c87b14c

File tree

4 files changed

+488
-471
lines changed

4 files changed

+488
-471
lines changed

index.js

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ const conditional = require('koa-conditional-get');
1010
const etag = require('koa-etag');
1111
const compress = require('koa-compress');
1212
const responseTime = require('koa-response-time');
13-
const rateLimit = require('koa-simple-ratelimit');
13+
const rateLimiter = require('koa-simple-ratelimit');
1414
const koaLogger = require('koa-logger');
1515
const bodyParser = require('koa-bodyparser');
1616
const koa404Handler = require('koa-404-handler');
1717
const json = require('koa-json');
1818
const errorHandler = require('koa-better-error-handler');
1919
const helmet = require('koa-helmet');
20+
const cors = require('kcors');
2021
const removeTrailingSlashes = require('koa-no-trailing-slash');
2122
const redis = require('redis');
2223
const StoreIPAddress = require('@ladjs/store-ip-address');
@@ -27,11 +28,20 @@ const { oneLine } = require('common-tags');
2728

2829
const env = process.env.NODE_ENV || 'development';
2930

30-
let max = process.env.RATELIMIT_MAX
31-
? parseInt(process.env.RATELIMIT_MAX, 10)
32-
: 100;
33-
34-
if (!process.env.RATELIMIT_MAX && env === 'development') max = Number.MAX_VALUE;
31+
let rateLimit = {
32+
duration: process.env.RATELIMIT_DURATION
33+
? parseInt(process.env.RATELIMIT_DURATION, 10)
34+
: 60000,
35+
max: process.env.RATELIMIT_MAX
36+
? parseInt(process.env.RATELIMIT_MAX, 10)
37+
: 100,
38+
id: ctx => ctx.ip,
39+
prefix: process.env.RATELIMIT_PREFIX
40+
? process.env.RATELIMIT_PREFIX
41+
: `limit_${env.toLowerCase()}`
42+
};
43+
44+
if (env === 'development') rateLimit = false;
3545

3646
class Server {
3747
constructor(config) {
@@ -54,16 +64,9 @@ class Server {
5464
logger: console,
5565
passport: false,
5666
i18n: {},
57-
rateLimit: {
58-
duration: process.env.RATELIMIT_DURATION
59-
? parseInt(process.env.RATELIMIT_DURATION, 10)
60-
: 60000,
61-
max,
62-
id: ctx => ctx.ip,
63-
prefix: process.env.RATELIMIT_PREFIX
64-
? process.env.RATELIMIT_PREFIX
65-
: `limit_${env.toLowerCase()}`
66-
},
67+
rateLimit,
68+
// <https://github.com/koajs/cors#corsoptions>
69+
cors: {},
6770
timeoutMs: process.env.API_TIMEOUT_MS
6871
? parseInt(process.env.API_TIMEOUT_MS, 10)
6972
: 2000
@@ -123,19 +126,26 @@ class Server {
123126
app.use(koaLogger({ logger }));
124127

125128
// rate limiting
126-
app.use(
127-
rateLimit({
128-
...this.config.rateLimit,
129-
db: redisClient
130-
})
131-
);
129+
if (this.config.rateLimit)
130+
app.use(
131+
rateLimiter({
132+
...this.config.rateLimit,
133+
db: redisClient
134+
})
135+
);
132136

133137
// conditional-get
134138
app.use(conditional());
135139

136140
// etag
137141
app.use(etag());
138142

143+
// cors
144+
if (this.config.cors) app.use(cors(this.config.cors));
145+
146+
// TODO: add `cors-gate`
147+
// <https://github.com/mixmaxhq/cors-gate/issues/6>
148+
139149
// security
140150
app.use(helmet());
141151

@@ -180,6 +190,8 @@ class Server {
180190
if (this.config.routes) {
181191
if (_.isFunction(this.config.routes.routes))
182192
app.use(this.config.routes.routes());
193+
if (_.isFunction(this.config.routes.allowedMethods))
194+
app.use(this.config.routes.allowedMethods());
183195
else app.use(this.config.routes);
184196
}
185197

package.json

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@
1818
"@ladjs/i18n": "^0.3.2",
1919
"@ladjs/store-ip-address": "^0.0.5",
2020
"boolean": "^0.1.3",
21-
"cabin": "^1.0.0",
22-
"common-tags": "^1.7.2",
21+
"cabin": "^1.0.2",
22+
"common-tags": "^1.8.0",
2323
"ip": "^1.1.5",
24+
"kcors": "^2.2.1",
2425
"koa": "^2.5.1",
2526
"koa-404-handler": "^0.0.2",
2627
"koa-better-error-handler": "^1.3.5",
@@ -39,19 +40,19 @@
3940
"redis": "^2.8.0"
4041
},
4142
"devDependencies": {
42-
"auto-bind": "^1.2.0",
43+
"auto-bind": "^1.2.1",
4344
"ava": "^0.25.0",
4445
"codecov": "^3.0.2",
45-
"cross-env": "^5.1.5",
46-
"eslint": "^4.19.1",
46+
"cross-env": "^5.2.0",
47+
"eslint": "^5.0.0",
4748
"eslint-config-prettier": "^2.9.0",
48-
"eslint-plugin-prettier": "^2.6.0",
49+
"eslint-plugin-prettier": "^2.6.1",
4950
"husky": "^0.14.3",
5051
"koa-router": "^7.4.0",
51-
"lint-staged": "^7.1.2",
52-
"mongoose": "^5.1.1",
53-
"nyc": "^11.8.0",
54-
"prettier": "^1.12.1",
52+
"lint-staged": "^7.2.0",
53+
"mongoose": "^5.1.6",
54+
"nyc": "^12.0.2",
55+
"prettier": "^1.13.5",
5556
"remark-cli": "^5.0.0",
5657
"remark-preset-github": "^0.0.8",
5758
"supertest": "^3.1.0",
@@ -60,7 +61,9 @@
6061
"engines": {
6162
"node": ">=8.3"
6263
},
63-
"files": ["index.js"],
64+
"files": [
65+
"index.js"
66+
],
6467
"homepage": "https://github.com/ladjs/api",
6568
"keywords": [
6669
"api",
@@ -92,11 +95,16 @@
9295
"prettier --write --single-quote --trailing-comma none",
9396
"git add"
9497
],
95-
"*.md": ["remark . -qfo", "git add"]
98+
"*.md": [
99+
"remark . -qfo",
100+
"git add"
101+
]
96102
},
97103
"main": "index.js",
98104
"remarkConfig": {
99-
"plugins": ["preset-github"]
105+
"plugins": [
106+
"preset-github"
107+
]
100108
},
101109
"repository": {
102110
"type": "git",
@@ -111,7 +119,9 @@
111119
},
112120
"xo": {
113121
"extends": "prettier",
114-
"plugins": ["prettier"],
122+
"plugins": [
123+
"prettier"
124+
],
115125
"parserOptions": {
116126
"sourceType": "script"
117127
},

test/test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const config = {
2626
id: ctx => ctx.ip,
2727
prefix: 'limit_test'
2828
},
29+
cors: {},
2930
timeoutMs: 2000
3031
};
3132

0 commit comments

Comments
 (0)