cloudflare/cloudflared

Public

mirrored from https://github.com/cloudflare/cloudflaredAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
2021.12.4

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

cfapi/virtual_network.go

127lines · modecode

1package cfapi
2
3import (
4 "fmt"
5 "io"
6 "net/http"
7 "net/url"
8 "path"
9 "strconv"
10 "time"
11
12 "github.com/google/uuid"
13 "github.com/pkg/errors"
14)
15
16type NewVirtualNetwork struct {
17 Name string `json:"name"`
18 Comment string `json:"comment"`
19 IsDefault bool `json:"is_default"`
20}
21
22type VirtualNetwork struct {
23 ID uuid.UUID `json:"id"`
24 Comment string `json:"comment"`
25 Name string `json:"name"`
26 IsDefault bool `json:"is_default_network"`
27 CreatedAt time.Time `json:"created_at"`
28 DeletedAt time.Time `json:"deleted_at"`
29}
30
31type UpdateVirtualNetwork struct {
32 Name *string `json:"name,omitempty"`
33 Comment *string `json:"comment,omitempty"`
34 IsDefault *bool `json:"is_default_network,omitempty"`
35}
36
37func (virtualNetwork VirtualNetwork) TableString() string {
38 deletedColumn := "-"
39 if !virtualNetwork.DeletedAt.IsZero() {
40 deletedColumn = virtualNetwork.DeletedAt.Format(time.RFC3339)
41 }
42 return fmt.Sprintf(
43 "%s\t%s\t%s\t%s\t%s\t%s\t",
44 virtualNetwork.ID,
45 virtualNetwork.Name,
46 strconv.FormatBool(virtualNetwork.IsDefault),
47 virtualNetwork.Comment,
48 virtualNetwork.CreatedAt.Format(time.RFC3339),
49 deletedColumn,
50 )
51}
52
53func (r *RESTClient) CreateVirtualNetwork(newVnet NewVirtualNetwork) (VirtualNetwork, error) {
54 resp, err := r.sendRequest("POST", r.baseEndpoints.accountVnets, newVnet)
55 if err != nil {
56 return VirtualNetwork{}, errors.Wrap(err, "REST request failed")
57 }
58 defer resp.Body.Close()
59
60 if resp.StatusCode == http.StatusOK {
61 return parseVnet(resp.Body)
62 }
63
64 return VirtualNetwork{}, r.statusCodeToError("add virtual network", resp)
65}
66
67func (r *RESTClient) ListVirtualNetworks(filter *VnetFilter) ([]*VirtualNetwork, error) {
68 endpoint := r.baseEndpoints.accountVnets
69 endpoint.RawQuery = filter.Encode()
70 resp, err := r.sendRequest("GET", endpoint, nil)
71 if err != nil {
72 return nil, errors.Wrap(err, "REST request failed")
73 }
74 defer resp.Body.Close()
75
76 if resp.StatusCode == http.StatusOK {
77 return parseListVnets(resp.Body)
78 }
79
80 return nil, r.statusCodeToError("list virtual networks", resp)
81}
82
83func (r *RESTClient) DeleteVirtualNetwork(id uuid.UUID) error {
84 endpoint := r.baseEndpoints.accountVnets
85 endpoint.Path = path.Join(endpoint.Path, url.PathEscape(id.String()))
86 resp, err := r.sendRequest("DELETE", endpoint, nil)
87 if err != nil {
88 return errors.Wrap(err, "REST request failed")
89 }
90 defer resp.Body.Close()
91
92 if resp.StatusCode == http.StatusOK {
93 _, err := parseVnet(resp.Body)
94 return err
95 }
96
97 return r.statusCodeToError("delete virtual network", resp)
98}
99
100func (r *RESTClient) UpdateVirtualNetwork(id uuid.UUID, updates UpdateVirtualNetwork) error {
101 endpoint := r.baseEndpoints.accountVnets
102 endpoint.Path = path.Join(endpoint.Path, url.PathEscape(id.String()))
103 resp, err := r.sendRequest("PATCH", endpoint, updates)
104 if err != nil {
105 return errors.Wrap(err, "REST request failed")
106 }
107 defer resp.Body.Close()
108
109 if resp.StatusCode == http.StatusOK {
110 _, err := parseVnet(resp.Body)
111 return err
112 }
113
114 return r.statusCodeToError("update virtual network", resp)
115}
116
117func parseListVnets(body io.ReadCloser) ([]*VirtualNetwork, error) {
118 var vnets []*VirtualNetwork
119 err := parseResponse(body, &vnets)
120 return vnets, err
121}
122
123func parseVnet(body io.ReadCloser) (VirtualNetwork, error) {
124 var vnet VirtualNetwork
125 err := parseResponse(body, &vnet)
126 return vnet, err
127}
128