func main()

in cmd/nvdsync/main.go [34:84]


func main() {
	var (
		cvefeed   nvd.CVE
		cpefeed   nvd.CPE
		timeout   time.Duration
		userAgent string
		source    = nvd.NewSourceConfig()
	)

	flag.Var(&cvefeed, "cve_feed", cvefeed.Help())
	flag.Var(&cpefeed, "cpe_feed", cpefeed.Help())
	flag.DurationVar(&timeout, "timeout", 5*time.Minute, "sync timeout")
	flag.StringVar(&userAgent, "user_agent", nvd.UserAgent(), "HTTP request User-Agent header")
	source.AddFlags(flag.CommandLine)

	flag.Usage = func() {
		fmt.Printf("nvdsync %s\n\n", nvd.Version)
		fmt.Printf("use: %s [flags] dir\n", os.Args[0])
		fmt.Printf("Synchronizes NVD data feeds to local directory.\n\n")
		fmt.Printf("Flags:\n\n")
		flag.PrintDefaults()
		os.Exit(1)
	}

	flag.Parse()

	localdir := flag.Arg(0)
	if localdir == "" {
		flag.Usage()
	}

	// determine User-Agent header
	// check if it's only ascii characters
	if err := nvd.SetUserAgent(userAgent); err != nil {
		flog.Warningf("could not set User-Agent HTTP header, using default: %v", err)
	}
	flog.Infof("Using http User-Agent: %s", nvd.UserAgent())

	dfs := nvd.Sync{
		Feeds:    []nvd.Syncer{cvefeed, cpefeed},
		Source:   source,
		LocalDir: localdir,
	}

	ctx, cancel := context.WithTimeout(context.Background(), timeout)
	defer cancel()

	if err := dfs.Do(ctx); err != nil {
		flog.Fatal(err)
	}
}