public boolean isValid(HttpServletRequest request) {
   ReCaptcha recaptcha = ReCaptchaFactory.newReCaptcha(publicKey, privateKey, false);
   ReCaptchaResponse response =
       recaptcha.checkAnswer(
           request.getRemoteAddr(),
           request.getParameter("recaptcha_challenge_field"),
           request.getParameter("recaptcha_response_field"));
   return response.isValid();
 }
  public static void _recaptcha(
      Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) {

    final String disabled = Play.configuration.getProperty("ugot.recaptcha.disable", "false");
    if ("true".equals(disabled.trim().toLowerCase())) {
      return;
    }
    String publickey =
        Play.configuration.getProperty("ugot.recaptcha.publicKey", "YOUR_RECAPTCHA_PUBLIC_KEY");
    String privatekey =
        Play.configuration.getProperty(
            "ugot.recaptcha.privateKey", RecaptchaValidator.YOUR_RECAPTCHA_PRIVATE_KEY);

    if (publickey == null
        || privatekey == null
        || publickey.trim().length() == 0
        || privatekey.trim().length() == 0
        || "YOUR_RECAPTCHA_PUBLIC_KEY".equals(publickey)
        || RecaptchaValidator.YOUR_RECAPTCHA_PRIVATE_KEY.equals(privatekey)) {

      throw new TemplateExecutionException(
          template.template, fromLine, ERROR_MSG, new TagInternalException(ERROR_MSG));
    } else {

      Properties props = new Properties();

      Object o = args.get("tabindex");
      if (o != null) {
        String tabindex = o.toString();
        if (tabindex != null) props.put("tabindex", tabindex);
      }

      String theme = (String) args.get("theme");
      if (theme != null) props.put("theme", theme);

      String lang = (String) args.get("lang");
      if (lang == null) {
        // figure what language the application use and see if recaptcha
        // supports it, defaults to en
        lang = Lang.get();
        if (lang == null || lang.trim().length() == 0 || !isLangSupported(lang)) lang = "en";
      }
      props.put("lang", lang);

      // add support for captcha over https:
      Boolean https = (Boolean) args.get("https");

      if (https == null) {
        https = false;
      }

      String captcha;
      if (https) {
        captcha =
            ReCaptchaFactory.newSecureReCaptcha(publickey, privatekey, false)
                .createRecaptchaHtml(null, props);

      } else {
        captcha =
            ReCaptchaFactory.newReCaptcha(publickey, privatekey, false)
                .createRecaptchaHtml(null, props);
      }

      out.print(captcha);
    }
  }
  public void _jspService(HttpServletRequest request, HttpServletResponse response)
      throws java.io.IOException, ServletException {

    JspFactory _jspxFactory = null;
    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;

    try {
      _jspxFactory = JspFactory.getDefaultFactory();
      response.setContentType("text/html");
      pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("\n\n\n\n\n\n\n<html>\n<head>\n    <title>");
      if (_jspx_meth_fmt_message_0(_jspx_page_context)) return;
      out.write(
          "</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/style/global.css\">\n    <style type=\"text/css\">\n        .drop-shadow {\n             font-weight: bold;\n             font-size: 14pt;\n             color: white;\n             text-shadow: black 0.1em 0.1em 0.2em;\n             padding-top: 21px;}\n    </style>\n    <meta name=\"decorator\" content=\"none\"/>\n</head>\n\n");
      org.jivesoftware.util.WebManager webManager = null;
      synchronized (_jspx_page_context) {
        webManager =
            (org.jivesoftware.util.WebManager)
                _jspx_page_context.getAttribute("webManager", PageContext.PAGE_SCOPE);
        if (webManager == null) {
          webManager = new org.jivesoftware.util.WebManager();
          _jspx_page_context.setAttribute("webManager", webManager, PageContext.PAGE_SCOPE);
        }
      }
      out.write('\n');
      java.util.HashMap errors = null;
      synchronized (_jspx_page_context) {
        errors =
            (java.util.HashMap) _jspx_page_context.getAttribute("errors", PageContext.PAGE_SCOPE);
        if (errors == null) {
          errors = new java.util.HashMap();
          _jspx_page_context.setAttribute("errors", errors, PageContext.PAGE_SCOPE);
        }
      }
      out.write('\n');
      webManager.init(request, response, session, application, out);

      boolean create = request.getParameter("create") != null;
      String username = ParamUtils.getParameter(request, "username");
      String name = ParamUtils.getParameter(request, "name");
      String email = ParamUtils.getParameter(request, "email");
      String password = ParamUtils.getParameter(request, "password");
      String passwordConfirm = ParamUtils.getParameter(request, "passwordConfirm");
      String reCaptchaChallenge = ParamUtils.getParameter(request, "recaptcha_challenge_field");
      String reCaptchaResponse = ParamUtils.getParameter(request, "recaptcha_response_field");

      RegistrationPlugin plugin =
          (RegistrationPlugin)
              webManager.getXMPPServer().getPluginManager().getPlugin("registration");
      ReCaptcha reCaptcha = null;
      if (plugin.reCaptchaEnabled()) {
        reCaptcha =
            ReCaptchaFactory.newReCaptcha(
                plugin.getReCaptchaPublicKey(),
                plugin.getReCaptchaPrivateKey(),
                plugin.reCaptchaNoScript());
      }

      // Handle a request to create a user:
      if (create) {
        // Validate
        if (username == null) {
          errors.put("username", "");
        } else {
          try {
            username = username.trim().toLowerCase();
            username = JID.escapeNode(username);
            username = Stringprep.nodeprep(username);
          } catch (StringprepException se) {
            errors.put("username", "");
          }
        }
        if (password == null) {
          errors.put("password", "");
        }
        if (passwordConfirm == null) {
          errors.put("passwordConfirm", "");
        }
        if (password != null && passwordConfirm != null && !password.equals(passwordConfirm)) {
          errors.put("passwordMatch", "");
        }
        if (plugin.reCaptchaEnabled()) {
          ReCaptchaResponse captchaResponse = null;
          try {
            captchaResponse =
                reCaptcha.checkAnswer(
                    request.getRemoteAddr(), reCaptchaChallenge, reCaptchaResponse);
          } catch (Exception e) {
          }
          if (captchaResponse == null || !captchaResponse.isValid()) {
            errors.put("reCaptchaFail", "");
          }
        }

        // do a create if there were no errors
        if (errors.size() == 0) {
          try {
            webManager.getUserManager().createUser(username, password, name, email);

            response.sendRedirect("sign-up.jsp?success=true");
            return;
          } catch (UserAlreadyExistsException e) {
            errors.put("usernameAlreadyExists", "");
          } catch (Exception e) {
            errors.put("general", "");
            Log.error(e);
          }
        }
      }

      out.write(
          "\n\n<body>\n\n<div id=\"jive-header\">\n<table cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n    <tbody>\n        <tr><td class=\"drop-shadow\">&nbsp;");
      out.print(plugin.getHeader());
      out.write("</td></tr>    \n    </tbody>\n</table>\n</div>\n\n<div id=\"jive-content\">\n\n");
      if (!plugin.webEnabled()) {
        out.write('\n');
        out.write('\n');
        if (_jspx_meth_fmt_message_1(_jspx_page_context)) return;
        out.write('\n');
        out.write('\n');
      } else {
        out.write("\n\n<p>");
        if (_jspx_meth_fmt_message_2(_jspx_page_context)) return;
        out.write("</p>\n\n");
        if (_jspx_meth_c_set_0(_jspx_page_context)) return;
        out.write('\n');
        if (_jspx_meth_c_set_1(_jspx_page_context)) return;
        out.write('\n');
        out.write('\n');
        if (!errors.isEmpty()) {
          out.write(
              "\n\n    <div class=\"jive-error\">\n    <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n    <tbody>\n        <tr>\n            <td class=\"jive-icon\"><img src=\"images/error-16x16.gif\" width=\"16\" height=\"16\" border=\"0\"/></td>\n            <td class=\"jive-icon-label\">\n\n            ");
          if (errors.get("general") != null) {
            out.write("\n                ");
            if (_jspx_meth_fmt_message_3(_jspx_page_context)) return;
            out.write("\n            ");
          } else if (errors.get("username") != null) {
            out.write("\n                ");
            if (_jspx_meth_fmt_message_4(_jspx_page_context)) return;
            out.write("\n            ");
          } else if (errors.get("usernameAlreadyExists") != null) {
            out.write("\n                ");
            if (_jspx_meth_fmt_message_5(_jspx_page_context)) return;
            out.write("\n            ");
          } else if (errors.get("name") != null) {
            out.write("\n                ");
            if (_jspx_meth_fmt_message_6(_jspx_page_context)) return;
            out.write("\n            ");
          } else if (errors.get("email") != null) {
            out.write("\n                ");
            if (_jspx_meth_fmt_message_7(_jspx_page_context)) return;
            out.write("\n            ");
          } else if (errors.get("password") != null) {
            out.write("\n                ");
            if (_jspx_meth_fmt_message_8(_jspx_page_context)) return;
            out.write("\n            ");
          } else if (errors.get("passwordMatch") != null) {
            out.write("\n                ");
            if (_jspx_meth_fmt_message_9(_jspx_page_context)) return;
            out.write("\n            ");
          } else if (errors.get("passwordConfirm") != null) {
            out.write("\n                ");
            if (_jspx_meth_fmt_message_10(_jspx_page_context)) return;
            out.write("\n            ");
          } else if (errors.get("reCaptchaFail") != null) {
            out.write("\n                ");
            if (_jspx_meth_fmt_message_11(_jspx_page_context)) return;
            out.write("\n            ");
          }
          out.write(
              "\n            </td>\n        </tr>\n    </tbody>\n    </table>\n    </div>\n    <br>\n\n");
        } else if (request.getParameter("success") != null) {
          out.write(
              "\n\n    <div class=\"jive-success\">\n    <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n    <tbody>\n        <tr>\n            <td class=\"jive-icon\"><img src=\"images/success-16x16.gif\" width=\"16\" height=\"16\" border=\"0\"></td>\n            <td class=\"jive-icon-label\">");
          if (_jspx_meth_fmt_message_12(_jspx_page_context)) return;
          out.write("</td>\n        </tr>\n    </tbody>\n    </table>\n    </div><br>\n\n");
        }
        out.write(
            "\n\n<form name=\"f\" action=\"sign-up.jsp\" method=\"get\">\n\n<div class=\"jive-contentBoxHeader\">");
        if (_jspx_meth_fmt_message_13(_jspx_page_context)) return;
        out.write(
            "</div>\n<div class=\"jive-contentBox\">\n    <div>\n    <table cellpadding=\"3\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n    <tbody>\n    <tr>\n        <td width=\"1%\" nowrap><label for=\"usernametf\">");
        if (_jspx_meth_fmt_message_14(_jspx_page_context)) return;
        out.write(
            ":</label> *</td>\n        <td width=\"99%\">\n            <input type=\"text\" name=\"username\" size=\"30\" maxlength=\"75\" value=\"");
        out.print(((username != null) ? username : ""));
        out.write(
            "\"\n             id=\"usernametf\" autocomplete=\"off\">\n        </td>\n    </tr>\n    <tr>\n        <td width=\"1%\" nowrap>\n            <label for=\"nametf\">");
        if (_jspx_meth_fmt_message_15(_jspx_page_context)) return;
        out.write(
            ":</label>\n        </td>\n        <td width=\"99%\">\n            <input type=\"text\" name=\"name\" size=\"30\" maxlength=\"75\" value=\"");
        out.print(((name != null) ? name : ""));
        out.write(
            "\"\n             id=\"nametf\">\n        </td>\n    </tr>\n    <tr>\n        <td width=\"1%\" nowrap>\n            <label for=\"emailtf\">");
        if (_jspx_meth_fmt_message_16(_jspx_page_context)) return;
        out.write(
            ":</label></td>\n        <td width=\"99%\">\n            <input type=\"text\" name=\"email\" size=\"30\" maxlength=\"75\" value=\"");
        out.print(((email != null) ? email : ""));
        out.write(
            "\"\n             id=\"emailtf\">\n        </td>\n    </tr>\n    <tr>\n        <td nowrap>\n            <label for=\"passtf\">");
        if (_jspx_meth_fmt_message_17(_jspx_page_context)) return;
        out.write(
            ":</label> *\n        </td>\n        <td width=\"99%\">\n            <input type=\"password\" name=\"password\" value=\"\" size=\"20\" maxlength=\"75\"\n             id=\"passtf\">\n        </td>\n    </tr>\n    <tr>\n        <td width=\"1%\" nowrap>\n            <label for=\"confpasstf\">");
        if (_jspx_meth_fmt_message_18(_jspx_page_context)) return;
        out.write(
            ":</label> *\n        </td>\n        <td width=\"99%\">\n            <input type=\"password\" name=\"passwordConfirm\" value=\"\" size=\"20\" maxlength=\"75\"\n             id=\"confpasstf\">\n        </td>\n    </tr>\n    </tbody>\n    </table>\n    <br>\n    <span class=\"jive-description\">\n    * ");
        if (_jspx_meth_fmt_message_19(_jspx_page_context)) return;
        out.write("\n    </span>\n    </div>\n</div>\n\n");
        if (reCaptcha != null) {
          out.write('\n');
          out.print(reCaptcha.createRecaptchaHtml(null, null, 0));
          out.write('\n');
        }
        out.write("\n<input type=\"submit\" name=\"create\" value=\"");
        if (_jspx_meth_fmt_message_20(_jspx_page_context)) return;
        out.write(
            "\">\n\n</form>\n\n<script language=\"JavaScript\" type=\"text/javascript\">\ndocument.f.username.focus();\n</script>\n\n");
      }
      out.write("\n\n</body>\n</html>");
    } catch (Throwable t) {
      if (!(t instanceof SkipPageException)) {
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0) out.clearBuffer();
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
      }
    } finally {
      if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
  /**
   * Creating HTML code for the captcha formular.
   *
   * @param request request
   * @param type k/kv/datatype/literal
   * @param site site
   * @return HTML code
   */
  public static String captcha(HttpServletRequest request, String type, String site, String sort) {
    ReCaptcha c =
        ReCaptchaFactory.newReCaptcha(
            Functions.PUBLIC_reCAPTCHA_KEY, Functions.PRIVATE_reCAPTCHA_KEY, false);

    String re = "\t\t\t\t<article class=\"captcha\">\n";
    re +=
        "\t\t\t\t\t<form action=\"?tab=all&type="
            + type
            + "&site="
            + site
            + "&sort="
            + sort
            + "\" method=\"post\" accept-charset=\"UTF-8\" autocomplete=\"off\">";
    re += "\t\t\t\t\t\t<ul>\n";
    re += "\t\t\t\t\t\t\t<li>" + c.createRecaptchaHtml(null, null) + "</li>\n";
    re += "\t\t\t\t\t\t\t<li><input type=\"submit\" name=\"fcaptcha\" value=\"Send\" /></li>\n";
    re += "\t\t\t\t\t\t</ul>\n";

    if (request.getParameter("kmapping") != null) {
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"k\" value=\""
              + request.getParameter("k")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"object\" value=\""
              + request.getParameter("object")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"property\" value=\""
              + request.getParameter("property")
              + "\" />\n";
      if (!request.getParameter("kmapping").equals("Delete")) {
        re +=
            "\t\t\t\t\t\t<input type=\"hidden\" name=\"aproperty\" value=\""
                + request.getParameter("aproperty")
                + "\" />\n";
        re +=
            "\t\t\t\t\t\t<input type=\"hidden\" name=\"aobject\" value=\""
                + request.getParameter("aobject")
                + "\" />\n";
      }

      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"user\" value=\""
              + request.getParameter("user")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"comment\" value=\""
              + request.getParameter("comment")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"kmapping\" value=\""
              + request.getParameter("kmapping")
              + "\" />\n";
    } // #########################################################################
    else if (request.getParameter("kvmapping") != null) {
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"k\" value=\""
              + request.getParameter("k")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"v\" value=\""
              + request.getParameter("v")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"object\" value=\""
              + request.getParameter("object")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"property\" value=\""
              + request.getParameter("property")
              + "\" />\n";
      if (!request.getParameter("kvmapping").equals("Delete")) {
        re +=
            "\t\t\t\t\t\t<input type=\"hidden\" name=\"aproperty\" value=\""
                + request.getParameter("aproperty")
                + "\" />\n";
        re +=
            "\t\t\t\t\t\t<input type=\"hidden\" name=\"aobject\" value=\""
                + request.getParameter("aobject")
                + "\" />\n";
      }

      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"user\" value=\""
              + request.getParameter("user")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"comment\" value=\""
              + request.getParameter("comment")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"kvmapping\" value=\""
              + request.getParameter("kvmapping")
              + "\" />\n";
    } // #########################################################################
    else if (request.getParameter("dmapping") != null) {
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"k\" value=\""
              + request.getParameter("k")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"datatype\" value=\""
              + request.getParameter("datatype")
              + "\" />\n";
      if (!request.getParameter("dmapping").equals("Delete"))
        re +=
            "\t\t\t\t\t\t<input type=\"hidden\" name=\"adatatype\" value=\""
                + request.getParameter("adatatype")
                + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"user\" value=\""
              + request.getParameter("user")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"comment\" value=\""
              + request.getParameter("comment")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"dmapping\" value=\""
              + request.getParameter("dmapping")
              + "\" />\n";
    } // #########################################################################
    else if (request.getParameter("lmapping") != null) {
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"k\" value=\""
              + request.getParameter("k")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"language\" value=\""
              + request.getParameter("language")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"property\" value=\""
              + request.getParameter("property")
              + "\" />\n";
      if (!request.getParameter("lmapping").equals("Delete")) {
        re +=
            "\t\t\t\t\t\t<input type=\"hidden\" name=\"aproperty\" value=\""
                + request.getParameter("aproperty")
                + "\" />\n";
        re +=
            "\t\t\t\t\t\t<input type=\"hidden\" name=\"alanguage\" value=\""
                + request.getParameter("alanguage")
                + "\" />\n";
      }

      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"user\" value=\""
              + request.getParameter("user")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"comment\" value=\""
              + request.getParameter("comment")
              + "\" />\n";
      re +=
          "\t\t\t\t\t\t<input type=\"hidden\" name=\"lmapping\" value=\""
              + request.getParameter("lmapping")
              + "\" />\n";
    }

    re += "\t\t\t\t\t</form>\n";
    re += "\t\t\t\t</article>\n";

    return re;
  }
 private ReCaptcha createReCaptcha() {
   return ReCaptchaFactory.newReCaptcha(publicKey, privateKey, includeNoscript);
 }
 private ReCaptchaService() {
   String publicKey = getKeyFromSystemProperty(PUBLIC_KEY_PROPERTY, PUBLIC_DEVELOPMENT_KEY);
   String privateKey = getKeyFromSystemProperty(PRIVATE_KEY_PROPERTY, PRIVATE_DEVELOPMENT_KEY);
   reCaptchaService =
       ReCaptchaFactory.newReCaptcha(publicKey, privateKey, /* include non script */ false);
 }
 public String getRecaptcha() {
   ReCaptcha recaptcha = ReCaptchaFactory.newReCaptcha(publicKey, privateKey, false);
   return recaptcha.createRecaptchaHtml(null, null);
 }