Mercurial Hosting > nabble
view src/nabble/view/lib/Recaptcha.java @ 62:4674ed7d56df default tip
remove n2
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 30 Sep 2023 20:25:29 -0600 |
parents | 7ecd1a4ef557 |
children |
line wrap: on
line source
package nabble.view.lib; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Map; import javax.servlet.http.HttpServletRequest; import luan.lib.json.JsonParser; import luan.lib.parser.ParseException; import fschmidt.util.java.IoUtils; import nabble.model.ModelException; import nabble.view.lib.Jtp; public final class Recaptcha { public static final String JS = "<script src='https://www.google.com/recaptcha/api.js'></script>"; public static final String DIV = "<div class='g-recaptcha' data-sitekey='6Lf12z4UAAAAAKFG8EczAb6BjVvaFM2rqHswrCP7'></div>"; private static final String SECRET = "6Lf12z4UAAAAAChAhLaE4-pxoY7z9LAWkSJnif4s"; private static final String URL = "https://www.google.com/recaptcha/api/siteverify"; private static final String PARAMS = "secret="+SECRET+"&response="; private static String getDomainIP(String domain) throws UnknownHostException { int i = domain.indexOf(":"); if( i > 0 ) domain = domain.substring(0,i); return InetAddress.getByName(domain).getHostAddress(); } public static void check(HttpServletRequest request) throws ModelException.InvalidRecaptcha, IOException { String response = request.getParameter("g-recaptcha-response"); String json = IoUtils.post( URL, PARAMS+response ); //System.out.println(json); Map map; try { map = (Map)JsonParser.parse(json); } catch(ParseException e) { throw new RuntimeException(e); } boolean success = (Boolean)map.get("success"); if( !success ) throw new ModelException.InvalidRecaptcha(); String hostname = (String)map.get("hostname"); String hostIP = getDomainIP(hostname); String nabbleIP = getDomainIP(Jtp.getDefaultHost()); if( !nabbleIP.equals(hostIP) ) throw new RuntimeException("invalid host"); } private Recaptcha() {} // never }