summaryrefslogtreecommitdiff
path: root/internal/config/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/config/config.go')
-rw-r--r--internal/config/config.go50
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
+}