sclass WebRequestFromNanoHTTPD implements IWebRequest { NanoHTTPD.IHTTPSession httpSession; S uri, subURI; SS params, files; S cookie, clientIP; Session session; bool isHttps, noSpam; *(NanoHTTPD.IHTTPSession *httpSession, S *uri, SS *params) {} public S uri() { ret uri; } public SS params() { ret params; } public SS files() { ret files; } public SS headers() { ret httpSession.getHeaders(); } public S cookie() { ret cookie; } public bool isHttps() { ret isHttps; } User loggedInUser() { ret session == null ? null : session.user(); } S googleClientID() { S domain = lower(domain()); File jsonFile = googleClientSecretFileForDomain(domain); if (!fileExists(jsonFile)) null; Map map = decodeJSONMap(loadTextFile(jsonFile)); map = (Map) map.get("web"); ret (S) map.get("client_id"); } public void noSpam { if (noSpam) ret; set noSpam; print("noSpam count: " + simpleSpamClientDetect2_markNoSpam(clientIP, uri) + " (" + clientIP + "/" + uri + ")"); } }