@ -0,0 +1,104 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"os" |
||||
|
"strconv" |
||||
|
"time" |
||||
|
"fmt" |
||||
|
"math/rand" |
||||
|
"encoding/json" |
||||
|
"encoding/base64" |
||||
|
"net/http" |
||||
|
"bytes" |
||||
|
"io/ioutil" |
||||
|
"github.com/vocdoni/dvote-relay/types" |
||||
|
) |
||||
|
|
||||
|
func makeBallot() string { |
||||
|
var bal types.Ballot |
||||
|
|
||||
|
bal.Type = "ballot0" |
||||
|
|
||||
|
pidBytes := make([]byte, 32) |
||||
|
rand.Read(pidBytes) |
||||
|
bal.PID = base64.StdEncoding.EncodeToString(pidBytes) |
||||
|
|
||||
|
nullifier := make([]byte, 32) |
||||
|
rand.Read(nullifier) |
||||
|
bal.Nullifier = nullifier |
||||
|
|
||||
|
vote := make([]byte, 32) |
||||
|
rand.Read(vote) |
||||
|
bal.Vote = vote |
||||
|
|
||||
|
franchise := make([]byte, 32) |
||||
|
rand.Read(franchise) |
||||
|
bal.Franchise = franchise |
||||
|
|
||||
|
|
||||
|
b, err := json.Marshal(bal) |
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
return "error" |
||||
|
} |
||||
|
//todo: add encryption, pow
|
||||
|
return string(b) |
||||
|
} |
||||
|
|
||||
|
func makeEnvelope(ballot string) string { |
||||
|
var env types.Envelope |
||||
|
|
||||
|
env.Type = "envelope0" |
||||
|
|
||||
|
env.Nonce = rand.Uint64() |
||||
|
|
||||
|
kp := make([]byte, 4) |
||||
|
rand.Read(kp) |
||||
|
env.KeyProof = kp |
||||
|
|
||||
|
env.Ballot = []byte(ballot) |
||||
|
|
||||
|
env.Timestamp = time.Now() |
||||
|
|
||||
|
e, err := json.Marshal(env) |
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
return "error" |
||||
|
} |
||||
|
//todo: add encryption, pow
|
||||
|
return string(e) |
||||
|
|
||||
|
} |
||||
|
|
||||
|
func main() { |
||||
|
interval := os.Args[1] |
||||
|
i, _ := strconv.Atoi(interval) |
||||
|
timer := time.NewTicker(time.Millisecond * time.Duration(i)) |
||||
|
rand.Seed(time.Now().UnixNano()) |
||||
|
url := "http://localhost:8080/submit" |
||||
|
fmt.Println("URL:>", url) |
||||
|
|
||||
|
for { |
||||
|
select { |
||||
|
case <- timer.C: |
||||
|
fmt.Println(makeEnvelope(makeBallot())) |
||||
|
var jsonStr = []byte(makeEnvelope(makeBallot())) |
||||
|
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr)) |
||||
|
req.Header.Set("X-Custom-Header", "myvalue") |
||||
|
req.Header.Set("Content-Type", "application/json") |
||||
|
|
||||
|
client := &http.Client{} |
||||
|
resp, err := client.Do(req) |
||||
|
if err != nil { |
||||
|
panic(err) |
||||
|
} |
||||
|
defer resp.Body.Close() |
||||
|
fmt.Println("response Status:", resp.Status) |
||||
|
fmt.Println("response Headers:", resp.Header) |
||||
|
body, _ := ioutil.ReadAll(resp.Body) |
||||
|
fmt.Println("response Body:", string(body)) |
||||
|
default: |
||||
|
continue |
||||
|
} |
||||
|
} |
||||
|
} |