diff --git a/cmd/crowdsec-cli/clicapi/capi.go b/cmd/crowdsec-cli/clicapi/capi.go index 49f68dd6b9ea..9c91633bd381 100644 --- a/cmd/crowdsec-cli/clicapi/capi.go +++ b/cmd/crowdsec-cli/clicapi/capi.go @@ -148,7 +148,7 @@ func (cli *cliCapi) newRegisterCmd() *cobra.Command { } // queryCAPIStatus checks if the Central API is reachable, and if the credentials are correct. It then checks if the instance is enrolle in the console. -func queryCAPIStatus(hub *cwhub.Hub, credURL string, login string, password string) (bool, bool, error) { +func queryCAPIStatus(ctx context.Context, hub *cwhub.Hub, credURL string, login string, password string) (bool, bool, error) { apiURL, err := url.Parse(credURL) if err != nil { return false, false, err @@ -186,7 +186,7 @@ func queryCAPIStatus(hub *cwhub.Hub, credURL string, login string, password stri Scenarios: itemsForAPI, } - authResp, _, err := client.Auth.AuthenticateWatcher(context.Background(), t) + authResp, _, err := client.Auth.AuthenticateWatcher(ctx, t) if err != nil { return false, false, err } @@ -200,7 +200,7 @@ func queryCAPIStatus(hub *cwhub.Hub, credURL string, login string, password stri return true, false, nil } -func (cli *cliCapi) Status(out io.Writer, hub *cwhub.Hub) error { +func (cli *cliCapi) Status(ctx context.Context, out io.Writer, hub *cwhub.Hub) error { cfg := cli.cfg() if err := require.CAPIRegistered(cfg); err != nil { @@ -212,7 +212,7 @@ func (cli *cliCapi) Status(out io.Writer, hub *cwhub.Hub) error { fmt.Fprintf(out, "Loaded credentials from %s\n", cfg.API.Server.OnlineClient.CredentialsFilePath) fmt.Fprintf(out, "Trying to authenticate with username %s on %s\n", cred.Login, cred.URL) - auth, enrolled, err := queryCAPIStatus(hub, cred.URL, cred.Login, cred.Password) + auth, enrolled, err := queryCAPIStatus(ctx, hub, cred.URL, cred.Login, cred.Password) if err != nil { return fmt.Errorf("failed to authenticate to Central API (CAPI): %w", err) } @@ -234,13 +234,13 @@ func (cli *cliCapi) newStatusCmd() *cobra.Command { Short: "Check status with the Central API (CAPI)", Args: cobra.MinimumNArgs(0), DisableAutoGenTag: true, - RunE: func(_ *cobra.Command, _ []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { hub, err := require.Hub(cli.cfg(), nil, nil) if err != nil { return err } - return cli.Status(color.Output, hub) + return cli.Status(cmd.Context(), color.Output, hub) }, } diff --git a/cmd/crowdsec-cli/clilapi/lapi.go b/cmd/crowdsec-cli/clilapi/lapi.go index fa229002512c..e638698b96f9 100644 --- a/cmd/crowdsec-cli/clilapi/lapi.go +++ b/cmd/crowdsec-cli/clilapi/lapi.go @@ -44,7 +44,7 @@ func New(cfg configGetter) *cliLapi { } // queryLAPIStatus checks if the Local API is reachable, and if the credentials are correct. -func queryLAPIStatus(hub *cwhub.Hub, credURL string, login string, password string) (bool, error) { +func queryLAPIStatus(ctx context.Context, hub *cwhub.Hub, credURL string, login string, password string) (bool, error) { apiURL, err := url.Parse(credURL) if err != nil { return false, err @@ -76,7 +76,7 @@ func queryLAPIStatus(hub *cwhub.Hub, credURL string, login string, password stri return true, nil } -func (cli *cliLapi) Status(out io.Writer, hub *cwhub.Hub) error { +func (cli *cliLapi) Status(ctx context.Context, out io.Writer, hub *cwhub.Hub) error { cfg := cli.cfg() cred := cfg.API.Client.Credentials @@ -84,7 +84,7 @@ func (cli *cliLapi) Status(out io.Writer, hub *cwhub.Hub) error { fmt.Fprintf(out, "Loaded credentials from %s\n", cfg.API.Client.CredentialsFilePath) fmt.Fprintf(out, "Trying to authenticate with username %s on %s\n", cred.Login, cred.URL) - _, err := queryLAPIStatus(hub, cred.URL, cred.Login, cred.Password) + _, err := queryLAPIStatus(ctx, hub, cred.URL, cred.Login, cred.Password) if err != nil { return fmt.Errorf("failed to authenticate to Local API (LAPI): %w", err) } @@ -195,13 +195,13 @@ func (cli *cliLapi) newStatusCmd() *cobra.Command { Short: "Check authentication to Local API (LAPI)", Args: cobra.MinimumNArgs(0), DisableAutoGenTag: true, - RunE: func(_ *cobra.Command, _ []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { hub, err := require.Hub(cli.cfg(), nil, nil) if err != nil { return err } - return cli.Status(color.Output, hub) + return cli.Status(cmd.Context(), color.Output, hub) }, } diff --git a/cmd/crowdsec-cli/clipapi/papi.go b/cmd/crowdsec-cli/clipapi/papi.go index 0752267707b2..747b8c01b9b5 100644 --- a/cmd/crowdsec-cli/clipapi/papi.go +++ b/cmd/crowdsec-cli/clipapi/papi.go @@ -1,6 +1,7 @@ package clipapi import ( + "context" "fmt" "io" "time" @@ -55,7 +56,7 @@ func (cli *cliPapi) NewCommand() *cobra.Command { return cmd } -func (cli *cliPapi) Status(out io.Writer, db *database.Client) error { +func (cli *cliPapi) Status(ctx context.Context, out io.Writer, db *database.Client) error { cfg := cli.cfg() apic, err := apiserver.NewAPIC(cfg.API.Server.OnlineClient, db, cfg.API.Server.ConsoleConfig, cfg.API.Server.CapiWhitelists) @@ -68,7 +69,7 @@ func (cli *cliPapi) Status(out io.Writer, db *database.Client) error { return fmt.Errorf("unable to initialize PAPI client: %w", err) } - perms, err := papi.GetPermissions() + perms, err := papi.GetPermissions(ctx) if err != nil { return fmt.Errorf("unable to get PAPI permissions: %w", err) } @@ -103,12 +104,14 @@ func (cli *cliPapi) newStatusCmd() *cobra.Command { DisableAutoGenTag: true, RunE: func(cmd *cobra.Command, _ []string) error { cfg := cli.cfg() - db, err := require.DBClient(cmd.Context(), cfg.DbConfig) + ctx := cmd.Context() + + db, err := require.DBClient(ctx, cfg.DbConfig) if err != nil { return err } - return cli.Status(color.Output, db) + return cli.Status(ctx, color.Output, db) }, } diff --git a/cmd/crowdsec-cli/clisupport/support.go b/cmd/crowdsec-cli/clisupport/support.go index f161c66c8022..e9837b03fe72 100644 --- a/cmd/crowdsec-cli/clisupport/support.go +++ b/cmd/crowdsec-cli/clisupport/support.go @@ -231,13 +231,13 @@ func (cli *cliSupport) dumpAgents(zw *zip.Writer, db *database.Client) error { return nil } -func (cli *cliSupport) dumpLAPIStatus(zw *zip.Writer, hub *cwhub.Hub) error { +func (cli *cliSupport) dumpLAPIStatus(ctx context.Context, zw *zip.Writer, hub *cwhub.Hub) error { log.Info("Collecting LAPI status") out := new(bytes.Buffer) cl := clilapi.New(cli.cfg) - err := cl.Status(out, hub) + err := cl.Status(ctx, out, hub) if err != nil { fmt.Fprintf(out, "%s\n", err) } @@ -249,13 +249,13 @@ func (cli *cliSupport) dumpLAPIStatus(zw *zip.Writer, hub *cwhub.Hub) error { return nil } -func (cli *cliSupport) dumpCAPIStatus(zw *zip.Writer, hub *cwhub.Hub) error { +func (cli *cliSupport) dumpCAPIStatus(ctx context.Context, zw *zip.Writer, hub *cwhub.Hub) error { log.Info("Collecting CAPI status") out := new(bytes.Buffer) cc := clicapi.New(cli.cfg) - err := cc.Status(out, hub) + err := cc.Status(ctx, out, hub) if err != nil { fmt.Fprintf(out, "%s\n", err) } @@ -267,13 +267,13 @@ func (cli *cliSupport) dumpCAPIStatus(zw *zip.Writer, hub *cwhub.Hub) error { return nil } -func (cli *cliSupport) dumpPAPIStatus(zw *zip.Writer, db *database.Client) error { +func (cli *cliSupport) dumpPAPIStatus(ctx context.Context, zw *zip.Writer, db *database.Client) error { log.Info("Collecting PAPI status") out := new(bytes.Buffer) cp := clipapi.New(cli.cfg) - err := cp.Status(out, db) + err := cp.Status(ctx, out, db) if err != nil { fmt.Fprintf(out, "%s\n", err) } @@ -534,17 +534,17 @@ func (cli *cliSupport) dump(ctx context.Context, outFile string) error { } if !skipCAPI { - if err = cli.dumpCAPIStatus(zipWriter, hub); err != nil { + if err = cli.dumpCAPIStatus(ctx, zipWriter, hub); err != nil { log.Warnf("could not collect CAPI status: %s", err) } - if err = cli.dumpPAPIStatus(zipWriter, db); err != nil { + if err = cli.dumpPAPIStatus(ctx, zipWriter, db); err != nil { log.Warnf("could not collect PAPI status: %s", err) } } if !skipLAPI { - if err = cli.dumpLAPIStatus(zipWriter, hub); err != nil { + if err = cli.dumpLAPIStatus(ctx, zipWriter, hub); err != nil { log.Warnf("could not collect LAPI status: %s", err) } diff --git a/pkg/apiserver/papi.go b/pkg/apiserver/papi.go index 0d0fd0ecd421..0a69f086a7ff 100644 --- a/pkg/apiserver/papi.go +++ b/pkg/apiserver/papi.go @@ -156,11 +156,11 @@ func (p *Papi) handleEvent(event longpollclient.Event, sync bool) error { return nil } -func (p *Papi) GetPermissions() (PapiPermCheckSuccess, error) { +func (p *Papi) GetPermissions(ctx context.Context) (PapiPermCheckSuccess, error) { httpClient := p.apiClient.GetClient() papiCheckUrl := fmt.Sprintf("%s%s%s", p.URL, types.PAPIVersion, types.PAPIPermissionsUrl) - req, err := http.NewRequest(http.MethodGet, papiCheckUrl, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, papiCheckUrl, nil) if err != nil { return PapiPermCheckSuccess{}, fmt.Errorf("failed to create request: %w", err) }