Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to integrate to phpBB 3.0.14 and others #72

Closed
fujicoin opened this issue Sep 23, 2015 · 6 comments

Comments

@fujicoin
Copy link

commented Sep 23, 2015

I will describe how to install Google reCaptcha 2.0.

1. Get google codes from GitHub

https://github.com/google/recaptcha

2. Upload files

Upload files like this:

root@ :/var/www/phpBB3/includes/captcha/plugins# ls
autoload.php
・・・・
ReCaptcha

3. /var/www/phpBB3/styles/prosilver/template/captcha_recaptcha.html

<!-- IF S_TYPE == 1 -->
<div class="panel">
    <div class="inner"><span class="corners-top"><span></span></span>

    <h3>{L_CONFIRMATION}</h3>
    <p>{L_CONFIRM_EXPLAIN}</p>

    <fieldset class="fields2">
<!-- ENDIF -->

<!-- IF S_RECAPTCHA_AVAILABLE -->
    <dl>
    <dt><label>{L_CONFIRM_CODE}</label>:<br /><span>{L_RECAPTCHA_EXPLAIN}</span></dt>
    <dd>
        <script type="text/javascript">
        // <![CDATA[
        var RecaptchaOptions = {
            lang : '{LA_RECAPTCHA_LANG}',
            theme : 'clean',
            tabindex : <!-- IF $CAPTCHA_TAB_INDEX -->{$CAPTCHA_TAB_INDEX}<!-- ELSE -->10<!-- ENDIF -->
        };
        // ]]>
        </script>

                <div class="g-recaptcha" data-sitekey="{RECAPTCHA_PUBKEY}"></div>
                <script src='https://www.google.com/recaptcha/api.js'></script>

        <noscript>
        <div>

        </div>
        </noscript>

    </dd>
    </dl>
<!-- ELSE -->
{L_RECAPTCHA_NOT_AVAILABLE}
<!-- ENDIF -->

<!-- IF S_TYPE == 1 -->
    </fieldset>
    <span class="corners-bottom"><span></span></span></div>
</div>
<!-- ENDIF -->

4. /var/www/phpBB3/adm/style/captcha_recaptcha.html

<!-- IF S_RECAPTCHA_AVAILABLE -->
    <dl>
    <dd>
        <script type="text/javascript">
        // <![CDATA[
        var RecaptchaOptions = {
            lang : '{LA_RECAPTCHA_LANG}',
            theme : 'clean'
        };
        // ]]>
        </script>

            <div class="g-recaptcha" data-sitekey="{RECAPTCHA_PUBKEY}"></div>
                <script src='https://www.google.com/recaptcha/api.js'></script>

    <noscript>
    <div>
    </div>
    </noscript>

    </dd>
    </dl>
<!-- ELSE -->
{L_RECAPTCHA_NOT_AVAILABLE}
<!-- ENDIF -->

5. /var/www/phpBB3/includes/captcha/plugins/phpbb_recaptcha_plugin.php

@@ -22,6 +22,8 @@
    include($phpbb_root_path . 'includes/captcha/plugins/captcha_abstract.' . $phpEx);
 }

+require_once 'autoload.php';
+
 /**
 * @package VC
 */
@@ -33,10 +35,11 @@
    // We are opening a socket to port 80 of this host and send
    // the POST request asking for verification to the path specified here.
    var $recaptcha_verify_server = 'www.google.com';
-   var $recaptcha_verify_path = '/recaptcha/api/verify';
+        var $recaptcha_verify_path = '/recaptcha/api/siteverify';

    var $challenge;
    var $response;
+        var $g_recaptcha_response;

    // PHP4 Constructor
    function phpbb_recaptcha()
@@ -50,8 +53,7 @@

        $user->add_lang('captcha_recaptcha');
        parent::init($type);
-       $this->challenge = request_var('recaptcha_challenge_field', '');
-       $this->response = request_var('recaptcha_response_field', '');
+                $this->g_recaptcha_response = request_var('g-recaptcha-response', '');
    }

    function &get_instance()
@@ -213,80 +215,8 @@
        }
    }

