@@ -22,11 +22,11 @@
22 22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "config.h"
23 23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <assert.h>
24 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "captcha.h"
25 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if INTERFACE
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define CAPTCHA 3 /* Which captcha rendering to use */
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define CAPTCHA 2 /* Which captcha rendering to use */
28 28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29 29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30 30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31 31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Convert a hex digit into a value between 0 and 15
32 32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -69,22 +69,26 @@
69 69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Render an 8-character hexadecimal string as ascii art.
70 70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Space to hold the result is obtained from malloc() and should be freed
71 71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by the caller.
72 72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
73 73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *captcha_render(const char *zPw){
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *z = fossil_malloc( 9*6*strlen(zPw) + 7 );
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z = fossil_malloc( 9*12*3*strlen(zPw) + 8 );
75 75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, j, k, m;
76 76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
77 77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
k = 0;
78 78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<6; i++){
79 79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; zPw[j]; j++){
80 80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned char v = hex_digit_value(zPw[j]);
81 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = (aFont1[v] >> ((5-i)*4)) & 0xf;
82 82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(m=8; m>=1; m = m>>1){
83 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( v & m ){
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z[k++] = 'X';
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z[k++] = 'X';
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = 0xe2;
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = 0x96;
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = 0x88;
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = 0xe2;
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = 0x96;
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = 0x88;
86 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
87 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z[k++] = ' ';
88 92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z[k++] = ' ';
89 93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
90 94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -96,13 +100,73 @@
96 100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z[k] = 0;
97 101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return z;
98 102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99 103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* CAPTCHA==1 */
100 104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
102 105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if CAPTCHA==2
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static const char *const azFont2[] = {
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A 5x7 pixel bitmap font for hexadecimal digits
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const unsigned char aFont2[] = {
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 0 */ 0x0e, 0x13, 0x15, 0x19, 0x11, 0x11, 0x0e,
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 1 */ 0x02, 0x06, 0x0A, 0x02, 0x02, 0x02, 0x02,
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 2 */ 0x0e, 0x11, 0x01, 0x02, 0x04, 0x08, 0x1f,
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 3 */ 0x0e, 0x11, 0x01, 0x06, 0x01, 0x11, 0x0e,
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 4 */ 0x02, 0x06, 0x0A, 0x12, 0x1f, 0x02, 0x02,
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 5 */ 0x1f, 0x10, 0x1e, 0x01, 0x01, 0x11, 0x0e,
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 6 */ 0x0e, 0x11, 0x10, 0x1e, 0x11, 0x11, 0x0e,
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 7 */ 0x1f, 0x01, 0x02, 0x04, 0x08, 0x08, 0x08,
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 8 */ 0x0e, 0x11, 0x11, 0x0e, 0x11, 0x11, 0x0e,
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 9 */ 0x0e, 0x11, 0x11, 0x0f, 0x01, 0x11, 0x0e,
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* A */ 0x0e, 0x11, 0x11, 0x11, 0x1f, 0x11, 0x11,
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* B */ 0x1e, 0x11, 0x11, 0x1e, 0x11, 0x11, 0x1e,
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* C */ 0x0e, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0e,
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* D */ 0x1c, 0x12, 0x11, 0x11, 0x11, 0x12, 0x1c,
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* E */ 0x1f, 0x10, 0x10, 0x1c, 0x10, 0x10, 0x1f,
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* F */ 0x1f, 0x10, 0x10, 0x1e, 0x10, 0x10, 0x10,
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Render an 8-character hexadecimal string as ascii art.
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Space to hold the result is obtained from malloc() and should be freed
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by the caller.
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *captcha_render(const char *zPw){
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z = fossil_malloc( 160*strlen(zPw) + 9 );
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i, j, k, m;
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ k = 0;
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<7; i++){
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(j=0; zPw[j]; j++){
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned char v = hex_digit_value(zPw[j]);
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ v = aFont2[v*7+i];
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(m=16; m>=1; m = m>>1){
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( v & m ){
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = 0xe2;
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = 0x96;
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = 0x88;
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = 0xe2;
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = 0x96;
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = 0x88;
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = ' ';
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = ' ';
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = ' ';
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = ' ';
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k++] = '\n';
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[k] = 0;
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return z;
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* CAPTCHA==2 */
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if CAPTCHA==3
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char *const azFont3[] = {
104 168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 0 */
105 169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" __ ",
106 170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" / \\ ",
107 171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"| () |",
108 172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" \\__/ ",
@@ -210,24 +274,24 @@
210 274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
211 275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
k = 0;
212 276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<4; i++){
213 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; zPw[j]; j++){
214 278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned char v = hex_digit_value(zPw[j]);
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zChar = azFont2[4*v + i];
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zChar = azFont3[4*v + i];
216 280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(m=0; zChar[m]; m++){
217 281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z[k++] = zChar[m];
218 282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
219 283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
220 284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z[k++] = '\n';
221 285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
222 286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z[k] = 0;
223 287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return z;
224 288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* CAPTCHA==2 */
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* CAPTCHA==3 */
226 290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if CAPTCHA==3
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static const char *const azFont3[] = {
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if CAPTCHA==4
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char *const azFont4[] = {
229 293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 0 */
230 294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ___ ",
231 295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" / _ \\ ",
232 296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"| | | |",
233 297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"| | | |",
@@ -398,11 +462,11 @@
398 462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
399 463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default:
400 464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
y = 0;
401 465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
402 466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zChar = azFont3[6*v + i];
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zChar = azFont4[6*v + i];
404 468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( y && zChar[0]==' ' ){ y--; zChar++; }
405 469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( y && z[k-1]==' ' ){ y--; k--; }
406 470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(m=0; zChar[m]; m++){
407 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z[k++] = zChar[m];
408 472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -410,11 +474,11 @@
410 474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z[k++] = '\n';
411 475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
412 476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z[k] = 0;
413 477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return z;
414 478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* CAPTCHA==3 */
479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* CAPTCHA==4 */
416 480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
417 481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
418 482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: test-captcha
419 483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
420 484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Render an ASCII-art captcha for numbers given on the command line.
@@ -530,27 +594,32 @@
530 594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate a captcha display together with the necessary hidden parameter
531 595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for the seed and the entry box into which the user will type the text of
532 596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the captcha. This is typically done at the very bottom of a form.
533 597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
534 598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is a no-op if no captcha is required.
599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Flag values:
601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x01 Show the "Submit" button in the form.
603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x02 Always generate the captcha, even if not required
535 604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void captcha_generate(int showButton){
605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void captcha_generate(int mFlags){
537 606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int uSeed;
538 607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDecoded;
539 608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zCaptcha;
540 609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !captcha_needed() ) return;
610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !captcha_needed() && (mFlags & 0x02)==0 ) return;
542 611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
uSeed = captcha_seed();
543 612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDecoded = captcha_decode(uSeed);
544 613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCaptcha = captcha_render(zDecoded);
545 614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <div class="captcha"><table class="captcha"><tr><td><pre class="captcha">
546 615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ %h(zCaptcha)
547 616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </pre>
548 617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ Enter security code shown above:
549 618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="hidden" name="captchaseed" value="%u(uSeed)">
550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <input type="text" name="captcha" size=8>
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( showButton ){
619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <input type="text" name="captcha" size="8" autofocus>
620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( mFlags & 0x01 ){
552 621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="submit" value="Submit">
553 622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
554 623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <br/>\
555 624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
captcha_speakit_button(uSeed, 0);
556 625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </td></tr></table></div>
@@ -574,67 +643,93 @@
574 643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </script>
575 644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
576 645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
577 646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
578 647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WEBPAGE: test-captcha
579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Test the captcha-generator by rendering the value of the name= query
580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** parameter using ascii-art. If name= is omitted, show a random 16-digit
581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** hexadecimal number.
648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the name query parameter is provided, then render the hex value of
650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the name using the captcha font.
651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Otherwise render the captcha screen. The "show-button" parameter causes
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the submit button to be rendered.
582 654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
583 655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void captcha_test(void){
584 656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zPw = P("name");
585 657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zPw==0 || zPw[0]==0 ){
586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u64 x;
587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_randomness(sizeof(x), &x);
588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zPw = mprintf("%016llx", x);
589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- style_set_current_feature("test");
591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- style_header("Captcha Test");
592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <pre>
593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ %s(captcha_render(zPw))
594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ </pre>
595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- style_finish_page();
658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void)exclude_spiders(1);
659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <hr><p>The captcha is shown above. Add a name=HEX query parameter
660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ to see how HEX would be rendered in the current captcha font.
661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <p>captcha_is_correct(1) returns %d(captcha_is_correct(1)).
662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_finish_page();
663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_set_current_feature("test");
665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_header("Captcha Test");
666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <pre class="captcha">
667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ %s(captcha_render(zPw))
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </pre>
669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_finish_page();
670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
596 671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
597 672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
598 673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Check to see if the current request is coming from an agent that might
600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** be a spider. If the agent is not a spider, then return 0 without doing
601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** anything. But if the user agent appears to be a spider, offer
602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a captcha challenge to allow the user agent to prove that it is human
603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and return non-zero.
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Check to see if the current request is coming from an agent that
675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** self-identifies as a spider.
676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the agent does not claim to be a spider or if the user has logged
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in (even as anonymous), then return 0 without doing anything.
679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** But if the user agent does self-identify as a spider and there is
681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** no login, offer a captcha challenge to allow the user agent to prove
682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that he is human and return non-zero.
683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the bTest argument is non-zero, then show the captcha regardless of
685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** how the agent identifies. This is used for testing only.
604 686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int exclude_spiders(void){
606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zCookieValue;
607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zCookieName;
608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( g.isHuman ) return 0;
609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if 0
610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {
611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zReferer = P("HTTP_REFERER");
612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zReferer && strncmp(g.zBaseURL, zReferer, strlen(g.zBaseURL))==0 ){
613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zCookieName = mprintf("fossil-cc-%.10s", db_get("project-code","x"));
618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zCookieValue = P(zCookieName);
619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zCookieValue && atoi(zCookieValue)==1 ) return 0;
620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( captcha_is_correct(0) ){
621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cgi_set_cookie(zCookieName, "1", login_cookie_path(), 8*3600);
622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int exclude_spiders(int bTest){
688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !bTest && (g.isHuman || g.zLogin!=0) ) return 0;
624 689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
625 690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This appears to be a spider. Offer the captcha */
626 691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_set_current_feature("captcha");
627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- style_header("Verification");
628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <form method='POST' action='%s(g.zPath)'>
629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cgi_query_parameters_to_hidden();
630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <p>Please demonstrate that you are human, not a spider or robot</p>
631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- captcha_generate(1);
692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_header("I think you are a robot");
693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_submenu_enable(0);
694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <form method='POST' action='%R/captchacb'>
695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <p>You seem like a robot.
696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @
697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <p>If you are human, you can prove that by solving the captcha below,
698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ after which you will be allowed to proceed.
699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ captcha_generate(3);
632 700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </form>
633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- style_finish_page();
701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !bTest ){
702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( P("fossil-goto")==0 ){
703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_set_cookie("fossil-goto", cgi_reconstruct_original_url(), 0, 600);
704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_append_header("X-Robot: 1\r\n");
706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_finish_page();
707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
634 708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
635 709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WEBPAGE: captchacb
713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is action for the form that is the captcha. Not intended
715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for external use.
716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the captcha is correctly solved, then an anonymous login cookie
718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is set. Regardless of whether or not the captcha was solved, this
719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** page always redirects to the fossil-goto cookie.
720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void captcha_callback(void){
722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( captcha_is_correct(1) ){
723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ login_set_anon_cookie(0, 0);
724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_append_header("X-Robot: 0\r\n");
725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ login_redirect_to_g();
726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ exclude_spiders(0);
728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
636 731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
637 732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
638 733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate a WAV file that reads aloud the hex digits given by
639 734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** zHex.
640 735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
641 736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!