This repository has been archived by the owner on Nov 21, 2023. It is now read-only.
/
generate.go
88 lines (78 loc) · 1.99 KB
/
generate.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package main
import (
"bytes"
"encoding/base64"
"flag"
"fmt"
"image"
_ "image/png"
"io/ioutil"
"os"
"github.com/eisenwinter/ngp/pkg/euspec"
"github.com/eisenwinter/ngp/pkg/greenpass"
"github.com/eisenwinter/ngp/pkg/template"
"github.com/makiuchi-d/gozxing"
"github.com/makiuchi-d/gozxing/qrcode"
)
func main() {
var fileFlag = flag.String("f", "", "specify a text file to be read from")
var templateFlag = flag.String("t", "", "specify a template file to be read from")
var outFlag = flag.String("o", "out.html", "name of output file")
var lang = flag.String("lang", "en", "language to use (available: en, de)")
flag.Parse()
if fileFlag != nil && *fileFlag != "" && templateFlag != nil && *templateFlag != "" {
file, err := loadFile(*fileFlag)
if err != nil {
panic(err)
}
res, err := generate(file, fileAsBase64(*fileFlag), *templateFlag, *lang)
if err != nil {
panic(err)
}
f, err := os.Create(*outFlag)
if err != nil {
panic(err)
}
defer f.Close()
_, err = f.WriteString(res)
if err != nil {
panic(err)
}
} else {
fmt.Println("Please specify -f and -t flags.")
}
}
func fileAsBase64(path string) string {
imgdata, err := ioutil.ReadFile(path)
if err != nil {
return ""
}
return base64.StdEncoding.EncodeToString(imgdata)
}
func loadFile(path string) (string, error) {
imgdata, err := ioutil.ReadFile(path)
if err != nil {
return "", err
}
img, _, err := image.Decode(bytes.NewReader(imgdata))
if err != nil {
return "", err
}
bmp, _ := gozxing.NewBinaryBitmapFromImage(img)
qrReader := qrcode.NewQRCodeReader()
result, err := qrReader.Decode(bmp, nil)
if err != nil {
return "", err
}
return result.String(), nil
}
func generate(input string, qr string, templatePath string, lang string) (string, error) {
gp := greenpass.New()
result, err := gp.Decode([]byte(input))
if err != nil {
panic(err)
}
view := euspec.ToRenderView(*result, "data:image/png;base64,"+qr, lang)
tr := template.New()
return tr.Render(templatePath, view)
}