diff --git a/api/sys_plugins.go b/api/sys_plugins.go index d15165ee98..b1ffcb24b0 100644 --- a/api/sys_plugins.go +++ b/api/sys_plugins.go @@ -46,22 +46,14 @@ func (c *Sys) ListPlugins(i *ListPluginsInput) (*ListPluginsResponse, error) { ctx, cancelFunc := context.WithCancel(context.Background()) defer cancelFunc() resp, err := c.c.RawRequestWithContext(ctx, req) - if err != nil { + if err != nil && resp == nil { return nil, err } defer resp.Body.Close() - secret, err := ParseSecret(resp.Body) - if err != nil { - return nil, err - } - if secret == nil || secret.Data == nil { - return nil, errors.New("data from server response is empty") - } - + // We received an Unsupported Operation response from Vault, indicating + // Vault of an older version that doesn't support the READ method yet. if resp.StatusCode == 405 && req.Method == "GET" { - // We received an Unsupported Operation response from Vault, indicating - // Vault of an older version that doesn't support the READ method yet. req.Method = "LIST" resp, err := c.c.RawRequestWithContext(ctx, req) if err != nil { @@ -79,6 +71,14 @@ func (c *Sys) ListPlugins(i *ListPluginsInput) (*ListPluginsResponse, error) { return &ListPluginsResponse{Names: result.Data.Keys}, nil } + secret, err := ParseSecret(resp.Body) + if err != nil { + return nil, err + } + if secret == nil || secret.Data == nil { + return nil, errors.New("data from server response is empty") + } + result := &ListPluginsResponse{ PluginsByType: make(map[consts.PluginType][]string), }