package main import ( "bufio" "flag" "fmt" "log" "os" "strings" "github.com/GeertJohan/yubigo" "github.com/facebookgo/flagenv" _ "github.com/joho/godotenv/autoload" ) var ( clientID = flag.String("client-id", "", "yubikey client ID") secretKey = flag.String("secret-key", "", "yubikey secret key") ) func main() { flagenv.Parse() flag.Parse() ya, err := yubigo.NewYubiAuth(*clientID, *secretKey) if err != nil { log.Fatal("bad creds:", err) } reader := bufio.NewReader(os.Stdin) fmt.Print("Enter text: ") otp, err := reader.ReadString('\n') if err != nil { log.Fatal("error reading OTP:", err) } otp = strings.TrimSpace(otp) fmt.Println("input: ", otp) pubID, _, err := yubigo.ParseOTP(otp) if err != nil { log.Fatal("error parsing OTP:", err) } fmt.Println("prefix:", string(pubID)) _, ok, err := ya.Verify(otp) if err != nil { log.Fatal("bad response:", err) } if !ok { log.Fatal("not ok") } fmt.Println("code is valid") }