arnaucube
arnaucube/goCaptchaPublic Self-hosted repository
goCaptcha/captcha.go
captcha.goRaw
 1package main
 2
 3import (
 4	"math/rand"
 5	"os/exec"
 6	"strings"
 7)
 8
 9type Captcha struct {
10	Id       string   `json:"id"`
11	Imgs     []string `json:"imgs"`
12	Question string   `json:"question"`
13	Date     string   `json:"date"`
14}
15type CaptchaSolution struct {
16	Id           string   `json:"id"`
17	Imgs         []string `json:"imgs"`
18	ImgsSolution []string `json:"imgssolution"`
19	Question     string   `json:"question"`
20	Date         string   `json:"date"`
21}
22type ImgFakePath struct {
23	CaptchaId string `json:"captchaid"`
24	Real      string `json:"real"`
25	Fake      string `json:"fake"`
26}
27
28func generateUUID() string {
29	out, err := exec.Command("uuidgen").Output()
30	check(err)
31	uuid := string(out)
32	uuid = strings.Replace(uuid, "\n", "", -1)
33	return uuid
34}
35func generateRandInt(min int, max int) int {
36	//rand.Seed(time.Now().UTC().UnixNano())
37	return rand.Intn(max-min) + min
38}
39func generateCaptcha(count int) Captcha {
40	var captcha Captcha
41	var captchaSol CaptchaSolution
42
43	captcha.Id = generateUUID()
44	captchaSol.Id = captcha.Id
45
46	for i := 0; i < count; i++ {
47		nCateg := generateRandInt(0, len(categDataset))
48		nImg := generateRandInt(0, len(dataset[categDataset[nCateg]]))
49		//imgFakePath
50		var imgFakePath ImgFakePath
51		imgFakePath.CaptchaId = captcha.Id
52		imgFakePath.Real = categDataset[nCateg] + "/" + dataset[categDataset[nCateg]][nImg]
53		imgFakePath.Fake = generateUUID() + ".png"
54		err := imgFakePathCollection.Insert(imgFakePath)
55		check(err)
56		captcha.Imgs = append(captcha.Imgs, imgFakePath.Fake)
57		captchaSol.Imgs = append(captchaSol.Imgs, dataset[categDataset[nCateg]][nImg])
58		captchaSol.ImgsSolution = append(captchaSol.ImgsSolution, categDataset[nCateg])
59	}
60	captcha.Question = "Select all leopards"
61	captchaSol.Question = "Select all leopards"
62	err := captchaCollection.Insert(captcha)
63	check(err)
64	err = captchaSolutionCollection.Insert(captchaSol)
65	check(err)
66	return captcha
67}