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 · modeblame

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