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 }