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}