package net
|
|
|
|
import (
|
|
"io"
|
|
"fmt"
|
|
"net/http"
|
|
"encoding/json"
|
|
"strings"
|
|
|
|
"github.com/vocdoni/go-dvote/batch"
|
|
"github.com/vocdoni/go-dvote/types"
|
|
)
|
|
|
|
type HttpHandle struct {
|
|
port string
|
|
path string
|
|
}
|
|
|
|
func (h *HttpHandle) Init(c string) error {
|
|
//split c to port and path
|
|
cs := strings.Split(c, "/")
|
|
h.port = cs[0]
|
|
h.path = cs[1]
|
|
return nil
|
|
|
|
}
|
|
|
|
func parse(rw http.ResponseWriter, request *http.Request) {
|
|
decoder := json.NewDecoder(request.Body)
|
|
|
|
var e types.Envelope
|
|
var b types.Ballot
|
|
|
|
err := decoder.Decode(&e)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
err = json.Unmarshal(e.Ballot, &b)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
|
|
//check PoW
|
|
//check key
|
|
//decrypt
|
|
//check franchise
|
|
//construct packet
|
|
|
|
//this should should be randomized, or actually taken from input
|
|
//b.PID = "1"
|
|
//b.Nullifier = []byte{1,2,3}
|
|
//b.Vote = []byte{4,5,6}
|
|
//b.Franchise = []byte{7,8,9}
|
|
|
|
err = batch.Add(b)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
j, err := json.Marshal(e)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
io.WriteString(rw, string(j))
|
|
}
|
|
|
|
func (h *HttpHandle) Listen() error {
|
|
http.HandleFunc(h.path, parse)
|
|
//add waitgroup
|
|
func() {
|
|
fmt.Println("serving on " + h.port + "/" + h.path)
|
|
err := http.ListenAndServe(":" + h.port, nil)
|
|
if err != nil {
|
|
return
|
|
}
|
|
}()
|
|
return nil
|
|
}
|
|
|