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  }