Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

recaptcha.php

Zuletzt modifiziert: 09.10.2024, 12:54 - Dateigröße: 8.32 KiB


001  <?php
002  /**
003  *
004  * This file is part of the phpBB Forum Software package.
005  *
006  * @copyright (c) phpBB Limited <https://www.phpbb.com>
007  * @license GNU General Public License, version 2 (GPL-2.0)
008  *
009  * For full copyright and license information, please see
010  * the docs/CREDITS.txt file.
011  *
012  */
013   
014  namespace phpbb\captcha\plugins;
015   
016  class recaptcha extends captcha_abstract
017  {
018      var $recaptcha_server = 'http://www.google.com/recaptcha/api';
019      var $recaptcha_server_secure = 'https://www.google.com/recaptcha/api'; // class constants :(
020   
021      // We are opening a socket to port 80 of this host and send
022      // the POST request asking for verification to the path specified here.
023      var $recaptcha_verify_server = 'www.google.com';
024      var $recaptcha_verify_path = '/recaptcha/api/verify';
025   
026      var $challenge;
027      var $response;
028   
029      // PHP4 Constructor
030      function phpbb_recaptcha()
031      {
032          global $request;
033          $this->recaptcha_server = $request->is_secure() ? $this->recaptcha_server_secure : $this->recaptcha_server;
034      }
035   
036      function init($type)
037      {
038          global $config, $db, $user;
039   
040          $user->add_lang('captcha_recaptcha');
041          parent::init($type);
042          $this->challenge = request_var('recaptcha_challenge_field', '');
043          $this->response = request_var('recaptcha_response_field', '');
044      }
045   
046      public function is_available()
047      {
048          global $config, $user;
049          $user->add_lang('captcha_recaptcha');
050          return (isset($config['recaptcha_pubkey']) && !empty($config['recaptcha_pubkey']));
051      }
052   
053      /**
054      *  API function
055      */
056      function has_config()
057      {
058          return true;
059      }
060   
061      static public function get_name()
062      {
063          return 'CAPTCHA_RECAPTCHA';
064      }
065   
066      /**
067      * This function is implemented because required by the upper class, but is never used for reCaptcha.
068      */
069      function get_generator_class()
070      {
071          throw new \Exception('No generator class given.');
072      }
073   
074      function acp_page($id, &$module)
075      {
076          global $config, $db, $template, $user;
077   
078          $captcha_vars = array(
079              'recaptcha_pubkey'                => 'RECAPTCHA_PUBKEY',
080              'recaptcha_privkey'                => 'RECAPTCHA_PRIVKEY',
081          );
082   
083          $module->tpl_name = 'captcha_recaptcha_acp';
084          $module->page_title = 'ACP_VC_SETTINGS';
085          $form_key = 'acp_captcha';
086          add_form_key($form_key);
087   
088          $submit = request_var('submit', '');
089   
090          if ($submit && check_form_key($form_key))
091          {
092              $captcha_vars = array_keys($captcha_vars);
093              foreach ($captcha_vars as $captcha_var)
094              {
095                  $value = request_var($captcha_var, '');
096                  if ($value)
097                  {
098                      set_config($captcha_var, $value);
099                  }
100              }
101   
102              add_log('admin', 'LOG_CONFIG_VISUAL');
103              trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($module->u_action));
104          }
105          else if ($submit)
106          {
107              trigger_error($user->lang['FORM_INVALID'] . adm_back_link($module->u_action));
108          }
109          else
110          {
111              foreach ($captcha_vars as $captcha_var => $template_var)
112              {
113                  $var = (isset($_REQUEST[$captcha_var])) ? request_var($captcha_var, '') : ((isset($config[$captcha_var])) ? $config[$captcha_var] : '');
114                  $template->assign_var($template_var, $var);
115              }
116   
117              $template->assign_vars(array(
118                  'CAPTCHA_PREVIEW'    => $this->get_demo_template($id),
119                  'CAPTCHA_NAME'        => $this->get_service_name(),
120                  'U_ACTION'            => $module->u_action,
121              ));
122   
123          }
124      }
125   
126      // not needed
127      function execute_demo()
128      {
129      }
130   
131      // not needed
132      function execute()
133      {
134      }
135   
136      function get_template()
137      {
138          global $config, $user, $template, $phpbb_root_path, $phpEx;
139   
140          if ($this->is_solved())
141          {
142              return false;
143          }
144          else
145          {
146              $contact_link = phpbb_get_board_contact_link($config, $phpbb_root_path, $phpEx);
147              $explain = $user->lang(($this->type != CONFIRM_POST) ? 'CONFIRM_EXPLAIN' : 'POST_CONFIRM_EXPLAIN', '<a href="' . $contact_link . '">', '</a>');
148   
149              $template->assign_vars(array(
150                  'RECAPTCHA_SERVER'            => $this->recaptcha_server,
151                  'RECAPTCHA_PUBKEY'            => isset($config['recaptcha_pubkey']) ? $config['recaptcha_pubkey'] : '',
152                  'RECAPTCHA_ERRORGET'        => '',
153                  'S_RECAPTCHA_AVAILABLE'        => self::is_available(),
154                  'S_CONFIRM_CODE'            => true,
155                  'S_TYPE'                    => $this->type,
156                  'L_CONFIRM_EXPLAIN'            => $explain,
157              ));
158   
159              return 'captcha_recaptcha.html';
160          }
161      }
162   
163      function get_demo_template($id)
164      {
165          return $this->get_template();
166      }
167   
168      function get_hidden_fields()
169      {
170          $hidden_fields = array();
171   
172          // this is required for posting.php - otherwise we would forget about the captcha being already solved
173          if ($this->solved)
174          {
175              $hidden_fields['confirm_code'] = $this->code;
176          }
177          $hidden_fields['confirm_id'] = $this->confirm_id;
178          return $hidden_fields;
179      }
180   
181      function uninstall()
182      {
183          $this->garbage_collect(0);
184      }
185   
186      function install()
187      {
188          return;
189      }
190   
191      function validate()
192      {
193          if (!parent::validate())
194          {
195              return false;
196          }
197          else
198          {
199              return $this->recaptcha_check_answer();
200          }
201      }
202   
203  // Code from here on is based on recaptchalib.php
204  /*
205   * This is a PHP library that handles calling reCAPTCHA.
206   *    - Documentation and latest version
207   *          http://recaptcha.net/plugins/php/
208   *    - Get a reCAPTCHA API Key
209   *          http://recaptcha.net/api/getkey
210   *    - Discussion group
211   *          http://groups.google.com/group/recaptcha
212   *
213   * Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net
214   * AUTHORS:
215   *   Mike Crawford
216   *   Ben Maurer
217   *
218   * Permission is hereby granted, free of charge, to any person obtaining a copy
219   * of this software and associated documentation files (the "Software"), to deal
220   * in the Software without restriction, including without limitation the rights
221   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
222   * copies of the Software, and to permit persons to whom the Software is
223   * furnished to do so, subject to the following conditions:
224   *
225   * The above copyright notice and this permission notice shall be included in
226   * all copies or substantial portions of the Software.
227   *
228   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
229   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
230   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
231   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
232   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
233   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
234   * THE SOFTWARE.
235   */
236   
237      /**
238      * Submits an HTTP POST to a reCAPTCHA server
239      * @param string $host
240      * @param string $path
241      * @param array $data
242      * @param int port
243      * @return array response
244      */
245      function _recaptcha_http_post($host, $path, $data, $port = 80)
246      {
247          $req = $this->_recaptcha_qsencode ($data);
248   
249          $http_request  = "POST $path HTTP/1.0\r\n";
250          $http_request .= "Host: $host\r\n";
251          $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
252          $http_request .= "Content-Length: " . strlen($req) . "\r\n";
253          $http_request .= "User-Agent: reCAPTCHA/PHP/phpBB\r\n";
254          $http_request .= "\r\n";
255          $http_request .= $req;
256   
257          $response = '';
258          if (false == ($fs = @fsockopen($host, $port, $errno, $errstr, 10)))
259          {
260              trigger_error('RECAPTCHA_SOCKET_ERROR', E_USER_ERROR);
261          }
262   
263          fwrite($fs, $http_request);
264   
265          while (!feof($fs))
266          {
267              // One TCP-IP packet
268              $response .= fgets($fs, 1160);
269          }
270          fclose($fs);
271          $response = explode("\r\n\r\n", $response, 2);
272   
273          return $response;
274      }
275   
276      /**
277      * Calls an HTTP POST function to verify if the user's guess was correct
278      * @param array $extra_params an array of extra variables to post to the server
279      * @return ReCaptchaResponse
280      */
281      function recaptcha_check_answer($extra_params = array())
282      {
283          global $config, $user;
284   
285          //discard spam submissions
286          if ($this->challenge == null || strlen($this->challenge) == 0 || $this->response == null || strlen($this->response) == 0)
287          {
288              return $user->lang['RECAPTCHA_INCORRECT'];
289          }
290   
291          $response = $this->_recaptcha_http_post($this->recaptcha_verify_server, $this->recaptcha_verify_path,
292              array(
293                  'privatekey'    => $config['recaptcha_privkey'],
294                  'remoteip'        => $user->ip,
295                  'challenge'        => $this->challenge,
296                  'response'        => $this->response
297              ) + $extra_params
298          );
299   
300          $answers = explode("\n", $response[1]);
301   
302          if (trim($answers[0]) === 'true')
303          {
304              $this->solved = true;
305              return false;
306          }
307          else
308          {
309              return $user->lang['RECAPTCHA_INCORRECT'];
310          }
311      }
312   
313      /**
314      * Encodes the given data into a query string format
315      * @param $data - array of string elements to be encoded
316      * @return string - encoded request
317      */
318      function _recaptcha_qsencode($data)
319      {
320          $req = '';
321          foreach ($data as $key => $value)
322          {
323              $req .= $key . '=' . urlencode(stripslashes($value)) . '&';
324          }
325   
326          // Cut the last '&'
327          $req = substr($req, 0, strlen($req) - 1);
328          return $req;
329      }
330  }
331