go-dvote/cmd/generator/generator.go
cmd/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:8090/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}