arnaucube
arnaucube/goCaptchaPublic Self-hosted repository
goCaptcha/serverRoutes.go
serverRoutes.goRaw
 1package main
 2
 3import (
 4	"encoding/json"
 5	"fmt"
 6	"image/jpeg"
 7	"io/ioutil"
 8	"net/http"
 9	"strings"
10
11	"gopkg.in/mgo.v2/bson"
12
13	"github.com/gorilla/mux"
14)
15
16type Routes []Route
17
18var routes = Routes{
19	Route{
20		"Index",
21		"GET",
22		"/",
23		Index,
24	},
25	Route{
26		"GetImage",
27		"GET",
28		"/image/{imageName}",
29		GetImage,
30	},
31	Route{
32		"GetCaptcha",
33		"GET",
34		"/captcha",
35		GetCaptcha,
36	},
37	Route{
38		"AnswerCaptcha",
39		"POST",
40		"/answer",
41		AnswerCaptcha,
42	},
43}
44
45//ROUTES
46
47func Index(w http.ResponseWriter, r *http.Request) {
48	fmt.Fprintln(w, "ask for images in /r")
49}
50
51func GetImage(w http.ResponseWriter, r *http.Request) {
52	vars := mux.Vars(r)
53	imageName := vars["imageName"]
54
55	imgFakePath := ImgFakePath{}
56	err := imgFakePathCollection.Find(bson.M{"fake": imageName}).One(&imgFakePath)
57	check(err)
58
59	fmt.Println(serverConfig.ImgsFolder + "/" + imgFakePath.Real)
60
61	file, err := ioutil.ReadFile(serverConfig.ImgsFolder + "/" + imgFakePath.Real)
62	if err != nil {
63		fmt.Fprintln(w, err)
64	}
65
66	pathSplited := strings.Split(imgFakePath.Real, ".")
67	imageExtension := pathSplited[len(pathSplited)-1]
68	img, err := dataToImage(file, imageExtension)
69
70	if err != nil {
71		fmt.Fprintln(w, "image "+imageName+" does not exist in server")
72	} else {
73		jpeg.Encode(w, img, nil) // Write to the ResponseWriter
74	}
75}
76func GetCaptcha(w http.ResponseWriter, r *http.Request) {
77
78	resp := generateCaptcha(6)
79	jsonResp, err := json.Marshal(resp)
80	check(err)
81	fmt.Fprintln(w, string(jsonResp))
82}
83
84func AnswerCaptcha(w http.ResponseWriter, r *http.Request) {
85	decoder := json.NewDecoder(r.Body)
86	var captchaAnswer CaptchaAnswer
87	err := decoder.Decode(&captchaAnswer)
88	check(err)
89	defer r.Body.Close()
90
91	resp := validateCaptcha(captchaAnswer)
92	jsonResp, err := json.Marshal(resp)
93	check(err)
94	fmt.Fprintln(w, string(jsonResp))
95}