github.com/IBM-Cloud/bluemix-go@v0.0.0-20240314082800-4e02a69b84b2/api/cis/cisv1/firewalls.go (about)

     1  package cisv1
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"time"
     7  
     8  	"github.com/IBM-Cloud/bluemix-go/client"
     9  )
    10  
    11  //FirewallRecord ...
    12  type FirewallRecord struct {
    13  	ID             string          `json:"id"`
    14  	Description    string          `json:"description,omitempty"`
    15  	Urls           []string        `json:"urls,omitempty"`
    16  	Configurations []Configuration `json:"configurations,omitempty"`
    17  	Paused         bool            `json:"paused,omitempty"`
    18  	CreatedOn      *time.Time      `json:"created_on,omitempty"`
    19  	ModifiedOn     *time.Time      `json:"modified_on,omitempty"`
    20  	Mode           string          `json:"mode,omitempty"`
    21  	Notes          string          `json:"notes,omitempty"`
    22  	Configuration  *Configuration  `json:"configuration,omitempty"`
    23  	Priority       int             `json:"priority,omitempty"`
    24  }
    25  
    26  //Configuration ...
    27  type Configuration struct {
    28  	Target string `json:"target,omitempty"`
    29  	Value  string `json:"value,omitempty"`
    30  }
    31  
    32  //FirewallResults ...
    33  type FirewallResults struct {
    34  	FirewallList []FirewallRecord `json:"result"`
    35  	ResultsInfo  ResultsCount     `json:"result_info"`
    36  	Success      bool             `json:"success"`
    37  	Errors       []Error          `json:"errors"`
    38  }
    39  
    40  //FirewallResult ...
    41  type FirewallResult struct {
    42  	Firewall FirewallRecord `json:"result"`
    43  	Success  bool           `json:"success"`
    44  	Errors   []Error        `json:"errors"`
    45  	Messages []string       `json:"messages"`
    46  }
    47  
    48  //FirewallBody ...
    49  type FirewallBody struct {
    50  	Description    string          `json:"description,omitempty"`
    51  	Urls           []string        `json:"urls,omitempty"`
    52  	Configurations []Configuration `json:"configurations,omitempty"`
    53  	Paused         bool            `json:"paused,omitempty"`
    54  	Mode           string          `json:"mode,omitempty"`
    55  	Notes          string          `json:"notes,omitempty"`
    56  	Configuration  *Configuration  `json:"configuration,omitempty"`
    57  	Priority       int             `json:"priority,omitempty"`
    58  }
    59  
    60  //Firewall ...
    61  type Firewall interface {
    62  	ListFirewall(cisID string, zoneID string, firewallType string) ([]FirewallRecord, error)
    63  	GetFirewall(cisID string, zoneID string, firewallType string, firewallID string) (*FirewallRecord, error)
    64  	CreateFirewall(cisID string, zoneID string, firewallType string, firewallBody FirewallBody) (*FirewallRecord, error)
    65  	DeleteFirewall(cisID string, zoneID string, firewallType string, firewallID string) error
    66  	UpdateFirewall(cisID string, zoneID string, firewallType string, firewallID string, firewallBody FirewallBody) (*FirewallRecord, error)
    67  }
    68  
    69  //firewall ...
    70  type firewall struct {
    71  	client *client.Client
    72  }
    73  
    74  func newFirewallAPI(c *client.Client) Firewall {
    75  	return &firewall{
    76  		client: c,
    77  	}
    78  }
    79  
    80  func (r *firewall) ListFirewall(cisID string, zoneID string, firewallType string) ([]FirewallRecord, error) {
    81  	firewallResults := FirewallResults{}
    82  
    83  	var rawURL string
    84  	rawURL = fmt.Sprintf("/v1/%s/zones/%s/firewall/%s", cisID, zoneID, firewallType)
    85  	if firewallType == "access_rules" {
    86  		rawURL = fmt.Sprintf("/v1/%s/zones/%s/firewall/%s/rules", cisID, zoneID, firewallType)
    87  	}
    88  
    89  	_, err := r.client.Get(rawURL, &firewallResults, nil)
    90  	if err != nil {
    91  		return nil, err
    92  	}
    93  	return firewallResults.FirewallList, err
    94  }
    95  
    96  func (r *firewall) GetFirewall(cisID string, zoneID string, firewallType string, firewallID string) (*FirewallRecord, error) {
    97  	firewallResult := FirewallResult{}
    98  	var rawURL string
    99  	rawURL = fmt.Sprintf("/v1/%s/zones/%s/firewall/%s/%s", cisID, zoneID, firewallType, firewallID)
   100  	if firewallType == "access_rules" {
   101  		rawURL = fmt.Sprintf("/v1/%s/zones/%s/firewall/%s/rules/%s", cisID, zoneID, firewallType, firewallID)
   102  	}
   103  	_, err := r.client.Get(rawURL, &firewallResult, nil)
   104  	if err != nil {
   105  		return nil, err
   106  	}
   107  	return &firewallResult.Firewall, nil
   108  }
   109  
   110  func (r *firewall) DeleteFirewall(cisID string, zoneID string, firewallType string, firewallID string) error {
   111  	var rawURL string
   112  	rawURL = fmt.Sprintf("/v1/%s/zones/%s/firewall/%s/%s", cisID, zoneID, firewallType, firewallID)
   113  	if firewallType == "access_rules" {
   114  		rawURL = fmt.Sprintf("/v1/%s/zones/%s/firewall/%s/rules/%s", cisID, zoneID, firewallType, firewallID)
   115  	}
   116  	_, err := r.client.Delete(rawURL)
   117  	if err != nil {
   118  		return err
   119  	}
   120  	return nil
   121  }
   122  
   123  func (r *firewall) CreateFirewall(cisID string, zoneID string, firewallType string, firewallBody FirewallBody) (*FirewallRecord, error) {
   124  	firewallResult := FirewallResult{}
   125  	var rawURL string
   126  	rawURL = fmt.Sprintf("/v1/%s/zones/%s/firewall/%s", cisID, zoneID, firewallType)
   127  	if firewallType == "access_rules" {
   128  		rawURL = fmt.Sprintf("/v1/%s/zones/%s/firewall/%s/rules", cisID, zoneID, firewallType)
   129  	}
   130  	log.Printf(">>>> rawURL : %s\n", rawURL)
   131  	_, err := r.client.Post(rawURL, &firewallBody, &firewallResult)
   132  	if err != nil {
   133  		return nil, err
   134  	}
   135  	return &firewallResult.Firewall, nil
   136  }
   137  
   138  func (r *firewall) UpdateFirewall(cisID string, zoneID string, firewallType string, firewallID string, firewallBody FirewallBody) (*FirewallRecord, error) {
   139  	firewallResult := FirewallResult{}
   140  	var rawURL string
   141  	rawURL = fmt.Sprintf("/v1/%s/zones/%s/firewall/%s/%s", cisID, zoneID, firewallType, firewallID)
   142  	if firewallType == "access_rules" {
   143  		rawURL = fmt.Sprintf("/v1/%s/zones/%s/firewall/%s/rules/%s", cisID, zoneID, firewallType, firewallID)
   144  	}
   145  	_, err := r.client.Put(rawURL, &firewallBody, &firewallResult)
   146  	if err != nil {
   147  		return nil, err
   148  	}
   149  	return &firewallResult.Firewall, nil
   150  }