Stanislav N. aka pztrn
850fbb55ab
Added captcha generation. As we're working without JS - there is no possibility to reload image, only if user will reload whole web page. Some design works - set monospace font for paste textarea (will use system-defined default monospace font) and lowered font size in paste views.
215 lines
6.5 KiB
Go
215 lines
6.5 KiB
Go
// Copyright 2011 Dmitry Chestnykh. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package captcha
|
|
|
|
const (
|
|
fontWidth = 11
|
|
fontHeight = 18
|
|
blackChar = 1
|
|
)
|
|
|
|
var font = [][]byte{
|
|
{ // 0
|
|
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
|
0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,
|
|
0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
|
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
},
|
|
{ // 1
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
},
|
|
{ // 2
|
|
0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
|
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
|
1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0,
|
|
0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
|
|
0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
|
|
0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
},
|
|
{ // 3
|
|
0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
|
1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
|
|
0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
|
|
1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
|
0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
},
|
|
{ // 4
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0,
|
|
0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
|
|
0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
|
|
0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
},
|
|
{ // 5
|
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
|
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
|
0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
},
|
|
{ // 6
|
|
0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
|
|
0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
|
|
0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0,
|
|
1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
|
|
1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0,
|
|
1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1,
|
|
0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,
|
|
0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
|
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
},
|
|
{ // 7
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
|
|
},
|
|
{ // 8
|
|
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
|
|
0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
|
0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
|
|
0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0,
|
|
0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,
|
|
1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
|
|
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
},
|
|
{ // 9
|
|
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
|
0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1,
|
|
0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1,
|
|
0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
|
|
0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
|
|
0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
|
|
0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
|
|
},
|
|
}
|