Libraryless. Click here for Pure Java version (2676L/17K).
scope simpleSpamClientDetect2. static int #interval = 60000; static double #perSecondThreshold = 2.0; // per IP + URI static int #spamMax; static Set<S> #whiteList = syncSet(myIPs()); static Lock #myLock = lock(); // ip + uri -> time, count static Map<PairS, Pair<Long, Int>> #ipsAndUris = synchroMap(); // returns pair(count, bad) static Pair<Int, Bool> simpleSpamClientDetect2(S clientIP, S uri) { lock myLock; // TODO: clean up map sometimes Pair<S> pair = pair(clientIP, uri); Pair<Long, Int> value = ipsAndUris.get(pair); if (value == null || now() > value.a+interval) ipsAndUris.put(pair, value = pair(now(), 1)); else value.b++; spamMax = iround(perSecondThreshold*interval/1000); ret pair(value.b, !contains(whiteList, clientIP) && value.b >= spamMax); } // returns new count static int #markNoSpam(S clientIP, S uri) { lock myLock; PairS pair = pair(clientIP, uri); Pair<Long, Int> value = ipsAndUris.get(pair); if (value != null && value.b > 0) ret --value.b; ret -1; } end scope
Began life as a copy of #1014077
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
Snippet ID: | #1014225 |
Snippet name: | simpleSpamClientDetect2 |
Eternal ID of this version: | #1014225/8 |
Text MD5: | 6a6c27960c29d6f3eebf34d6977e1dbf |
Transpilation MD5: | e6daaba8c32f66f0ca587065ac6e94be |
Author: | stefan |
Category: | javax / http |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2020-10-27 13:08:06 |
Source code size: | 1062 bytes / 35 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 463 / 577 |
Version history: | 7 change(s) |
Referenced in: | #1006654 - Standard functions list 2 (LIVE, continuation of #761) |