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  }