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}