1package api
2
3import (
4	"context"
5	"errors"
6
7	"github.com/mitchellh/mapstructure"
8)
9
10func (c *Sys) CORSStatus() (*CORSResponse, error) {
11	r := c.c.NewRequest("GET", "/v1/sys/config/cors")
12
13	ctx, cancelFunc := context.WithCancel(context.Background())
14	defer cancelFunc()
15	resp, err := c.c.RawRequestWithContext(ctx, r)
16	if err != nil {
17		return nil, err
18	}
19	defer resp.Body.Close()
20
21	secret, err := ParseSecret(resp.Body)
22	if err != nil {
23		return nil, err
24	}
25	if secret == nil || secret.Data == nil {
26		return nil, errors.New("data from server response is empty")
27	}
28
29	var result CORSResponse
30	err = mapstructure.Decode(secret.Data, &result)
31	if err != nil {
32		return nil, err
33	}
34
35	return &result, err
36}
37
38func (c *Sys) ConfigureCORS(req *CORSRequest) (*CORSResponse, error) {
39	r := c.c.NewRequest("PUT", "/v1/sys/config/cors")
40	if err := r.SetJSONBody(req); err != nil {
41		return nil, err
42	}
43
44	ctx, cancelFunc := context.WithCancel(context.Background())
45	defer cancelFunc()
46	resp, err := c.c.RawRequestWithContext(ctx, r)
47	if err != nil {
48		return nil, err
49	}
50	defer resp.Body.Close()
51
52	secret, err := ParseSecret(resp.Body)
53	if err != nil {
54		return nil, err
55	}
56	if secret == nil || secret.Data == nil {
57		return nil, errors.New("data from server response is empty")
58	}
59
60	var result CORSResponse
61	err = mapstructure.Decode(secret.Data, &result)
62	if err != nil {
63		return nil, err
64	}
65
66	return &result, err
67}
68
69func (c *Sys) DisableCORS() (*CORSResponse, error) {
70	r := c.c.NewRequest("DELETE", "/v1/sys/config/cors")
71
72	ctx, cancelFunc := context.WithCancel(context.Background())
73	defer cancelFunc()
74	resp, err := c.c.RawRequestWithContext(ctx, r)
75	if err != nil {
76		return nil, err
77	}
78	defer resp.Body.Close()
79
80	secret, err := ParseSecret(resp.Body)
81	if err != nil {
82		return nil, err
83	}
84	if secret == nil || secret.Data == nil {
85		return nil, errors.New("data from server response is empty")
86	}
87
88	var result CORSResponse
89	err = mapstructure.Decode(secret.Data, &result)
90	if err != nil {
91		return nil, err
92	}
93
94	return &result, err
95}
96
97type CORSRequest struct {
98	AllowedOrigins string `json:"allowed_origins" mapstructure:"allowed_origins"`
99	Enabled        bool   `json:"enabled" mapstructure:"enabled"`
100}
101
102type CORSResponse struct {
103	AllowedOrigins string `json:"allowed_origins" mapstructure:"allowed_origins"`
104	Enabled        bool   `json:"enabled" mapstructure:"enabled"`
105}
106