diff --git a/main.go b/main.go index 944b407..5248efe 100644 --- a/main.go +++ b/main.go @@ -12,65 +12,123 @@ import ( func main() { cmd := &cli.App{ Name: "go-i2ptunnel-config", - Usage: "Convert I2P tunnel configurations between formats", + Usage: "Convert I2P tunnel configurations between Java I2P, i2pd, and go-i2p formats", Version: "0.33.0", - Description: `A command line utility to convert I2P tunnel configurations between Java I2P, i2pd, and go-i2p formats. + Description: `A command line utility to convert I2P tunnel configurations between Java I2P, +i2pd, and go-i2p formats with automatic format detection, validation, and +batch processing capabilities. -Supports automatic format detection based on file extensions: - - .config, .properties, .prop -> Java I2P properties format - - .conf, .ini -> i2pd INI format - - .yaml, .yml -> go-i2p YAML format +SUPPORTED FORMATS: + Java I2P (.config, .properties, .prop) - Properties format used by Java I2P + i2pd (.conf, .ini) - INI format used by i2pd + go-i2p (.yaml, .yml) - YAML format used by go-i2p -Examples: - # Auto-detect input format, output as YAML - go-i2ptunnel-config tunnel.config +FORMAT AUTO-DETECTION: + Input format is automatically detected based on file extension. You can + override this with the --in-format flag if needed (e.g., for non-standard + extensions or stdin input). - # Specify output format - go-i2ptunnel-config -out-format ini tunnel.properties +COMMON USAGE PATTERNS: - # Specify custom output file - go-i2ptunnel-config -o /path/to/output.yaml tunnel.config - go-i2ptunnel-config tunnel.config custom-name.yaml + 1. Simple conversion with auto-detection: + $ go-i2ptunnel-config tunnel.config + Converts tunnel.config to tunnel.yaml (default output format) - # Dry run to validate without writing - go-i2ptunnel-config -dry-run tunnel.config + 2. Convert to specific format: + $ go-i2ptunnel-config --out-format ini tunnel.properties + Converts Java I2P properties to i2pd INI format - # Batch process multiple files using glob patterns - go-i2ptunnel-config -batch "*.config" - go-i2ptunnel-config -batch -out-format ini "tunnels/*.properties" + 3. Specify custom output filename: + $ go-i2ptunnel-config -o my-tunnel.conf tunnel.yaml + $ go-i2ptunnel-config tunnel.config custom-name.yaml + Both flag and positional argument syntax supported - # Specify both input and output formats explicitly - go-i2ptunnel-config -in-format properties -out-format yaml tunnel.txt`, + 4. Validate configuration without converting: + $ go-i2ptunnel-config --validate tunnel.config + $ go-i2ptunnel-config --validate --strict tunnel.yaml + Use --strict for additional validation checks (port ranges, etc.) + + 5. Preview conversion without writing files: + $ go-i2ptunnel-config --dry-run tunnel.properties + Shows converted output on console without creating files + + 6. Batch convert multiple files: + $ go-i2ptunnel-config --batch "*.config" + $ go-i2ptunnel-config --batch --out-format ini "tunnels/*.properties" + Processes all matching files, continues on errors + + 7. Convert from non-standard extension: + $ go-i2ptunnel-config --in-format properties --out-format yaml tunnel.txt + Useful when file extension doesn't match actual format + + 8. Migrate from Java I2P to i2pd: + $ go-i2ptunnel-config --batch --out-format ini "~/.i2p/i2ptunnel.config.d/*.config" + Converts all Java I2P tunnel configs to i2pd format + +CONFIGURATION EXAMPLES: + Ready-to-use configuration templates are available in the examples/ directory: + - httpclient : HTTP proxy for browsing I2P websites + - httpserver : Host your own I2P website (eepsite) + - socks : SOCKS proxy for I2P connections + - client : Generic client tunnel (forward local port to I2P destination) + - server : Generic server tunnel (expose local service on I2P) + + Each template includes detailed inline comments and is available in all three + formats. See examples/README.md for more information. + +VALIDATION MODES: + --validate : Checks required fields and tunnel type validity + --validate --strict : Additional checks for port ranges, target formats, etc. + +BATCH PROCESSING: + When using --batch, the tool: + - Accepts glob patterns (e.g., "*.config", "dir/**/*.properties") + - Processes all matching files independently + - Continues processing even if some files fail + - Reports summary of successful/failed conversions + - Cannot be used with --output flag (each file gets auto-generated name) + +OUTPUT FILE NAMING: + If no output file is specified, the tool automatically generates one based on: + - Input filename (without extension) + output format extension + - Example: tunnel.config -> tunnel.yaml (default) + - Example: tunnel.config --out-format ini -> tunnel.conf + +EXIT CODES: + 0 : Success + 1 : Error (invalid arguments, conversion failure, validation failure) + +For more information, visit: https://github.com/go-i2p/go-i2ptunnel-config`, ArgsUsage: " [output-file]", Flags: []cli.Flag{ &cli.StringFlag{ Name: "in-format, if", - Usage: "Input format (properties|ini|yaml) - auto-detected if not specified", + Usage: "Override input format detection (properties|ini|yaml)", }, &cli.StringFlag{ Name: "out-format, of", - Usage: "Output format (properties|ini|yaml) - defaults to yaml", + Usage: "Set output format: properties (Java I2P), ini (i2pd), yaml (go-i2p)", Value: "yaml", }, &cli.StringFlag{ Name: "output, o", - Usage: "Output file path - auto-generated if not specified", + Usage: "Specify output file path (auto-generated from input filename if not set)", }, &cli.BoolFlag{ Name: "validate", - Usage: "Validate input without conversion", + Usage: "Validate configuration without performing conversion", }, &cli.BoolFlag{ Name: "strict", - Usage: "Enable strict validation", + Usage: "Enable strict validation (port ranges, target formats, privileged port warnings)", }, &cli.BoolFlag{ Name: "dry-run", - Usage: "Print output to console instead of writing to file", + Usage: "Preview conversion output on console without writing files", }, &cli.BoolFlag{ Name: "batch", - Usage: "Process multiple files using glob patterns", + Usage: "Process multiple files using glob patterns (e.g., \"*.config\")", }, }, Action: i2pconv.ConvertCommand,