1
0
Fork 0
mirror of https://github.com/gocsaf/csaf.git synced 2025-12-22 11:55:40 +01:00

Move downloader to lib/downloader

This commit is contained in:
koplas 2024-06-18 14:16:00 +02:00 committed by koplas
parent 257c316894
commit fae4fdeabe
No known key found for this signature in database
7 changed files with 182 additions and 174 deletions

View file

@ -11,6 +11,7 @@ package main
import (
"context"
"github.com/csaf-poc/csaf_distribution/v3/lib/downloader"
"log/slog"
"os"
"os/signal"
@ -18,12 +19,71 @@ import (
"github.com/csaf-poc/csaf_distribution/v3/internal/options"
)
func run(cfg *config, domains []string) error {
d, err := newDownloader(cfg)
const (
defaultWorker = 2
defaultPreset = "mandatory"
defaultForwardQueue = 5
defaultValidationMode = downloader.ValidationStrict
defaultLogFile = "downloader.log"
defaultLogLevel = slog.LevelInfo
)
// configPaths are the potential file locations of the Config file.
var configPaths = []string{
"~/.config/csaf/downloader.toml",
"~/.csaf_downloader.toml",
"csaf_downloader.toml",
}
// parseArgsConfig parses the command line and if needed a config file.
func parseArgsConfig() ([]string, *downloader.Config, error) {
var (
logFile = defaultLogFile
logLevel = &options.LogLevel{Level: defaultLogLevel}
)
p := options.Parser[downloader.Config]{
DefaultConfigLocations: configPaths,
ConfigLocation: func(cfg *downloader.Config) string { return cfg.Config },
Usage: "[OPTIONS] domain...",
HasVersion: func(cfg *downloader.Config) bool { return cfg.Version },
SetDefaults: func(cfg *downloader.Config) {
cfg.Worker = defaultWorker
cfg.RemoteValidatorPresets = []string{defaultPreset}
cfg.ValidationMode = defaultValidationMode
cfg.ForwardQueue = defaultForwardQueue
cfg.LogFile = &logFile
cfg.LogLevel = logLevel
},
// Re-establish default values if not set.
EnsureDefaults: func(cfg *downloader.Config) {
if cfg.Worker == 0 {
cfg.Worker = defaultWorker
}
if cfg.RemoteValidatorPresets == nil {
cfg.RemoteValidatorPresets = []string{defaultPreset}
}
switch cfg.ValidationMode {
case downloader.ValidationStrict, downloader.ValidationUnsafe:
default:
cfg.ValidationMode = downloader.ValidationStrict
}
if cfg.LogFile == nil {
cfg.LogFile = &logFile
}
if cfg.LogLevel == nil {
cfg.LogLevel = logLevel
}
},
}
return p.Parse()
}
func run(cfg *downloader.Config, domains []string) error {
d, err := downloader.NewDownloader(cfg)
if err != nil {
return err
}
defer d.close()
defer d.Close()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
@ -31,28 +91,28 @@ func run(cfg *config, domains []string) error {
defer stop()
if cfg.ForwardURL != "" {
f := newForwarder(cfg)
go f.run()
f := downloader.NewForwarder(cfg)
go f.Run()
defer func() {
f.log()
f.close()
f.Log()
f.Close()
}()
d.forwarder = f
d.Forwarder = f
}
// If the enumerate-only flag is set, enumerate found PMDs,
// else use the normal load method
if cfg.EnumeratePMDOnly {
return d.runEnumerate(domains)
return d.RunEnumerate(domains)
}
return d.run(ctx, domains)
return d.Run(ctx, domains)
}
func main() {
domains, cfg, err := parseArgsConfig()
options.ErrorCheck(err)
options.ErrorCheck(cfg.prepare())
options.ErrorCheck(cfg.Prepare())
if len(domains) == 0 {
slog.Warn("No domains given.")