diff --git a/internal/client/client.go b/internal/client/client.go index 1606a03..9fce9f5 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -14,6 +14,7 @@ import ( type Client struct { BaseURL string Token string + APIKey string HTTPClient *http.Client } @@ -28,6 +29,17 @@ func New(baseURL, token string) *Client { } } +// NewWithAPIKey creates a Client that authenticates using X-API-Key. +func NewWithAPIKey(baseURL, apiKey string) *Client { + return &Client{ + BaseURL: strings.TrimRight(baseURL, "/"), + APIKey: apiKey, + HTTPClient: &http.Client{ + Timeout: 30 * time.Second, + }, + } +} + // RequestError represents a non-2xx HTTP response. type RequestError struct { StatusCode int @@ -45,7 +57,9 @@ func (c *Client) Do(method, path string, body io.Reader) ([]byte, error) { if err != nil { return nil, fmt.Errorf("cannot create request: %w", err) } - if c.Token != "" { + if c.APIKey != "" { + req.Header.Set("X-API-Key", c.APIKey) + } else if c.Token != "" { req.Header.Set("Authorization", "Bearer "+c.Token) } if body != nil { diff --git a/internal/commands/user.go b/internal/commands/user.go index 445b1ac..bdbd133 100644 --- a/internal/commands/user.go +++ b/internal/commands/user.go @@ -194,7 +194,7 @@ func RunUserCreate(username, password, email, fullName, accMgrTokenFlag string) if err != nil { output.Errorf("config error: %v", err) } - c := client.New(cfg.BaseURL, accMgrToken) + c := client.NewWithAPIKey(cfg.BaseURL, accMgrToken) data, err := c.Post("/users", bytes.NewReader(body)) if err != nil { output.Errorf("failed to create user: %v", err)