(Re)captcha

To enable captcha checks on the forms, add a usecaptcha=true to the formintegration node in the site profile:

  <apply>
    <to type="all"/>
    <formintegration usecaptcha="true" />
  </apply>

Setup captcha support in your JS code

import { setupGoogleRecaptcha } from '@webhare/forms';
setupGoogleRecaptcha();

Request an API key from Google and configure it in WebHare.

Manual captcha integration

Request the user to fill in the captcha

import { getCaptchaResponse } from "@mod-publisher/js/captcha/api";

let sitekey = 'xxx'; //the result of GetCaptchaProvider()
let captcharesponse = await getCaptchaResponse(sitekey);

//Submit captcharesponse with the rest of your request

Serverside check:

STRING captcharesponse := "xxx"; ///captcha response from RPC/GetWebVariable
IF(NOT VerifyCaptchaResponse(GetFormRequestURL(), captcharesponse))
  ABORT("Invalid captcha response");

Disabling captcha checks for some users

  <apply>
    <to type="all"/>
    <captchaintegration skipfunction="my.whlib#SkipCaptcha" />
  </apply>
  PUBLIC BOOLEAN FUNCTION SkipCaptcha(OBJECT webcontext)
  {
    IF(IsPrivateIPAddress(GetClientRemoteIP()))
      RETURN TRUE;

    OBJECT wrdauth := webcontext->GetWRDAuthPlugin();
    IF(ObjectExists(wrdauth) AND wrdauth->IsLoggedIn())
      RETURN TRUE;

    RETURN FALSE;
  }

You can use AllowToSkipCaptchaCheck on a webdesign (or webcontext) object to verify whether the user is allowed to skip the captcha check. This should usually be done in the RPC that decides whether to request a captcha check