package org.onesocialweb.openfire.registration.servlet; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.tanesha.recaptcha.ReCaptchaImpl; import net.tanesha.recaptcha.ReCaptchaResponse; import org.jivesoftware.admin.AuthCheckFilter; import org.jivesoftware.util.JiveGlobals; @SuppressWarnings("serial") public class ReCaptchaServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) { if (readPrivateKey()==null) try { response.sendError(HttpServletResponse.SC_FORBIDDEN,"There's been a server error. Please try again later or contact the server's admin"); } catch (IOException e) { } if (!verifyChallenge(request)) try { response.sendError(HttpServletResponse.SC_FORBIDDEN,"The Captcha text entered didn't match the pattern. Please try again!"); } catch (IOException e) { } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) { if (readPrivateKey()==null) try { response.sendError(HttpServletResponse.SC_FORBIDDEN,"There's been a server error. Please try again later or contact the server's admin"); } catch (IOException e) { } if (!verifyChallenge(request)) try { response.sendError(HttpServletResponse.SC_FORBIDDEN,"The Captcha text entered didn't match the pattern. Please try again!"); } catch (IOException e) { } } public boolean verifyChallenge(HttpServletRequest request) { String remoteAddr = request.getRemoteAddr(); ReCaptchaImpl reCaptcha = new ReCaptchaImpl(); reCaptcha.setPrivateKey(readPrivateKey()); String challenge = request.getParameter("recaptcha_challenge_field"); String uresponse = request.getParameter("recaptcha_response_field"); ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddr, challenge, uresponse); return reCaptchaResponse.isValid(); } @Override public void init(ServletConfig config) throws ServletException { super.init(config); // Exclude this servlet from requering the user to login AuthCheckFilter.addExclude("oswregistrationplugin"); AuthCheckFilter.addExclude("oswregistrationplugin/captcha"); AuthCheckFilter.addExclude("oswregistrationplugin/captcha/"); } private String readPrivateKey(){ String key=null; key=JiveGlobals.getProperty("onesocialweb.captcha.privateKey"); return key; } }