diff --git a/app/app.go b/app/app.go index b2afbf75c..f2b4f0d56 100644 --- a/app/app.go +++ b/app/app.go @@ -60,7 +60,7 @@ func RunWarp(ctx context.Context, l *slog.Logger, opts WarpOptions) error { endpoints := []string{opts.Endpoint, opts.Endpoint} if opts.Scan != nil { - res, err := wiresocks.RunScan(ctx, *opts.Scan) + res, err := wiresocks.RunScan(ctx, l, *opts.Scan) if err != nil { return err } diff --git a/example_config.json b/example_config.json new file mode 100644 index 000000000..6d24f3da7 --- /dev/null +++ b/example_config.json @@ -0,0 +1,11 @@ +{ + "verbose": false, + "bind": "127.0.0.1:8086", + "endpoint": "", + "key": "", + "gool": false, + "cfon": false, + "country": "DE", + "scan": true, + "rtt": "1000ms" +} diff --git a/ipscanner/internal/engine/engine.go b/ipscanner/internal/engine/engine.go index bac9dceb3..3af6ab600 100644 --- a/ipscanner/internal/engine/engine.go +++ b/ipscanner/internal/engine/engine.go @@ -28,7 +28,7 @@ func NewScannerEngine(opts *statute.ScannerOptions) *Engine { ipQueue: queue, ping: p.DoPing, generator: iterator.NewIterator(opts), - log: opts.Logger.With(slog.String("subsystem", "engine")), + log: opts.Logger.With(slog.String("subsystem", "scanner/engine")), } } diff --git a/main.go b/main.go index fa8b3500a..9e6cf8390 100644 --- a/main.go +++ b/main.go @@ -19,6 +19,7 @@ import ( "github.com/peterbourgon/ff/v4" "github.com/peterbourgon/ff/v4/ffhelp" + "github.com/peterbourgon/ff/v4/ffjson" ) var psiphonCountries = []string{ @@ -66,12 +67,17 @@ func main() { gool = fs.BoolLong("gool", "enable gool mode (warp in warp)") psiphon = fs.BoolLong("cfon", "enable psiphon mode (must provide country as well)") country = fs.StringEnumLong("country", fmt.Sprintf("psiphon country code (valid values: %s)", psiphonCountries), psiphonCountries...) - scan = fs.BoolLong("scan", "enable warp scanning (experimental)") + scan = fs.BoolLong("scan", "enable warp scanning") rtt = fs.DurationLong("rtt", 1000*time.Millisecond, "scanner rtt limit") + _ = fs.String('c', "config", "", "path to config file") ) - // Config file and envvars can be added through ff later - err := ff.Parse(fs, os.Args[1:]) + err := ff.Parse( + fs, + os.Args[1:], + ff.WithConfigFileFlag("config"), + ff.WithConfigFileParser(ffjson.Parse), + ) switch { case errors.Is(err, ff.ErrHelp): fmt.Fprintf(os.Stderr, "%s\n", ffhelp.Flags(fs)) diff --git a/wiresocks/scanner.go b/wiresocks/scanner.go index 109f1908d..80e244696 100644 --- a/wiresocks/scanner.go +++ b/wiresocks/scanner.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" "time" "github.com/bepass-org/warp-plus/ipscanner" @@ -17,7 +18,7 @@ type ScanOptions struct { MaxRTT time.Duration } -func RunScan(ctx context.Context, opts ScanOptions) (result []ipscanner.IPInfo, err error) { +func RunScan(ctx context.Context, l *slog.Logger, opts ScanOptions) (result []ipscanner.IPInfo, err error) { cfg, err := ini.Load("./primary/wgcf-profile.ini") if err != nil { return nil, fmt.Errorf("failed to read file: %w", err) @@ -31,6 +32,7 @@ func RunScan(ctx context.Context, opts ScanOptions) (result []ipscanner.IPInfo, // new scanner scanner := ipscanner.NewScanner( + ipscanner.WithLogger(l.With(slog.String("subsystem", "scanner"))), ipscanner.WithWarpPing(), ipscanner.WithWarpPrivateKey(privateKey), ipscanner.WithWarpPeerPublicKey(publicKey),