func main() { key, err := totp.Generate(totp.GenerateOpts{ Issuer: "Example.com", AccountName: "*****@*****.**", }) if err != nil { panic(err) } // Convert TOTP key into a PNG var buf bytes.Buffer img, err := key.Image(200, 200) if err != nil { panic(err) } png.Encode(&buf, img) // display the QR code to the user. display(key, buf.Bytes()) // Now Validate that the user's successfully added the passcode. fmt.Println("Validating TOTP...") passcode := promptForPasscode() valid := totp.Validate(passcode, key.Secret()) if valid { println("Valid passcode!") os.Exit(0) } else { println("Invalid passocde!") os.Exit(1) } }
func (heim *Heim) NewOTP(account Account) (*OTP, error) { name := "" for _, ident := range account.PersonalIdentities() { name = ident.ID() break } opts := totp.GenerateOpts{ Issuer: heim.SiteName, AccountName: name, } key, err := totp.Generate(opts) if err != nil { return nil, err } return &OTP{URI: key.String()}, nil }