blob: 44bc154e0110203d20291d6eacfd56621eadca1b [file] [log] [blame]
giolekvab64297c2021-12-13 14:36:32 +04001package main
2
3import (
4 "bytes"
5 "encoding/json"
6 "flag"
7 "image"
8 "image/png"
9
10 "gioui.org/app"
11 "gioui.org/io/system"
12 "gioui.org/op"
13 "gioui.org/op/paint"
14 "gioui.org/unit"
15 qrcode "github.com/skip2/go-qrcode"
16)
17
18var vpnApiAddr = flag.String("vpn-api-addr", "", "VPN API server address")
19
20type config struct {
21 VPNApiAddr string `json:"vpn_api_addr"`
22 Message []byte `json:"message"`
23 Signature []byte `json:"signature"`
24}
25
26func prepareConfigQRCode(vc *VPNApiClient) (*image.Image, error) {
27 message := []byte("Hello PCloud")
28 signature, err := vc.Sign(message)
29 if err != nil {
30 return nil, err
31 }
32 c := config{
33 *vpnApiAddr,
34 message,
35 signature,
36 }
37 var data bytes.Buffer
38 if err := json.NewEncoder(&data).Encode(c); err != nil {
39 return nil, err
40 }
41 qr, err := qrcode.Encode(data.String(), qrcode.Medium, 1024)
42 if err != nil {
43 return nil, err
44 }
45 img, err := png.Decode(bytes.NewReader(qr))
46 if err != nil {
47 return nil, err
48 }
49 return &img, nil
50}
51
52func main() {
53 flag.Parse()
54 go func() {
55 vc := &VPNApiClient{
56 *vpnApiAddr,
57 }
58 img, err := prepareConfigQRCode(vc)
59 if err != nil {
60 panic(err)
61 }
62 w := app.NewWindow(
63 app.Size(unit.Px(1024), unit.Px(1024)),
64 app.Title("PCloud"),
65 )
66 ops := new(op.Ops)
67 for e := range w.Events() {
68 switch e := e.(type) {
69 case system.FrameEvent:
70 ops.Reset()
71 paint.NewImageOp(*img).Add(ops)
72 paint.PaintOp{}.Add(ops)
73 e.Frame(ops)
74 }
75 }
76 }()
77 app.Main()
78}