func registerMFA(c *gobot.Context) { log.Debugf("registering mfa") c.Respond(fmt.Sprintf("registering a %s mfa", c.Match(1))) data := make([]byte, 10) if n, err := rand.Read(data); err != nil { c.Fail(err) return } else if n != len(data) { c.Fail(fmt.Errorf("read %d random bytes, wanted %d", n, len(data))) return } secret := base32.StdEncoding.EncodeToString(data) saveOtp(c.User, secret) code, err := qr.Encode("otpauth://totp/Gobot?secret="+secret, qr.Q) if err != nil { c.Fail(err) return } c.Upload(gobot.Attachment{ Title: "QR Code", Filename: "QR.png", Content: bytes.NewReader(code.PNG()), ContentType: "image/png", }) }