Make error message for missing watch list more friendly

This commit is contained in:
Andrew Ayer 2023-02-20 09:47:15 -05:00
parent 69be2f890a
commit d08ad53464
1 changed files with 19 additions and 1 deletions

View File

@ -64,6 +64,10 @@ func certspotterVersion() string {
return "unknown" return "unknown"
} }
func fileExists(filename string) bool {
_, err := os.Lstat(filename)
return err == nil
}
func homedir() string { func homedir() string {
homedir, err := os.UserHomeDir() homedir, err := os.UserHomeDir()
if err != nil { if err != nil {
@ -85,6 +89,16 @@ func defaultConfigDir() string {
return filepath.Join(homedir(), ".certspotter") return filepath.Join(homedir(), ".certspotter")
} }
} }
func defaultWatchListPath() string {
return filepath.Join(defaultConfigDir(), "watchlist")
}
func defaultWatchListPathIfExists() string {
if fileExists(defaultWatchListPath()) {
return defaultWatchListPath()
} else {
return ""
}
}
func readWatchListFile(filename string) (monitor.WatchList, error) { func readWatchListFile(filename string) (monitor.WatchList, error) {
file, err := os.Open(filename) file, err := os.Open(filename)
@ -136,13 +150,17 @@ func main() {
flag.BoolVar(&flags.stdout, "stdout", false, "Write matching certificates to stdout") flag.BoolVar(&flags.stdout, "stdout", false, "Write matching certificates to stdout")
flag.BoolVar(&flags.verbose, "verbose", false, "Be verbose") flag.BoolVar(&flags.verbose, "verbose", false, "Be verbose")
flag.BoolVar(&flags.version, "version", false, "Print version and exit") flag.BoolVar(&flags.version, "version", false, "Print version and exit")
flag.StringVar(&flags.watchlist, "watchlist", filepath.Join(defaultConfigDir(), "watchlist"), "File containing domain names to watch") flag.StringVar(&flags.watchlist, "watchlist", defaultWatchListPathIfExists(), "File containing domain names to watch")
flag.Parse() flag.Parse()
if flags.version { if flags.version {
fmt.Fprintf(os.Stdout, "certspotter version %s\n", certspotterVersion()) fmt.Fprintf(os.Stdout, "certspotter version %s\n", certspotterVersion())
os.Exit(0) os.Exit(0)
} }
if flags.watchlist == "" {
fmt.Fprintf(os.Stderr, "%s: watch list not found: please create %s or specify alternative path using -watchlist\n", programName, defaultWatchListPath())
os.Exit(2)
}
if len(flags.email) == 0 && len(flags.script) == 0 && flags.stdout == false { if len(flags.email) == 0 && len(flags.script) == 0 && flags.stdout == false {
fmt.Fprintf(os.Stderr, "%s: at least one of -email, -script, or -stdout must be specified (see -help for details)\n", programName) fmt.Fprintf(os.Stderr, "%s: at least one of -email, -script, or -stdout must be specified (see -help for details)\n", programName)