Skip to content

Commit e35c44e

Browse files
authored
cscli capi register: no error if online_api_credentials.yaml does not exist (#3645)
1 parent 8a49fcf commit e35c44e

File tree

7 files changed

+35
-16
lines changed

7 files changed

+35
-16
lines changed

.golangci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ linters:
217217
- name: cyclomatic
218218
arguments:
219219
# lower this after refactoring
220-
- 38
220+
- 39
221221
- name: defer
222222
disabled: true
223223
- name: empty-block

cmd/crowdsec-cli/clicapi/capi.go

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,6 @@ func (cli *cliCapi) NewCommand() *cobra.Command {
4242
Use: "capi [action]",
4343
Short: "Manage interaction with Central API (CAPI)",
4444
DisableAutoGenTag: true,
45-
PersistentPreRunE: func(_ *cobra.Command, _ []string) error {
46-
cfg := cli.cfg()
47-
if err := require.LAPI(cfg); err != nil {
48-
return err
49-
}
50-
51-
return require.CAPI(cfg)
52-
},
5345
}
5446

5547
cmd.AddCommand(cli.newRegisterCmd())
@@ -142,6 +134,15 @@ func (cli *cliCapi) newRegisterCmd() *cobra.Command {
142134
Args: args.NoArgs,
143135
DisableAutoGenTag: true,
144136
RunE: func(cmd *cobra.Command, _ []string) error {
137+
cfg := cli.cfg()
138+
if err := require.LAPINoOnlineCreds(cfg); err != nil {
139+
return err
140+
}
141+
142+
if err := require.CAPI(cfg); err != nil {
143+
return err
144+
}
145+
145146
return cli.register(cmd.Context(), capiUserPrefix, outputFile)
146147
},
147148
}
@@ -272,6 +273,14 @@ func (cli *cliCapi) newStatusCmd() *cobra.Command {
272273
cfg := cli.cfg()
273274
ctx := cmd.Context()
274275

276+
if err := require.LAPI(cfg); err != nil {
277+
return err
278+
}
279+
280+
if err := require.CAPI(cfg); err != nil {
281+
return err
282+
}
283+
275284
hub, err := require.Hub(cfg, nil)
276285
if err != nil {
277286
return err

cmd/crowdsec-cli/clisupport/support.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ func (cli *cliSupport) dump(ctx context.Context, outFile string) error {
479479
log.Warn(err)
480480
}
481481

482-
if err = cfg.LoadAPIServer(true); err != nil {
482+
if err = cfg.LoadAPIServer(true, false); err != nil {
483483
log.Warnf("could not load LAPI, skipping CAPI check")
484484

485485
skipCAPI = true

cmd/crowdsec-cli/require/require.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import (
1313
"github.com/crowdsecurity/crowdsec/pkg/database"
1414
)
1515

16-
func LAPI(c *csconfig.Config) error {
17-
if err := c.LoadAPIServer(true); err != nil {
16+
func _lapi(c *csconfig.Config, skipOnlineCreds bool) error {
17+
if err := c.LoadAPIServer(true, skipOnlineCreds); err != nil {
1818
return fmt.Errorf("failed to load Local API: %w", err)
1919
}
2020

@@ -25,6 +25,15 @@ func LAPI(c *csconfig.Config) error {
2525
return nil
2626
}
2727

28+
func LAPI(c *csconfig.Config) error {
29+
return _lapi(c, false)
30+
}
31+
32+
// LAPINoOnlineCreds is a variant of LAPI that does not attempt to load and use capi credentials.
33+
func LAPINoOnlineCreds(c *csconfig.Config) error {
34+
return _lapi(c, true)
35+
}
36+
2837
func CAPI(c *csconfig.Config) error {
2938
if c.API.Server.OnlineClient == nil {
3039
return fmt.Errorf("no configuration for Central API (CAPI) in '%s'", c.FilePath)

cmd/crowdsec/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ func LoadConfig(configFile string, disableAgent bool, disableAPI bool, quiet boo
274274
}
275275

276276
if !cConfig.DisableAPI {
277-
if err := cConfig.LoadAPIServer(false); err != nil {
277+
if err := cConfig.LoadAPIServer(false, false); err != nil {
278278
return nil, err
279279
}
280280
}

pkg/csconfig/api.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ func (a *CTICfg) Load() error {
9494
return nil
9595
}
9696

97+
// Load loads the online credentials from the specified file, returning fs.ErrNotExist if the file does not exist.
9798
func (o *OnlineApiClientCfg) Load() error {
9899
o.Credentials = new(ApiCredentialsCfg)
99100

@@ -302,7 +303,7 @@ func (c *LocalApiServerCfg) ClientURL() string {
302303
return ""
303304
}
304305

305-
func (c *Config) LoadAPIServer(inCli bool) error {
306+
func (c *Config) LoadAPIServer(inCli bool, skipOnlineCreds bool) error {
306307
if c.DisableAPI {
307308
log.Warning("crowdsec local API is disabled from flag")
308309
}
@@ -348,7 +349,7 @@ func (c *Config) LoadAPIServer(inCli bool) error {
348349
c.API.Server.PapiLogLevel = &logLevel
349350
}
350351

351-
if c.API.Server.OnlineClient != nil && c.API.Server.OnlineClient.CredentialsFilePath != "" {
352+
if c.API.Server.OnlineClient != nil && c.API.Server.OnlineClient.CredentialsFilePath != "" && !skipOnlineCreds {
352353
if err := c.API.Server.OnlineClient.Load(); err != nil {
353354
return fmt.Errorf("loading online client credentials: %w", err)
354355
}

pkg/csconfig/api_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ func TestLoadAPIServer(t *testing.T) {
259259

260260
for _, tc := range tests {
261261
t.Run(tc.name, func(t *testing.T) {
262-
err := tc.input.LoadAPIServer(false)
262+
err := tc.input.LoadAPIServer(false, false)
263263
cstest.RequireErrorContains(t, err, tc.expectedErr)
264264

265265
if tc.expectedErr != "" {

0 commit comments

Comments
 (0)