56 lines
979 B
Go
56 lines
979 B
Go
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")
|
|
}
|