go-dvote/net/net.go
net/net.goRaw
1package net
2
3import (
4 "encoding/json"
5 "fmt"
6 "net/http"
7 "io"
8 "github.com/vocdoni/dvote-relay/batch"
9 "github.com/vocdoni/dvote-relay/types"
10)
11
12
13func parse(rw http.ResponseWriter, request *http.Request) {
14 decoder := json.NewDecoder(request.Body)
15
16 var e types.Envelope
17 var b types.Ballot
18
19 err := decoder.Decode(&e)
20 if err != nil {
21 panic(err)
22 }
23
24 err = json.Unmarshal(e.Ballot, &b)
25 if err != nil {
26 panic(err)
27 }
28
29
30 //check PoW
31 //check key
32 //decrypt
33 //check franchise
34 //construct packet
35
36 //this should should be randomized, or actually taken from input
37 //b.PID = "1"
38 //b.Nullifier = []byte{1,2,3}
39 //b.Vote = []byte{4,5,6}
40 //b.Franchise = []byte{7,8,9}
41
42 err = batch.Add(b)
43 if err != nil {
44 panic(err)
45 }
46
47 j, err := json.Marshal(e)
48 io.WriteString(rw, string(j))
49}
50
51func Listen(port string) {
52 http.HandleFunc("/submit", parse)
53 //add waitgroup
54 func() {
55 fmt.Println("serving on " + port)
56 err := http.ListenAndServe(":" + port, nil)
57 if err != nil {
58 panic("ListenAndServe: " + err.Error())
59 }
60 }()
61}