Completed
Push — master ( 0c7694...86aa7a )
by Владислав
02:18
created

DeCaptchaWiki::view()   C

Complexity

Conditions 8
Paths 6

Size

Total Lines 42
Code Lines 22

Duplication

Lines 10
Ratio 23.81 %

Importance

Changes 0
Metric Value
dl 10
loc 42
rs 5.3846
c 0
b 0
f 0
cc 8
eloc 22
nc 6
nop 0
1
<?php
2
3
namespace jumper423\decaptcha\core;
4
5
use jumper423\decaptcha\services\RuCaptcha;
6
7
/**
8
 * Class DeCaptchaAbstract.
9
 */
10
class DeCaptchaWiki
11
{
12
    private $texts = [];
13
14
    public function __construct()
15
    {
16
        $this->texts = [
17
            DeCaptchaBase::ACTION_FIELD_KEY => [
18
                'name' => [
19
                    'ru' => 'Ключ',
20
                ],
21
                'desc' => [
22
                    'ru' => 'Ключ от учетной записи',
23
                ],
24
            ],
25
            DeCaptchaBase::ACTION_FIELD_LANGUAGE => [
26
                'name' => [
27
                    'ru' => 'Язык',
28
                ],
29
                'desc' => [
30
                    'ru' => 'На каком языке текст на капче',
31
                ],
32
            ],
33
            DeCaptchaBase::ACTION_FIELD_FILE => [
34
                'name' => [
35
                    'ru' => 'Картинка',
36
                ],
37
                'desc' => [
38
                    'ru' => 'Путь на файл с картинкой или ссылка на него',
39
                ],
40
            ],
41
            DeCaptchaBase::ACTION_FIELD_PHRASE => [
42
                'name' => [
43
                    'ru' => 'Несколько слов',
44
                ],
45
                'desc' => [
46
                    'ru' => 'Работник должен ввести текст с одним или несколькими пробелами',
47
                ],
48
            ],
49
            DeCaptchaBase::ACTION_FIELD_REGSENSE => [
50
                'name' => [
51
                    'ru' => 'Регистр',
52
                ],
53
                'desc' => [
54
                    'ru' => 'Работник должен ввсести ответ с учетом регистра',
55
                ],
56
            ],
57
            DeCaptchaBase::ACTION_FIELD_NUMERIC => [
58
                'name' => [
59
                    'ru' => 'Символы',
60
                ],
61
                'desc' => [
62
                    'ru' => 'Какие символы используется в капче',
63
                ],
64
            ],
65
            DeCaptchaBase::ACTION_FIELD_CALC => [
66
                'name' => [
67
                    'ru' => 'Вычисление',
68
                ],
69
                'desc' => [
70
                    'ru' => 'На капче изображенно математичекая выражение и её необходимо решить',
71
                ],
72
            ],
73
            DeCaptchaBase::ACTION_FIELD_MIN_LEN => [
74
                'name' => [
75
                    'ru' => 'Длина min',
76
                ],
77
                'desc' => [
78
                    'ru' => 'Минимальная длина капчи',
79
                ],
80
            ],
81
            DeCaptchaBase::ACTION_FIELD_MAX_LEN => [
82
                'name' => [
83
                    'ru' => 'Длина max',
84
                ],
85
                'desc' => [
86
                    'ru' => 'Максимальная длина капчи',
87
                ],
88
            ],
89
            DeCaptchaBase::ACTION_FIELD_QUESTION => [
90
                'name' => [
91
                    'ru' => 'Вопрос',
92
                ],
93
                'desc' => [
94
                    'ru' => 'На изображении задан вопрос, работник должен написать ответ',
95
                ],
96
            ],
97
            DeCaptchaBase::ACTION_FIELD_IS_RUSSIAN => [
98
                'name' => [
99
                    'ru' => 'Кириллица',
100
                ],
101
                'desc' => [
102
                    'ru' => 'На изображении присутствуют русские символы',
103
                ],
104
            ],
105
            DeCaptchaBase::ACTION_FIELD_LANGUAGE => [
106
                'name' => [
107
                    'ru' => 'Язык',
108
                ],
109
                'desc' => [
110
                    'ru' => 'Символы какого языка размещенны на капче',
111
                ],
112
            ],
113
            DeCaptchaBase::ACTION_FIELD_HEADER_ACAO => [
114
                'name' => [
115
                    'ru' => 'Кросс-доменный',
116
                ],
117
                'desc' => [
118
                    'ru' => 'Необходимо для кросс-доменных AJAX запросов в браузерных приложениях.',
119
                ],
120
            ],
121
            DeCaptchaBase::ACTION_FIELD_TEXTINSTRUCTIONS => [
122
                'name' => [
123
                    'ru' => 'Инструкция',
124
                ],
125
                'desc' => [
126
                    'ru' => 'Текстовая капча или инструкция для прохождения капчи.',
127
                ],
128
            ],
129
            DeCaptchaBase::ACTION_FIELD_PINGBACK => [
130
                'name' => [
131
                    'ru' => 'Ответ на',
132
                ],
133
                'desc' => [
134
                    'ru' => 'Указание для сервера, что после распознания изображения, нужно отправить ответ на указанный адрес.',
135
                ],
136
            ],
137
            DeCaptchaBase::ACTION_FIELD_LABEL => [
138
                'name' => [
139
                    'ru' => 'От куда',
140
                ],
141
                'desc' => [
142
                    'ru' => 'Пояснение от куда пришла капча ("vk", "google", "recaptcha", "yandex", "mailru", "yahoo" и т.д.).',
143
                ],
144
            ],
145
            DeCaptchaBase::ACTION_FIELD_PAGEURL => [
146
                'name' => [
147
                    'ru' => 'Адрес',
148
                ],
149
                'desc' => [
150
                    'ru' => 'Адрес страницы на которой решается капча.',
151
                ],
152
            ],
153
            DeCaptchaBase::ACTION_FIELD_GOOGLEKEY => [
154
                'name' => [
155
                    'ru' => 'Google key',
156
                ],
157
                'desc' => [
158
                    'ru' => 'Ключ-индентификатор рекапчи на целевой странице. <div class="g-recaptcha" data-sitekey="ВОТ_ЭТОТ"></div>',
159
                ],
160
            ],
161
            DeCaptchaBase::ACTION_FIELD_GOOGLETOKEN => [
162
                'name' => [
163
                    'ru' => 'Google token',
164
                ],
165
                'desc' => [
166
                    'ru' => 'Секретный токен для предыдущей версии рекапчи. В большинстве случаев сайты используют новую версию и этот токен не требуется.
167
 Подробнее
168
Секретный токен генерируется на сервере Google и вставляется на страницу в атрибуте data-stoken. Выглядит это примерно так:
169
```<script type="text/javascript" src="...." data-type="normal"  data-ray="2ef1e98c77332d9b" async
170
data-sitekey="6LfOYgoTAAAAAInWDVTLSc8Yblab-c9DaLblabla"
171
data-stoken="urFaI2UjzL9Q4gf4a-aeCNAePAZUuq7nYbX40BVb69aXVq-apf_k-kZ7i-iXE2WxkokWB9rZv-ofOJPjbEh4YN3SyoVrsIorNOpeGSWx2D0"></script>```
172
Токен действует пару минут после генерации, затем нужно снова зайти на страницу и получить его.',
173
                ],
174
            ],
175
            DeCaptchaBase::ACTION_FIELD_PROXYTYPE => [
176
                'name' => [
177
                    'ru' => 'Тип прокси',
178
                ],
179
                'desc' => [
180
                    'ru' => 'Тип прокси (http, socks4, ...)',
181
                ],
182
            ],
183
            DeCaptchaBase::ACTION_FIELD_PROXY => [
184
                'name' => [
185
                    'ru' => 'Адрес прокси',
186
                ],
187
                'desc' => [
188
                    'ru' => 'IP адрес прокси ipv4/ipv6.',
189
                ],
190
            ],
191
            DeCaptchaBase::ACTION_FIELD_PROXYPORT => [
192
                'name' => [
193
                    'ru' => 'Порт прокси',
194
                ],
195
                'desc' => [
196
                    'ru' => 'Порт прокси.',
197
                ],
198
            ],
199
            DeCaptchaBase::ACTION_FIELD_PROXYLOGIN => [
200
                'name' => [
201
                    'ru' => 'Логин прокси',
202
                ],
203
                'desc' => [
204
                    'ru' => 'Логин от прокси-сервера.',
205
                ],
206
            ],
207
            DeCaptchaBase::ACTION_FIELD_PROXYPASS => [
208
                'name' => [
209
                    'ru' => 'Пароль прокси',
210
                ],
211
                'desc' => [
212
                    'ru' => 'Пароль от прокси-сервера.',
213
                ],
214
            ],
215
            DeCaptchaBase::ACTION_FIELD_USERAGENT => [
216
                'name' => [
217
                    'ru' => 'User-Agent браузера',
218
                ],
219
                'desc' => [
220
                    'ru' => 'User-Agent браузера, используемый в эмуляции. Необходимо использовать подпись современного браузера, 
221
иначе Google будет возвращать ошибку, требуя обновить браузер.',
222
                ],
223
            ],
224
            DeCaptchaBase::ACTION_FIELD_COOKIES => [
225
                'name' => [
226
                    'ru' => 'Куки',
227
                ],
228
                'desc' => [
229
                    'ru' => 'Дополнительные cookies которые мы должны использовать во время взаимодействия с целевой страницей.',
230
                ],
231
            ],
232
        ];
233
    }
234
235
    public function view()
236
    {
237
        $rucaptcha = new RuCaptcha([]);
238
        /*
239
         * Markdown | Less | Pretty
240
            --- | --- | ---
241
            *Still* | `renders` | **nicely**
242
            1 | 2 | 3
243
         *
244
         * */
245
        echo ' Название | Код | Тип | Обязательное значение | Значение по умолчания | Возможные значения | Описание '.PHP_EOL;
246
        echo ' --- | --- | --- | --- | --- | ---| --- '.PHP_EOL;
247
        $rr = (new \ReflectionClass($rucaptcha))->getConstants();
248
//        print_r($rr);
0 ignored issues
show
Unused Code Comprehensibility introduced by
67% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
249
        foreach ($rucaptcha->actions[RuCaptcha::ACTION_RECOGNIZE][RuCaptcha::ACTION_FIELDS] as $param => $setting) {
250
            if (array_key_exists(RuCaptcha::PARAM_SLUG_NOTWIKI, $setting) && $setting[RuCaptcha::PARAM_SLUG_NOTWIKI] === true) {
251
                continue;
252
            }
253 View Code Duplication
            if (isset($this->texts[$param])) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
254
                echo " {$this->texts[$param]['name']['ru']} |";
255
            } else {
256
                echo " |";
257
            }
258
            echo " {$this->ggg($rr, 'ACTION_FIELD_', $param)} |";
259
            echo ' '.substr($this->ggg($rr, 'PARAM_FIELD_TYPE_', $setting[RuCaptcha::PARAM_SLUG_TYPE]), 17).' |';
260
            echo ' '.(array_key_exists(RuCaptcha::PARAM_SLUG_REQUIRE, $setting) ? '+' : '-').' |';
261
            echo ' '.(array_key_exists(RuCaptcha::PARAM_SLUG_DEFAULT, $setting) ? $setting[RuCaptcha::PARAM_SLUG_DEFAULT] : '').' |';
262
            echo ' |';
263 View Code Duplication
            if (isset($this->texts[$param])) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
264
                echo " {$this->texts[$param]['desc']['ru']} ";
265
            } else {
266
                echo " ";
267
            }
268
            echo PHP_EOL;
269
//            echo " --- | --- | --- | --- | ---| --- " . PHP_EOL;
0 ignored issues
show
Unused Code Comprehensibility introduced by
44% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
270
//            print_r($params);
271
        }
272
//        $rr = get_defined_constants(true);
0 ignored issues
show
Unused Code Comprehensibility introduced by
56% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
273
//        print_r(array_keys($rr));
274
//        print_r($rr);
275
//        file_put_contents(__DIR__ . '/12331123', json_encode(get_defined_constants(true)));
276
    }
277
278
    public function ggg($constants, $keyMask, $value)
279
    {
280
        foreach ($constants as $key => $val) {
281
            if (stripos($key, $keyMask) !== false && $val === $value) {
282
                return $key;
283
            }
284
        }
285
286
        return null;
287
    }
288
}
289