github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/firewallpolicies.go (about) 1 package oneandone 2 3 import ( 4 "net/http" 5 ) 6 7 type FirewallPolicy struct { 8 Identity 9 descField 10 DefaultPolicy uint8 `json:"default"` 11 CreationDate string `json:"creation_date,omitempty"` 12 State string `json:"state,omitempty"` 13 Rules []FirewallPolicyRule `json:"rules,omitempty"` 14 ServerIps []ServerIpInfo `json:"server_ips,omitempty"` 15 ApiPtr 16 } 17 18 type FirewallPolicyRule struct { 19 idField 20 Protocol string `json:"protocol,omitempty"` 21 PortFrom *int `json:"port_from,omitempty"` 22 PortTo *int `json:"port_to,omitempty"` 23 Port string `json:"port,omitempty"` 24 Action string `json:"action,omitempty"` 25 Description string `json:"description,omitempty"` 26 SourceIp string `json:"source,omitempty"` 27 } 28 29 type FirewallPolicyRequest struct { 30 Name string `json:"name,omitempty"` 31 Description string `json:"description,omitempty"` 32 Rules []FirewallPolicyRule `json:"rules,omitempty"` 33 } 34 35 // GET /firewall_policies 36 func (api *API) ListFirewallPolicies(args ...interface{}) ([]FirewallPolicy, error) { 37 url, err := processQueryParams(createUrl(api, firewallPolicyPathSegment), args...) 38 if err != nil { 39 return nil, err 40 } 41 result := []FirewallPolicy{} 42 err = api.Client.Get(url, &result, http.StatusOK) 43 if err != nil { 44 return nil, err 45 } 46 for index, _ := range result { 47 result[index].api = api 48 } 49 return result, nil 50 } 51 52 // POST /firewall_policies 53 func (api *API) CreateFirewallPolicy(fp_data *FirewallPolicyRequest) (string, *FirewallPolicy, error) { 54 result := new(FirewallPolicy) 55 url := createUrl(api, firewallPolicyPathSegment) 56 err := api.Client.Post(url, &fp_data, &result, http.StatusAccepted) 57 if err != nil { 58 return "", nil, err 59 } 60 result.api = api 61 return result.Id, result, nil 62 } 63 64 // GET /firewall_policies/{id} 65 func (api *API) GetFirewallPolicy(fp_id string) (*FirewallPolicy, error) { 66 result := new(FirewallPolicy) 67 url := createUrl(api, firewallPolicyPathSegment, fp_id) 68 err := api.Client.Get(url, &result, http.StatusOK) 69 if err != nil { 70 return nil, err 71 } 72 result.api = api 73 return result, nil 74 75 } 76 77 // DELETE /firewall_policies/{id} 78 func (api *API) DeleteFirewallPolicy(fp_id string) (*FirewallPolicy, error) { 79 result := new(FirewallPolicy) 80 url := createUrl(api, firewallPolicyPathSegment, fp_id) 81 err := api.Client.Delete(url, nil, &result, http.StatusAccepted) 82 if err != nil { 83 return nil, err 84 } 85 result.api = api 86 return result, nil 87 } 88 89 // PUT /firewall_policies/{id} 90 func (api *API) UpdateFirewallPolicy(fp_id string, fp_new_name string, fp_new_desc string) (*FirewallPolicy, error) { 91 result := new(FirewallPolicy) 92 data := FirewallPolicyRequest{ 93 Name: fp_new_name, 94 Description: fp_new_desc, 95 } 96 url := createUrl(api, firewallPolicyPathSegment, fp_id) 97 err := api.Client.Put(url, &data, &result, http.StatusOK) 98 if err != nil { 99 return nil, err 100 } 101 result.api = api 102 return result, nil 103 } 104 105 // GET /firewall_policies/{id}/server_ips 106 func (api *API) ListFirewallPolicyServerIps(fp_id string) ([]ServerIpInfo, error) { 107 result := []ServerIpInfo{} 108 url := createUrl(api, firewallPolicyPathSegment, fp_id, "server_ips") 109 err := api.Client.Get(url, &result, http.StatusOK) 110 if err != nil { 111 return nil, err 112 } 113 return result, nil 114 } 115 116 // GET /firewall_policies/{id}/server_ips/{id} 117 func (api *API) GetFirewallPolicyServerIp(fp_id string, ip_id string) (*ServerIpInfo, error) { 118 result := new(ServerIpInfo) 119 url := createUrl(api, firewallPolicyPathSegment, fp_id, "server_ips", ip_id) 120 err := api.Client.Get(url, &result, http.StatusOK) 121 if err != nil { 122 return nil, err 123 } 124 return result, nil 125 } 126 127 // POST /firewall_policies/{id}/server_ips 128 func (api *API) AddFirewallPolicyServerIps(fp_id string, ip_ids []string) (*FirewallPolicy, error) { 129 result := new(FirewallPolicy) 130 request := serverIps{ 131 ServerIps: ip_ids, 132 } 133 134 url := createUrl(api, firewallPolicyPathSegment, fp_id, "server_ips") 135 err := api.Client.Post(url, &request, &result, http.StatusAccepted) 136 if err != nil { 137 return nil, err 138 } 139 result.api = api 140 return result, nil 141 } 142 143 // GET /firewall_policies/{id}/rules 144 func (api *API) ListFirewallPolicyRules(fp_id string) ([]FirewallPolicyRule, error) { 145 result := []FirewallPolicyRule{} 146 url := createUrl(api, firewallPolicyPathSegment, fp_id, "rules") 147 err := api.Client.Get(url, &result, http.StatusOK) 148 if err != nil { 149 return nil, err 150 } 151 return result, nil 152 } 153 154 // POST /firewall_policies/{id}/rules 155 func (api *API) AddFirewallPolicyRules(fp_id string, fp_rules []FirewallPolicyRule) (*FirewallPolicy, error) { 156 result := new(FirewallPolicy) 157 data := struct { 158 Rules []FirewallPolicyRule `json:"rules"` 159 }{fp_rules} 160 url := createUrl(api, firewallPolicyPathSegment, fp_id, "rules") 161 err := api.Client.Post(url, &data, &result, http.StatusAccepted) 162 if err != nil { 163 return nil, err 164 } 165 result.api = api 166 return result, nil 167 } 168 169 // GET /firewall_policies/{id}/rules/{id} 170 func (api *API) GetFirewallPolicyRule(fp_id string, rule_id string) (*FirewallPolicyRule, error) { 171 result := new(FirewallPolicyRule) 172 url := createUrl(api, firewallPolicyPathSegment, fp_id, "rules", rule_id) 173 err := api.Client.Get(url, &result, http.StatusOK) 174 if err != nil { 175 return nil, err 176 } 177 return result, nil 178 } 179 180 // DELETE /firewall_policies/{id}/rules/{id} 181 func (api *API) DeleteFirewallPolicyRule(fp_id string, rule_id string) (*FirewallPolicy, error) { 182 result := new(FirewallPolicy) 183 url := createUrl(api, firewallPolicyPathSegment, fp_id, "rules", rule_id) 184 err := api.Client.Delete(url, nil, &result, http.StatusAccepted) 185 if err != nil { 186 return nil, err 187 } 188 result.api = api 189 return result, nil 190 } 191 192 func (fp *FirewallPolicy) GetState() (string, error) { 193 in, err := fp.api.GetFirewallPolicy(fp.Id) 194 if in == nil { 195 return "", err 196 } 197 return in.State, err 198 }