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. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
recaptcha.php
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