in tools/validate.go [29:95]
func validateTool() error {
flag := flag.NewFlagSet("validate", flag.ContinueOnError)
flag.Usage = printValidateHelp
helpFlag := flag.Bool("h", false, "Print this help message.")
envFlag := flag.Bool("e", false, "Retrieve value from the environment variable with the given name.")
mailFlag := flag.Bool("m", false, "Check if the value is a valid email address.")
numberFlag := flag.Bool("n", false, "Check if the value is a number.")
regexFlag := flag.String("r", "", "Check if the value matches the given regular expression.")
err := flag.Parse(os.Args[1:])
if err != nil {
return err
}
if *helpFlag {
flag.Usage()
return nil
}
if flag.NArg() != 1 && flag.NArg() != 2 {
flag.Usage()
return errors.New("invalid number of arguments")
}
arg := flag.Arg(0)
customErr := flag.Arg(1)
if customErr == "" {
customErr = "validation failed"
}
value := arg
if *envFlag {
value = os.Getenv(arg)
if value == "" {
return fmt.Errorf("variable '%s' not set", arg)
}
}
if *mailFlag {
if !isValidEmail(value) {
return fmt.Errorf(customErr)
}
return nil
}
if *numberFlag {
if !isValidNumber(value) {
return fmt.Errorf(customErr)
}
return nil
}
if *regexFlag != "" {
valid, err := isValidByRegex(value, *regexFlag)
if err != nil {
return err
}
if !valid {
return fmt.Errorf(customErr)
}
}
return nil
}