diff options
Diffstat (limited to 'internal/config')
-rw-r--r-- | internal/config/config.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/internal/config/config.go b/internal/config/config.go new file mode 100644 index 0000000..3cfe5af --- /dev/null +++ b/internal/config/config.go @@ -0,0 +1,50 @@ +package config + +import ( + "flag" + "fmt" + "os" +) + +// Configuration holds all the parameters for the SCP operation +type Configuration struct { + Dest string + RemoteUser string + RemoteHost string + RemotePath string + Parallelism int + LockDir string + CipherOption string + Verbose bool + OnlyListFiles bool +} + +// ParseArgs parses command-line arguments and returns a Configuration +func ParseArgs() Configuration { + config := Configuration{ + LockDir: "/tmp/scp_lock", + Parallelism: 10, + CipherOption: "aes128-gcm@openssh.com", + } + + flag.StringVar(&config.Dest, "d", "", "Destination directory (local)") + flag.StringVar(&config.RemoteUser, "u", "", "Remote username") + flag.StringVar(&config.RemoteHost, "h", "", "Remote hostname or IP") + flag.StringVar(&config.RemotePath, "r", "", "Remote path") + flag.IntVar(&config.Parallelism, "P", 10, "Number of parallel SCP processes") + flag.StringVar(&config.LockDir, "L", "/tmp/scp_lock", "Lock directory") + flag.StringVar(&config.CipherOption, "c", "aes128-gcm@openssh.com", "SSH cipher option") + flag.BoolVar(&config.Verbose, "v", false, "Verbose output") + flag.BoolVar(&config.OnlyListFiles, "l", false, "Only list files to be copied, don't copy") + + flag.Parse() + + // Check required parameters + if config.Dest == "" || config.RemoteUser == "" || config.RemoteHost == "" || config.RemotePath == "" { + flag.Usage() + fmt.Println("\nRequired flags: -d, -u, -h, -r") + os.Exit(1) + } + + return config +} |