-// Code from here on is based on recaptchalib.php
-/*
- * This is a PHP library that handles calling reCAPTCHA.
- * - Documentation and latest version
- *       http://recaptcha.net/plugins/php/
- * - Get a reCAPTCHA API Key
- *       http://recaptcha.net/api/getkey
- * - Discussion group
- *       http://groups.google.com/group/recaptcha
- *
- * Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net
- * AUTHORS:
- *   Mike Crawford
- *   Ben Maurer
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */

    /**
-   * Submits an HTTP POST to a reCAPTCHA server
-   * @param string $host
-   * @param string $path
-   * @param array $data
-   * @param int port
-   * @return array response
-   */
-   function _recaptcha_http_post($host, $path, $data, $port = 80)
-   {
-       $req = $this->_recaptcha_qsencode ($data);
-
-       $http_request  = "POST $path HTTP/1.0\r\n";
-       $http_request .= "Host: $host\r\n";
-       $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
-       $http_request .= "Content-Length: " . strlen($req) . "\r\n";
-       $http_request .= "User-Agent: reCAPTCHA/PHP/phpBB\r\n";
-       $http_request .= "\r\n";
-       $http_request .= $req;
-
-       $response = '';
-       if (false == ($fs = @fsockopen($host, $port, $errno, $errstr, 10)))
-       {
-           trigger_error('Could not open socket', E_USER_ERROR);
-       }
-
-       fwrite($fs, $http_request);
-
-       while (!feof($fs))
-       {
-           // One TCP-IP packet
-           $response .= fgets($fs, 1160);
-       }
-       fclose($fs);
-       $response = explode("\r\n\r\n", $response, 2);
-
-       return $response;
-   }
-
-   /**
    * Calls an HTTP POST function to verify if the user's guess was correct
    * @param array $extra_params an array of extra variables to post to the server
    * @return ReCaptchaResponse
@@ -296,23 +226,17 @@
        global $config, $user;

        //discard spam submissions
-       if ($this->challenge == null || strlen($this->challenge) == 0 || $this->response == null || strlen($this->response) == 0)
+                if ($this->g_recaptcha_response == null || strlen($this->g_recaptcha_response) == 0 )
        {
            return $user->lang['RECAPTCHA_INCORRECT'];
        }

-       $response = $this->_recaptcha_http_post($this->recaptcha_verify_server, $this->recaptcha_verify_path,
-           array(
-               'privatekey'    => $config['recaptcha_privkey'],
-               'remoteip'      => $user->ip,
-               'challenge'     => $this->challenge,
-               'response'      => $this->response
-           ) + $extra_params
-       );

-       $answers = explode("\n", $response[1]);

-       if (trim($answers[0]) === 'true')
+        $recaptcha = new ReCaptcha\ReCaptcha($config['recaptcha_privkey']);
+        $resp = $recaptcha->verify($this->g_recaptcha_response, $user->ip);
+
+        if ($resp->isSuccess())
        {
            $this->solved = true;
            return false;
@@ -323,23 +247,6 @@
        }
    }

-   /**
-   * Encodes the given data into a query string format
-   * @param $data - array of string elements to be encoded
-   * @return string - encoded request
-   */
-   function _recaptcha_qsencode($data)
-   {
-       $req = '';
-       foreach ($data as $key => $value)
-       {
-           $req .= $key . '=' . urlencode(stripslashes($value)) . '&';
        }

-       // Cut the last '&'
-       $req = substr($req, 0, strlen($req) - 1);
-       return $req;
-   }
-}
-

6. Clear cache

root@ # rm /var/www/phpBB3/cache/*

7. Select reCaptcha in ACP

Select reCaptcha in ACP.
In the config page, set your public and private key.

Reference site:
http://forum.fujicoin.org/

@fujicoin fujicoin changed the title How to integrate to phpBB 3.0.14 and others How to integrate to phpBB 3.0.14 and others Sep 24, 2015
@Farkie

This comment has been minimized.

Copy link

commented Oct 11, 2015

This is more of a blog post than an issue..

@sharky009

This comment has been minimized.

Copy link

commented Oct 30, 2015

Thank for that explanation @fujicoin

@tosiara

This comment has been minimized.

Copy link

commented Apr 4, 2018

Since recaptcha V1 has been officially shut down few days ago, this tutorial helped me to upgrade to V2. Thanks!

@leemyongpakvn

This comment has been minimized.

Copy link

commented Apr 4, 2018

This tutorial is really helpful. Changes for phpbb_recaptcha_plugin.php is a bit difficult to follow. Thank you fujicoin.

@rowan-m

This comment has been minimized.

Copy link
Contributor

commented Jul 29, 2018

Closing super old issues. Please re-raise if still relevant.

@rowan-m rowan-m closed this Jul 29, 2018
@akifhussain1886

This comment has been minimized.

Copy link

commented Sep 1, 2018

root@ :/var/www/phpBB3/includes/captcha/plugins# ls
autoload.php
・・・・
ReCaptcha

Didn't get this? Someone please explain

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
7 participants
You can’t perform that action at this time.