Enhance CLI usage documentation with detailed format descriptions, examples, and validation modes

This commit is contained in:
eyedeekay
2025-10-18 22:17:55 -04:00
parent 10ef90f247
commit 900eb06340

114
main.go
View File

@@ -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: "<input-file> [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,