Something went wrong. Try again.
@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
Something went wrong. Try again.
PHP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566<?php
final class AphrontFormRecaptchaControl extends AphrontFormControl {
protected function getCustomControlClass() { return 'aphront-form-control-recaptcha'; }
protected function shouldRender() { return self::isRecaptchaEnabled(); }
public static function isRecaptchaEnabled() { return PhabricatorEnv::getEnvConfig('recaptcha.enabled'); }
public static function hasCaptchaResponse(AphrontRequest $request) { return $request->getBool('g-recaptcha-response'); }
public static function processCaptcha(AphrontRequest $request) { if (!self::isRecaptchaEnabled()) { return true; }
$uri = 'https://www.google.com/recaptcha/api/siteverify'; $params = array( 'secret' => PhabricatorEnv::getEnvConfig('recaptcha.private-key'), 'response' => $request->getStr('g-recaptcha-response'), 'remoteip' => $request->getRemoteAddress(), );
list($body) = id(new HTTPSFuture($uri, $params)) ->setMethod('POST') ->resolvex();
$json = phutil_json_decode($body); return (bool)idx($json, 'success'); }
protected function renderInput() { $js = 'https://www.google.com/recaptcha/api.js'; $pubkey = PhabricatorEnv::getEnvConfig('recaptcha.public-key');
CelerityAPI::getStaticResourceResponse() ->addContentSecurityPolicyURI('script-src', $js) ->addContentSecurityPolicyURI('script-src', 'https://www.gstatic.com/') ->addContentSecurityPolicyURI('frame-src', 'https://www.google.com/');
return array( phutil_tag( 'div', array( 'class' => 'g-recaptcha', 'data-sitekey' => $pubkey, )), phutil_tag( 'script', array( 'type' => 'text/javascript', 'src' => $js, )), ); }}