Example #1
0
func qrcode(key *otp.Key) string {
	// Convert TOTP key into a PNG
	var buf bytes.Buffer
	img, err := key.Image(400, 400)
	if err != nil {
		panic(err)
	}
	png.Encode(&buf, img)
	return base64.StdEncoding.EncodeToString(buf.Bytes())
}
Example #2
0
func render(key *otp.Key) []byte {
	const tpl = `
  <!DOCTYPE html>
  <html>
  <head>
  <meta charset="UTF-8">
  <title>{{.Title}}</title>
  </head>
  <body style="text-align: center">
    <img src="data:image/png;base64,{{ .Qrcode }}" />

    <p>{{ .Issuer }}</p>
    <p>{{ .Account }}</p>
    <p>{{ .Secret }}</p>
  </body>
  </html>`

	t, err := template.New("webpage").Parse(tpl)
	data := struct {
		Title   string
		Qrcode  string
		Issuer  string
		Account string
		Secret  string
	}{
		Title:   "Guardian Token Generator",
		Qrcode:  qrcode(key),
		Issuer:  key.Issuer(),
		Account: key.AccountName(),
		Secret:  key.Secret(),
	}

	var buf bytes.Buffer
	err = t.Execute(&buf, data)
	if err != nil {
		log.Fatal(err)
	}

	return buf.Bytes()
}