Verzeichnisstruktur phpBB-3.3.15


Veröffentlicht
28.08.2024

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: 02.04.2025, 15:02 - Dateigröße: 5.08 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      private $response;
019   
020      /**
021      * Constructor
022      */
023      public function __construct()
024      {
025      }
026   
027      function init($type)
028      {
029          global $user, $request;
030   
031          $user->add_lang('captcha_recaptcha');
032          parent::init($type);
033          $this->response = $request->variable('g-recaptcha-response', '');
034      }
035   
036      public function is_available()
037      {
038          global $config, $user;
039          $user->add_lang('captcha_recaptcha');
040          return (isset($config['recaptcha_pubkey']) && !empty($config['recaptcha_pubkey']));
041      }
042   
043      /**
044      *  API function
045      */
046      function has_config()
047      {
048          return true;
049      }
050   
051      static public function get_name()
052      {
053          return 'CAPTCHA_RECAPTCHA';
054      }
055   
056      /**
057      * This function is implemented because required by the upper class, but is never used for reCaptcha.
058      */
059      function get_generator_class()
060      {
061          throw new \Exception('No generator class given.');
062      }
063   
064      function acp_page($id, $module)
065      {
066          global $config, $template, $user, $phpbb_log, $request;
067   
068          $captcha_vars = array(
069              'recaptcha_pubkey'                => 'RECAPTCHA_PUBKEY',
070              'recaptcha_privkey'                => 'RECAPTCHA_PRIVKEY',
071          );
072   
073          $module->tpl_name = 'captcha_recaptcha_acp';
074          $module->page_title = 'ACP_VC_SETTINGS';
075          $form_key = 'acp_captcha';
076          add_form_key($form_key);
077   
078          $submit = $request->variable('submit', '');
079   
080          if ($submit && check_form_key($form_key))
081          {
082              $captcha_vars = array_keys($captcha_vars);
083              foreach ($captcha_vars as $captcha_var)
084              {
085                  $value = $request->variable($captcha_var, '');
086                  if ($value)
087                  {
088                      $config->set($captcha_var, $value);
089                  }
090              }
091   
092              $recaptcha_domain = $request->variable('recaptcha_v2_domain', '', true);
093              if (in_array($recaptcha_domain, recaptcha_v3::$supported_domains))
094              {
095                  $config->set('recaptcha_v2_domain', $recaptcha_domain);
096              }
097   
098              $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_VISUAL');
099              trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($module->u_action));
100          }
101          else if ($submit)
102          {
103              trigger_error($user->lang['FORM_INVALID'] . adm_back_link($module->u_action));
104          }
105          else
106          {
107              foreach ($captcha_vars as $captcha_var => $template_var)
108              {
109                  $var = (isset($_REQUEST[$captcha_var])) ? $request->variable($captcha_var, '') : ((isset($config[$captcha_var])) ? $config[$captcha_var] : '');
110                  $template->assign_var($template_var, $var);
111              }
112   
113              $template->assign_vars(array(
114                  'CAPTCHA_PREVIEW'        => $this->get_demo_template($id),
115                  'CAPTCHA_NAME'            => $this->get_service_name(),
116                  'RECAPTCHA_V2_DOMAIN'    => $config['recaptcha_v2_domain'] ?? recaptcha_v3::GOOGLE,
117                  'RECAPTCHA_V2_DOMAINS'    => recaptcha_v3::$supported_domains,
118                  'U_ACTION'                => $module->u_action,
119              ));
120   
121          }
122      }
123   
124      // not needed
125      function execute_demo()
126      {
127      }
128   
129      // not needed
130      function execute()
131      {
132      }
133   
134      function get_template()
135      {
136          global $config, $user, $template, $phpbb_root_path, $phpEx;
137   
138          if ($this->is_solved())
139          {
140              return false;
141          }
142          else
143          {
144              $contact_link = phpbb_get_board_contact_link($config, $phpbb_root_path, $phpEx);
145              $explain = $user->lang(($this->type != CONFIRM_POST) ? 'CONFIRM_EXPLAIN' : 'POST_CONFIRM_EXPLAIN', '<a href="' . $contact_link . '">', '</a>');
146              $domain = $config['recaptcha_v2_domain'] ?? recaptcha_v3::GOOGLE;
147   
148              $template->assign_vars(array(
149                  'RECAPTCHA_SERVER'            => sprintf('//%1$s/recaptcha/api', $domain),
150                  'RECAPTCHA_PUBKEY'            => isset($config['recaptcha_pubkey']) ? $config['recaptcha_pubkey'] : '',
151                  'S_RECAPTCHA_AVAILABLE'        => self::is_available(),
152                  'S_CONFIRM_CODE'            => true,
153                  'S_TYPE'                    => $this->type,
154                  'L_CONFIRM_EXPLAIN'            => $explain,
155              ));
156   
157              return 'captcha_recaptcha.html';
158          }
159      }
160   
161      function get_demo_template($id)
162      {
163          return $this->get_template();
164      }
165   
166      function get_hidden_fields()
167      {
168          $hidden_fields = array();
169   
170          // this is required for posting.php - otherwise we would forget about the captcha being already solved
171          if ($this->solved)
172          {
173              $hidden_fields['confirm_code'] = $this->code;
174          }
175          $hidden_fields['confirm_id'] = $this->confirm_id;
176          return $hidden_fields;
177      }
178   
179      function uninstall()
180      {
181          $this->garbage_collect(0);
182      }
183   
184      function install()
185      {
186          return;
187      }
188   
189      function validate()
190      {
191          if (!parent::validate())
192          {
193              return false;
194          }
195          else
196          {
197              return $this->recaptcha_check_answer();
198          }
199      }
200   
201      /**
202      * Calls an HTTP POST function to verify if the user's guess was correct
203      *
204      * @return bool|string Returns false on success or error string on failure.
205      */
206      function recaptcha_check_answer()
207      {
208          global $config, $user;
209   
210          //discard spam submissions
211          if ($this->response == null || strlen($this->response) == 0)
212          {
213              return $user->lang['RECAPTCHA_INCORRECT'];
214          }
215   
216          $recaptcha = new \ReCaptcha\ReCaptcha($config['recaptcha_privkey']);
217          $result = $recaptcha->verify($this->response, $user->ip);
218   
219          if ($result->isSuccess())
220          {
221              $this->solved = true;
222              return false;
223          }
224          else
225          {
226              return $user->lang['RECAPTCHA_INCORRECT'];
227          }
228      }
229  }
230