github.com/tommi2day/pwcli@v0.0.0-20240317203041-4d1177a5ab91/cmd/totp.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "os" 6 7 log "github.com/sirupsen/logrus" 8 "github.com/spf13/cobra" 9 "github.com/tommi2day/gomodules/pwlib" 10 ) 11 12 // totpCmd represents the totp command 13 var totpCmd = &cobra.Command{ 14 Use: "totp", 15 Short: "generate totp code from secret", 16 Long: `generate a standard 6 digit auth/mfa code for given secret with --secret or TOTP_SECRET env`, 17 SilenceUsage: true, 18 RunE: genTOTP, 19 } 20 21 func genTOTP(cmd *cobra.Command, _ []string) error { 22 log.Debug("TOTP called") 23 secret, _ := cmd.Flags().GetString("secret") 24 if secret == "" { 25 secret = os.Getenv("TOTP_SECRET") 26 log.Debugf("use secret from env: %s", secret) 27 } 28 if secret == "" { 29 err := fmt.Errorf("no secret given, use --secret or Env TOTP_SECRET") 30 return err 31 } 32 totp, err := pwlib.GetOtp(secret) 33 if err == nil { 34 log.Infof("TOTP returned %s", totp) 35 fmt.Println(totp) 36 } else { 37 err = fmt.Errorf("TOTP generation failed:%s", err) 38 } 39 return err 40 } 41 42 func init() { 43 checkCmd.SetHelpFunc(func(command *cobra.Command, strings []string) { 44 // Hide flag for this command 45 _ = command.Flags().MarkHidden("app") 46 _ = command.Flags().MarkHidden("keydir") 47 _ = command.Flags().MarkHidden("datadir") 48 _ = command.Flags().MarkHidden("config") 49 _ = command.Flags().MarkHidden("method") 50 // Call parent help func 51 command.Parent().HelpFunc()(command, strings) 52 }) 53 RootCmd.AddCommand(totpCmd) 54 // don't have variables populated here 55 totpCmd.Flags().StringP("secret", "s", "", "totp secret to generate code from") 56 }