summaryrefslogtreecommitdiff
path: root/internal/config/config.go
blob: 3cfe5aff4d21124cf3b8eea5ad5dbeddcfef16d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
}