summaryrefslogtreecommitdiff
path: root/src/api/limitter.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2017-03-01 22:33:43 +0900
committersyuilo <syuilotan@yahoo.co.jp>2017-03-01 22:33:43 +0900
commit58c7cd5dadf0a0f414989f04a3084f6bac0b6e5c (patch)
treea2cb7f9c98bfbbbb7fd25bcafb550db21c6723ca /src/api/limitter.ts
parent[API] Fix bug and change limit 50 to 30 (diff)
downloadmisskey-58c7cd5dadf0a0f414989f04a3084f6bac0b6e5c.tar.gz
misskey-58c7cd5dadf0a0f414989f04a3084f6bac0b6e5c.tar.bz2
misskey-58c7cd5dadf0a0f414989f04a3084f6bac0b6e5c.zip
Refactor
Diffstat (limited to 'src/api/limitter.ts')
-rw-r--r--src/api/limitter.ts36
1 files changed, 19 insertions, 17 deletions
diff --git a/src/api/limitter.ts b/src/api/limitter.ts
index 4231b033af..10c50c3403 100644
--- a/src/api/limitter.ts
+++ b/src/api/limitter.ts
@@ -1,26 +1,28 @@
import * as Limiter from 'ratelimiter';
import * as debug from 'debug';
import limiterDB from '../db/redis';
-import { IEndpoint } from './endpoints';
+import { Endpoint } from './endpoints';
import { IAuthContext } from './authenticate';
const log = debug('misskey:limitter');
-export default (endpoint: IEndpoint, ctx: IAuthContext) => new Promise((ok, reject) => {
- const limitKey = endpoint.hasOwnProperty('limitKey')
- ? endpoint.limitKey
+export default (endpoint: Endpoint, ctx: IAuthContext) => new Promise((ok, reject) => {
+ const limitation = endpoint.limit;
+
+ const key = limitation.hasOwnProperty('key')
+ ? limitation.key
: endpoint.name;
- const hasMinInterval =
- endpoint.hasOwnProperty('minInterval');
+ const hasShortTermLimit =
+ limitation.hasOwnProperty('minInterval');
- const hasRateLimit =
- endpoint.hasOwnProperty('limitDuration') &&
- endpoint.hasOwnProperty('limitMax');
+ const hasLongTermLimit =
+ limitation.hasOwnProperty('duration') &&
+ limitation.hasOwnProperty('max');
- if (hasMinInterval) {
+ if (hasShortTermLimit) {
min();
- } else if (hasRateLimit) {
+ } else if (hasLongTermLimit) {
max();
} else {
ok();
@@ -29,8 +31,8 @@ export default (endpoint: IEndpoint, ctx: IAuthContext) => new Promise((ok, reje
// Short-term limit
function min() {
const minIntervalLimiter = new Limiter({
- id: `${ctx.user._id}:${limitKey}:min`,
- duration: endpoint.minInterval,
+ id: `${ctx.user._id}:${key}:min`,
+ duration: limitation.minInterval,
max: 1,
db: limiterDB
});
@@ -45,7 +47,7 @@ export default (endpoint: IEndpoint, ctx: IAuthContext) => new Promise((ok, reje
if (info.remaining === 0) {
reject('BRIEF_REQUEST_INTERVAL');
} else {
- if (hasRateLimit) {
+ if (hasLongTermLimit) {
max();
} else {
ok();
@@ -57,9 +59,9 @@ export default (endpoint: IEndpoint, ctx: IAuthContext) => new Promise((ok, reje
// Long term limit
function max() {
const limiter = new Limiter({
- id: `${ctx.user._id}:${limitKey}`,
- duration: endpoint.limitDuration,
- max: endpoint.limitMax,
+ id: `${ctx.user._id}:${key}`,
+ duration: limitation.duration,
+ max: limitation.max,
db: limiterDB
});