| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package api |
| |
| import ( |
| "context" |
| "errors" |
| "net/http" |
| |
| "github.com/mitchellh/mapstructure" |
| ) |
| |
| func (c *Sys) CORSStatus() (*CORSResponse, error) { |
| return c.CORSStatusWithContext(context.Background()) |
| } |
| |
| func (c *Sys) CORSStatusWithContext(ctx context.Context) (*CORSResponse, error) { |
| ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) |
| defer cancelFunc() |
| |
| r := c.c.NewRequest(http.MethodGet, "/v1/sys/config/cors") |
| |
| resp, err := c.c.rawRequestWithContext(ctx, r) |
| if err != 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") |
| } |
| |
| var result CORSResponse |
| err = mapstructure.Decode(secret.Data, &result) |
| if err != nil { |
| return nil, err |
| } |
| |
| return &result, err |
| } |
| |
| func (c *Sys) ConfigureCORS(req *CORSRequest) error { |
| return c.ConfigureCORSWithContext(context.Background(), req) |
| } |
| |
| func (c *Sys) ConfigureCORSWithContext(ctx context.Context, req *CORSRequest) error { |
| ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) |
| defer cancelFunc() |
| |
| r := c.c.NewRequest(http.MethodPut, "/v1/sys/config/cors") |
| if err := r.SetJSONBody(req); err != nil { |
| return err |
| } |
| |
| resp, err := c.c.rawRequestWithContext(ctx, r) |
| if err == nil { |
| defer resp.Body.Close() |
| } |
| return err |
| } |
| |
| func (c *Sys) DisableCORS() error { |
| return c.DisableCORSWithContext(context.Background()) |
| } |
| |
| func (c *Sys) DisableCORSWithContext(ctx context.Context) error { |
| ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) |
| defer cancelFunc() |
| |
| r := c.c.NewRequest(http.MethodDelete, "/v1/sys/config/cors") |
| |
| resp, err := c.c.rawRequestWithContext(ctx, r) |
| if err == nil { |
| defer resp.Body.Close() |
| } |
| return err |
| } |
| |
| type CORSRequest struct { |
| AllowedOrigins []string `json:"allowed_origins" mapstructure:"allowed_origins"` |
| AllowedHeaders []string `json:"allowed_headers" mapstructure:"allowed_headers"` |
| Enabled bool `json:"enabled" mapstructure:"enabled"` |
| } |
| |
| type CORSResponse struct { |
| AllowedOrigins []string `json:"allowed_origins" mapstructure:"allowed_origins"` |
| AllowedHeaders []string `json:"allowed_headers" mapstructure:"allowed_headers"` |
| Enabled bool `json:"enabled" mapstructure:"enabled"` |
| } |