Skip to content

Commit 2d7bcb3

Browse files
committed
Ability to add a single flag for osquery
1 parent 343241c commit 2d7bcb3

File tree

2 files changed

+95
-15
lines changed

2 files changed

+95
-15
lines changed

environments/flags.go

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ import (
99
const (
1010
// CarverBlockSizeValue to configure size in bytes for carver blocks
1111
CarverBlockSizeValue string = "5120000"
12+
// FlagGenericValue to use as generator for generic flags
13+
FlagGenericValue string = `--{{ .FlagName }}={{ .FlagValue }}`
1214
// FlagTLSServerCerts for the --tls_server_certs flag
13-
FlagTLSServerCerts string = `--tls_server_certs={{ .CertFile }}`
15+
FlagNameTLSServerCerts string = `tls_server_certs`
1416
// FlagCarverBlockSize for the --carver_block_size flag
15-
FlagCarverBlockSize string = `--carver_block_size={{ .BlockSize }}`
17+
FlagNameCarverBlockSize string = `carver_block_size`
1618
// FlagsTemplate to generate flags for enrolling nodes
1719
FlagsTemplate string = `
1820
--host_identifier=uuid
@@ -63,27 +65,32 @@ func GenServerCertsFlag(certificatePath string) string {
6365
if certificatePath == "" {
6466
return ""
6567
}
66-
data := struct {
67-
CertFile string
68-
}{
69-
CertFile: certificatePath,
70-
}
71-
return GenGenericFlag("servercerts", FlagTLSServerCerts, data)
68+
return GenSingleFlag("servercerts", FlagNameTLSServerCerts, certificatePath)
7269
}
7370

7471
// GenCarveBlockSizeFlag to generate the --carver_block_size flag
7572
func GenCarveBlockSizeFlag(blockSize string) string {
73+
if blockSize == "" {
74+
return ""
75+
}
76+
return GenSingleFlag("blocksize", FlagNameCarverBlockSize, blockSize)
77+
}
78+
79+
// GenSingleFlag to generate a generic flag to be used by osquery
80+
func GenSingleFlag(tmplName, flagName, flagValue string) string {
7681
data := struct {
77-
BlockSize string
82+
FlagName string
83+
FlagValue string
7884
}{
79-
BlockSize: blockSize,
85+
FlagName: flagName,
86+
FlagValue: flagValue,
8087
}
81-
return GenGenericFlag("blocksize", FlagCarverBlockSize, data)
88+
return ParseFlagTemplate(tmplName, FlagGenericValue, data)
8289
}
8390

84-
// GenGenericFlag to generate a generic flag to be used by osquery
85-
func GenGenericFlag(flagName, flagConst string, data interface{}) string {
86-
t, err := template.New(flagName).Parse(flagConst)
91+
// ParseFlagTemplate to parse a flag template
92+
func ParseFlagTemplate(tmplName, flagTemplate string, data interface{}) string {
93+
t, err := template.New(tmplName).Parse(flagTemplate)
8794
if err != nil {
8895
return ""
8996
}
@@ -114,7 +121,7 @@ func (environment *Environment) GenerateFlags(env TLSEnvironment, secretPath, ce
114121
FlagServerCerts: flagServerCerts,
115122
FlagCarverBlock: GenCarveBlockSizeFlag(CarverBlockSizeValue),
116123
}
117-
return GenGenericFlag("flags", FlagsTemplate, data), nil
124+
return ParseFlagTemplate("flags", FlagsTemplate, data), nil
118125
}
119126

120127
// GenerateFlagsEnv to generate flags by environment name

environments/flags_test.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package environments
2+
3+
import (
4+
"testing"
5+
)
6+
7+
var testEnv = TLSEnvironment{}
8+
9+
func TestGenServerCertsFlag(t *testing.T) {
10+
t.Run("empty", func(t *testing.T) {
11+
flag := GenServerCertsFlag("")
12+
if flag != "" {
13+
t.Errorf("Expected empty flag, got %s", flag)
14+
}
15+
})
16+
t.Run("not empty", func(t *testing.T) {
17+
flag := GenServerCertsFlag("certificate")
18+
if flag != "--tls_server_certs=certificate" {
19+
t.Errorf("Expected flag --tls_server_certs=certificate, got %s", flag)
20+
}
21+
})
22+
}
23+
24+
func TestGenCarveBlockSizeFlag(t *testing.T) {
25+
t.Run("empty", func(t *testing.T) {
26+
flag := GenCarveBlockSizeFlag("")
27+
if flag != "" {
28+
t.Errorf("Expected empty flag, got %s", flag)
29+
}
30+
})
31+
t.Run("not empty", func(t *testing.T) {
32+
flag := GenCarveBlockSizeFlag("blockSize")
33+
if flag != "--carver_block_size=blockSize" {
34+
t.Errorf("Expected flag --carver_block_size=blockSize, got %s", flag)
35+
}
36+
})
37+
}
38+
39+
func TestGenSingleFlag(t *testing.T) {
40+
t.Run("empty", func(t *testing.T) {
41+
flag := GenSingleFlag("tmplName", "flagName", "")
42+
if flag != "--flagName=" {
43+
t.Errorf("Expected --flagName=, got %s", flag)
44+
}
45+
})
46+
t.Run("not empty", func(t *testing.T) {
47+
flag := GenSingleFlag("tmplName", "flagName", "flagValue")
48+
if flag != "--flagName=flagValue" {
49+
t.Errorf("Expected flag --flagName=flagValue, got %s", flag)
50+
}
51+
})
52+
}
53+
54+
func TestParseFlagTemplate(t *testing.T) {
55+
t.Run("empty data", func(t *testing.T) {
56+
flag := ParseFlagTemplate("tmplName", "flagTemplate", nil)
57+
if flag != "flagTemplate" {
58+
t.Errorf("Expected empty flag, got %s", flag)
59+
}
60+
})
61+
t.Run("not empty data", func(t *testing.T) {
62+
flag := ParseFlagTemplate("tmplName", "--{{ .Name }}={{ .Value }}", struct {
63+
Name string
64+
Value string
65+
}{
66+
Name: "flagName",
67+
Value: "flagValue",
68+
})
69+
if flag != "--flagName=flagValue" {
70+
t.Errorf("Expected flag --flagName=flagValue, got %s", flag)
71+
}
72+
})
73+
}

0 commit comments

Comments
 (0)