arnaucube
arnaucube/go-dvotePublic Self-hosted repository
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}