Libraryless. Click here for Pure Java version (4731L/31K).
sclass HTTPSpamBlocker1 { Set<S> blockedIPs = expiringSet(10*60.0); // 10 minutes bool isBadRequest(S uri, S ip) { ret pairB(checkRequest(uri, ip)); } // pair(count, bad) Pair<Int, Bool> checkRequest(S uri, S ip) { bool bad = eq(uri, "/simulate-bad-client"); Pair<Int, Bool> pair = simpleSpamClientDetect2(ip, uri); if (pair.b) { if (eq(ip, pcall_myFirewallIP())) print("Not blocking myself."); else { print("Blocking IP " + ip); blockedIPs.add(ip); } } if (blockedIPs.contains(ip)) { bad = true; print(t3("an HTTP request from a blocked IP", "came in at", dateWithTimeGMT())); } ret pair(pair.a, bad); } void markNoSpam(S uri, S ip) { simpleSpamClientDetect2_markNoSpam(ip, uri); } }
download show line numbers debug dex old transpilations
Travelled to 7 computer(s): bhatertpkbcr, cfunsshuasjs, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1023394 |
Snippet name: | HTTPSpamBlocker1 |
Eternal ID of this version: | #1023394/4 |
Text MD5: | 7be6e35e2e911233b6000b50c01edfbb |
Transpilation MD5: | 56789a30cb865a8991974937d1e9a7a7 |
Author: | stefan |
Category: | javax |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2020-10-27 13:04:36 |
Source code size: | 840 bytes / 32 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 366 / 811 |
Version history: | 3 change(s) |
Referenced in: | #1034167 - Standard Classes + Interfaces (LIVE, continuation of #1003674) |