arnaucube
arnaucube/go-dvotePublic Self-hosted repository
go-dvote/generator/generator.go
generator/generator.goRaw
  1package main
  2
  3import (
  4	"os"
  5	"strconv"
  6	"time"
  7	"fmt"
  8	"math/rand"
  9	"encoding/json"
 10	"encoding/base64"
 11	"net/http"
 12	"bytes"
 13	"io/ioutil"
 14	"github.com/vocdoni/dvote-relay/types"
 15)
 16
 17func makeBallot() string {
 18	var bal types.Ballot
 19
 20	bal.Type = "ballot0"
 21
 22	pidBytes := make([]byte, 32)
 23	rand.Read(pidBytes)
 24	bal.PID = base64.StdEncoding.EncodeToString(pidBytes)
 25
 26	nullifier := make([]byte, 32)
 27	rand.Read(nullifier)
 28	bal.Nullifier = nullifier
 29
 30	vote := make([]byte, 32)
 31	rand.Read(vote)
 32	bal.Vote = vote
 33
 34	franchise := make([]byte, 32)
 35	rand.Read(franchise)
 36	bal.Franchise = franchise
 37
 38
 39	b, err := json.Marshal(bal)
 40	if err != nil {
 41		fmt.Println(err)
 42		return "error"
 43	}
 44	//todo: add encryption, pow
 45	return string(b)
 46}
 47
 48func makeEnvelope(ballot string) string {
 49	var env types.Envelope
 50
 51	env.Type = "envelope0"
 52
 53	env.Nonce = rand.Uint64()
 54
 55	kp := make([]byte, 4)
 56	rand.Read(kp)
 57	env.KeyProof = kp
 58
 59	env.Ballot = []byte(ballot)
 60
 61	env.Timestamp = time.Now()
 62
 63	e, err := json.Marshal(env)
 64	if err != nil {
 65		fmt.Println(err)
 66		return "error"
 67	}
 68	//todo: add encryption, pow
 69	return string(e)
 70
 71}
 72
 73func main() {
 74	interval := os.Args[1]
 75	i, _ := strconv.Atoi(interval)
 76	timer := time.NewTicker(time.Millisecond * time.Duration(i))
 77	rand.Seed(time.Now().UnixNano())
 78	url := "http://localhost:8080/submit"
 79	fmt.Println("URL:>", url)
 80
 81	for {
 82		select {
 83		case <- timer.C:
 84			fmt.Println(makeEnvelope(makeBallot()))
 85			var jsonStr = []byte(makeEnvelope(makeBallot()))
 86			req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
 87			req.Header.Set("X-Custom-Header", "myvalue")
 88			req.Header.Set("Content-Type", "application/json")
 89
 90			client := &http.Client{}
 91			resp, err := client.Do(req)
 92			if err != nil {
 93				panic(err)
 94			}
 95			defer resp.Body.Close()
 96			fmt.Println("response Status:", resp.Status)
 97			fmt.Println("response Headers:", resp.Header)
 98			body, _ := ioutil.ReadAll(resp.Body)
 99			fmt.Println("response Body:", string(body))
100		default:
101			continue
102		}
103	}
104}