From caf1dc71fbac767c78f3869dc702b286d7a9a2fa Mon Sep 17 00:00:00 2001 From: mmetc <92726601+mmetc@users.noreply.github.com> Date: Thu, 24 Mar 2022 11:07:54 +0100 Subject: [PATCH] allow capi register in functional tests (#1384) --- cmd/crowdsec-cli/capi.go | 10 ++++---- cmd/crowdsec-cli/lapi.go | 2 +- cmd/crowdsec-cli/machines.go | 45 ++++++++++++++++++++++++------------ tests/instance-data | 2 +- 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/cmd/crowdsec-cli/capi.go b/cmd/crowdsec-cli/capi.go index a4b20f1dd..3319ca0c8 100644 --- a/cmd/crowdsec-cli/capi.go +++ b/cmd/crowdsec-cli/capi.go @@ -20,6 +20,7 @@ import ( var CAPIURLPrefix string = "v2" var CAPIBaseURL string = "https://api.crowdsec.net/" +var capiUserPrefix string func NewCapiCmd() *cobra.Command { var cmdCapi = &cobra.Command{ @@ -46,8 +47,7 @@ func NewCapiCmd() *cobra.Command { DisableAutoGenTag: true, Run: func(cmd *cobra.Command, args []string) { var err error - - id, err := generateID() + capiUser, err := generateID(capiUserPrefix) if err != nil { log.Fatalf("unable to generate machine id: %s", err) } @@ -57,7 +57,7 @@ func NewCapiCmd() *cobra.Command { log.Fatalf("unable to parse api url %s : %s", CAPIBaseURL, err) } _, err = apiclient.RegisterClient(&apiclient.Config{ - MachineID: id, + MachineID: capiUser, Password: password, UserAgent: fmt.Sprintf("crowdsec/%s", cwversion.VersionStr()), URL: apiurl, @@ -79,7 +79,7 @@ func NewCapiCmd() *cobra.Command { dumpFile = "" } apiCfg := csconfig.ApiCredentialsCfg{ - Login: id, + Login: capiUser, Password: password.String(), URL: CAPIBaseURL, } @@ -101,6 +101,8 @@ func NewCapiCmd() *cobra.Command { }, } cmdCapiRegister.Flags().StringVarP(&outputFile, "file", "f", "", "output file destination") + cmdCapiRegister.Flags().StringVar(&capiUserPrefix, "schmilblick", "", "set a schmilblick (use in tests only)") + cmdCapiRegister.Flags().MarkHidden("schmilblick") cmdCapi.AddCommand(cmdCapiRegister) var cmdCapiStatus = &cobra.Command{ diff --git a/cmd/crowdsec-cli/lapi.go b/cmd/crowdsec-cli/lapi.go index d02116b2a..3bb271dd5 100644 --- a/cmd/crowdsec-cli/lapi.go +++ b/cmd/crowdsec-cli/lapi.go @@ -51,7 +51,7 @@ Keep in mind the machine needs to be validated by an administrator on LAPI side Run: func(cmd *cobra.Command, args []string) { var err error if lapiUser == "" { - lapiUser, err = generateID() + lapiUser, err = generateID("") if err != nil { log.Fatalf("unable to generate machine id: %s", err) } diff --git a/cmd/crowdsec-cli/machines.go b/cmd/crowdsec-cli/machines.go index 1c95562a8..f74c7499d 100644 --- a/cmd/crowdsec-cli/machines.go +++ b/cmd/crowdsec-cli/machines.go @@ -60,21 +60,36 @@ func generatePassword(length int) string { return string(buf) } -func generateID() (string, error) { - id, err := machineid.ID() +// Returns a unique identifier for each crowdsec installation, using an +// identifier of the OS installation where available, otherwise a random +// string. +func generateIDPrefix() (string, error) { + prefix, err := machineid.ID() + if err == nil { + return prefix, nil + } + log.Debugf("failed to get machine-id with usual files: %s", err) + + bID, err := ioutil.ReadFile(uuid) + if err == nil { + return string(bID), nil + } + return "", errors.Wrap(err, "generating machine id") +} + +// Generate a unique identifier, composed by a prefix and a random suffix. +// The prefix can be provided by a parameter to use in test environments. +func generateID(prefix string) (string, error) { + var err error + if prefix == "" { + prefix, err = generateIDPrefix() + } if err != nil { - log.Debugf("failed to get machine-id with usual files : %s", err) + return "", err } - if id == "" || err != nil { - bID, err := ioutil.ReadFile(uuid) - if err != nil { - return "", errors.Wrap(err, "generating machine id") - } - id = string(bID) - } - id = strings.ReplaceAll(id, "-", "")[:32] - id = fmt.Sprintf("%s%s", id, generatePassword(16)) - return id, nil + prefix = strings.ReplaceAll(prefix, "-", "")[:32] + suffix := generatePassword(16) + return prefix + suffix, nil } func NewMachinesCmd() *cobra.Command { @@ -197,7 +212,7 @@ cscli machines add MyTestMachine --password MyPassword printHelp(cmd) return } - machineID, err = generateID() + machineID, err = generateID("") if err != nil { log.Fatalf("unable to generate machine id : %s", err) } @@ -212,7 +227,7 @@ cscli machines add MyTestMachine --password MyPassword dumpFile = csConfig.API.Client.CredentialsFilePath } - // create password if doesn't specified by user + // create a password if it's not specified by user if machinePassword == "" && !interactive { if !autoAdd { printHelp(cmd) diff --git a/tests/instance-data b/tests/instance-data index 35db55816..784f18b6a 100755 --- a/tests/instance-data +++ b/tests/instance-data @@ -90,7 +90,7 @@ make_init_data() { ./instance-db setup "${CSCLI}" machines add githubciXXXXXXXXXXXXXXXXXXXXXXXX --auto - "${CSCLI}" capi register + "${CSCLI}" capi register --schmilblick githubciXXXXXXXXXXXXXXXXXXXXXXXX "${CSCLI}" hub update "${CSCLI}" collections install crowdsecurity/linux