sclass HTTPSpamBlocker1 { Set blockedIPs = expiringSet(10*60.0); // 10 minutes bool isBadRequest(S uri, S ip) { ret pairB(checkRequest(uri, ip)); } // pair(count, bad) Pair checkRequest(S uri, S ip) { bool bad = eq(uri, "/simulate-bad-client"); Pair 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); } }