diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2017-03-01 22:33:43 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2017-03-01 22:33:43 +0900 |
| commit | 58c7cd5dadf0a0f414989f04a3084f6bac0b6e5c (patch) | |
| tree | a2cb7f9c98bfbbbb7fd25bcafb550db21c6723ca /src/api/limitter.ts | |
| parent | [API] Fix bug and change limit 50 to 30 (diff) | |
| download | misskey-58c7cd5dadf0a0f414989f04a3084f6bac0b6e5c.tar.gz misskey-58c7cd5dadf0a0f414989f04a3084f6bac0b6e5c.tar.bz2 misskey-58c7cd5dadf0a0f414989f04a3084f6bac0b6e5c.zip | |
Refactor
Diffstat (limited to 'src/api/limitter.ts')
| -rw-r--r-- | src/api/limitter.ts | 36 |
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 }); |