github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/waf_hw/v1/premium_domains/requests.go (about) 1 /* 2 Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. 3 */ 4 5 package premium_domains 6 7 import ( 8 "github.com/chnsz/golangsdk" 9 "github.com/chnsz/golangsdk/openstack/utils" 10 ) 11 12 var RequestOpts = golangsdk.RequestOpts{ 13 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 14 } 15 16 // CreatePremiumHostOpts the options for creating premium domains. 17 type CreateOpts struct { 18 CertificateId string `json:"certificateid,omitempty"` 19 CertificateName string `json:"certificatename,omitempty"` 20 HostName string `json:"hostname" required:"true"` 21 Proxy *bool `json:"proxy,omitempty"` 22 PolicyId string `json:"policyid,omitempty"` 23 Servers []Server `json:"server,omitempty"` 24 BlockPage *BlockPage `json:"block_page,omitempty"` 25 ForwardHeaderMap map[string]string `json:"forward_header_map,omitempty"` 26 Description string `json:"description,omitempty"` 27 EnterpriseProjectID string `q:"enterprise_project_id" json:"-"` 28 } 29 30 type BlockPage struct { 31 Template string `json:"template,omitempty"` 32 CustomPage *CustomPage `json:"custom_page,omitempty"` 33 RedirectUrl string `json:"redirect_url,omitempty"` 34 } 35 36 type CustomPage struct { 37 StatusCode string `json:"status_code,omitempty"` 38 ContentType string `json:"content_type,omitempty"` 39 Content string `json:"content,omitempty"` 40 } 41 42 // PremiumDomainServer the options of domain server for creating premium domains. 43 type Server struct { 44 FrontProtocol string `json:"front_protocol" required:"true"` 45 BackProtocol string `json:"back_protocol" required:"true"` 46 Address string `json:"address" required:"true"` 47 Port int `json:"port" required:"true"` 48 Type string `json:"type,omitempty"` 49 VpcId string `json:"vpc_id,omitempty"` 50 } 51 52 // Create create a premium domain in HuaweiCloud. 53 func Create(c *golangsdk.ServiceClient, opts CreateOpts) (*CreatePremiumHostRst, error) { 54 b, err := golangsdk.BuildRequestBody(opts, "") 55 if err != nil { 56 return nil, err 57 } 58 query, err := golangsdk.BuildQueryString(opts) 59 if err != nil { 60 return nil, err 61 } 62 63 var rst golangsdk.Result 64 _, err = c.Post(rootURL(c)+query.String(), b, &rst.Body, &golangsdk.RequestOpts{ 65 OkCodes: []int{200}, 66 MoreHeaders: RequestOpts.MoreHeaders, 67 }) 68 if err == nil { 69 var r CreatePremiumHostRst 70 rst.ExtractInto(&r) 71 return &r, nil 72 } 73 return nil, err 74 } 75 76 // Get get a premium domain by id. 77 func Get(c *golangsdk.ServiceClient, hostId string) (*PremiumHost, error) { 78 return GetWithEpsID(c, hostId, "") 79 } 80 81 func GetWithEpsID(c *golangsdk.ServiceClient, hostId, epsID string) (*PremiumHost, error) { 82 var rst golangsdk.Result 83 _, err := c.Get(resourceURL(c, hostId)+utils.GenerateEpsIDQuery(epsID), &rst.Body, &golangsdk.RequestOpts{ 84 MoreHeaders: RequestOpts.MoreHeaders, 85 }) 86 if err == nil { 87 var r PremiumHost 88 rst.ExtractInto(&r) 89 return &r, nil 90 } 91 return nil, err 92 } 93 94 // ListPremiumHostOpts the options for querying a list of premium domains. 95 type ListPremiumHostOpts struct { 96 Page string `q:"page"` 97 PageSize string `q:"pagesize"` 98 HostName string `q:"hostname"` 99 PolicyName string `q:"policyname"` 100 ProtectStatus int `q:"protect_status"` 101 EnterpriseProjectID string `q:"enterprise_project_id"` 102 } 103 104 // List query a list of premium domains. 105 func List(c *golangsdk.ServiceClient, opts ListPremiumHostOpts) (*PremiumHostList, error) { 106 url := rootURL(c) 107 query, err := golangsdk.BuildQueryString(opts) 108 if err != nil { 109 return nil, err 110 } 111 url += query.String() 112 113 var rst golangsdk.Result 114 _, err = c.Get(url, &rst.Body, &golangsdk.RequestOpts{ 115 MoreHeaders: RequestOpts.MoreHeaders, 116 }) 117 if err == nil { 118 var r PremiumHostList 119 rst.ExtractInto(&r) 120 return &r, nil 121 } 122 return nil, err 123 } 124 125 // UpdatePremiumHostOpts the options for updating premium domains. 126 type UpdatePremiumHostOpts struct { 127 Proxy *bool `json:"proxy,omitempty"` 128 CertificateId string `json:"certificateid,omitempty"` 129 CertificateName string `json:"certificatename,omitempty"` 130 Tls string `json:"tls,omitempty"` 131 Cipher string `json:"cipher,omitempty"` 132 Description *string `json:"description,omitempty"` 133 WebTag *string `json:"web_tag,omitempty"` 134 BlockPage *BlockPage `json:"block_page,omitempty"` 135 TrafficMark *TrafficMark `json:"traffic_mark,omitempty"` 136 CircuitBreaker *CircuitBreaker `json:"circuit_breaker,omitempty"` 137 TimeoutConfig *TimeoutConfig `json:"timeout_config,omitempty"` 138 Flag *Flag `json:"flag,omitempty"` 139 ForwardHeaderMap map[string]string `json:"forward_header_map,omitempty"` 140 EnterpriseProjectID string `q:"enterprise_project_id" json:"-"` 141 } 142 143 type TrafficMark struct { 144 Sip []string `json:"sip,omitempty"` 145 Cookie string `json:"cookie,omitempty"` 146 Params string `json:"params,omitempty"` 147 } 148 149 type CircuitBreaker struct { 150 Switch *bool `json:"switch,omitempty"` 151 DeadNum *int `json:"dead_num,omitempty"` 152 DeadRatio *float64 `json:"dead_ratio,omitempty"` 153 BlockTime *int `json:"block_time,omitempty"` 154 SuperpositionNum *int `json:"superposition_num,omitempty"` 155 SuspendNum *int `json:"suspend_num,omitempty"` 156 SusBlockTime *int `json:"sus_block_time,omitempty"` 157 } 158 159 type TimeoutConfig struct { 160 ConnectTimeout *int `json:"connect_timeout,omitempty"` 161 SendTimeout *int `json:"send_timeout,omitempty"` 162 ReadTimeout *int `json:"read_timeout,omitempty"` 163 } 164 165 type Flag struct { 166 Pci3ds string `json:"pci_3ds,omitempty"` 167 PciDss string `json:"pci_dss,omitempty"` 168 } 169 170 // Update update premium domains according to UpdatePremiumHostOpts. 171 func Update(c *golangsdk.ServiceClient, hostId string, opts UpdatePremiumHostOpts) (*PremiumHost, error) { 172 b, err := golangsdk.BuildRequestBody(opts, "") 173 if err != nil { 174 return nil, err 175 } 176 query, err := golangsdk.BuildQueryString(opts) 177 if err != nil { 178 return nil, err 179 } 180 181 var rst golangsdk.Result 182 _, err = c.Put(resourceURL(c, hostId)+query.String(), b, &rst.Body, &golangsdk.RequestOpts{ 183 OkCodes: []int{200}, 184 MoreHeaders: RequestOpts.MoreHeaders, 185 }) 186 if err == nil { 187 var r PremiumHost 188 rst.ExtractInto(&r) 189 return &r, nil 190 } 191 return nil, err 192 } 193 194 // updateProtectStatusOpts the struct for updating the protect status of premium domain. 195 // Only used in the package. 196 type updateProtectStatusOpts struct { 197 ProtectStatus *int `json:"protect_status" required:"true"` 198 } 199 200 // UpdateProtectStatus update the protect status of premium domain. 201 func UpdateProtectStatus(c *golangsdk.ServiceClient, hostId string, protectStatus int) (*PremiumHostProtectStatus, error) { 202 return UpdateProtectStatusWithWpsID(c, protectStatus, hostId, "") 203 } 204 205 func UpdateProtectStatusWithWpsID(c *golangsdk.ServiceClient, protectStatus int, 206 hostId, epsID string) (*PremiumHostProtectStatus, error) { 207 opts := updateProtectStatusOpts{ 208 ProtectStatus: &protectStatus, 209 } 210 211 b, err := golangsdk.BuildRequestBody(opts, "") 212 if err != nil { 213 return nil, err 214 } 215 216 var rst golangsdk.Result 217 _, err = c.Put(protectStatusURL(c, hostId)+utils.GenerateEpsIDQuery(epsID), b, &rst.Body, &golangsdk.RequestOpts{ 218 OkCodes: []int{200}, 219 MoreHeaders: RequestOpts.MoreHeaders, 220 }) 221 if err == nil { 222 var r PremiumHostProtectStatus 223 rst.ExtractInto(&r) 224 return &r, nil 225 } 226 return nil, err 227 } 228 229 // deleteOpts whether to keep the premium domain policy when deleting the premium domain. 230 // Only used in the package. 231 type deleteOpts struct { 232 KeepPolicy bool `q:"keepPolicy"` 233 EnterpriseProjectID string `q:"enterprise_project_id"` 234 } 235 236 // Delete a premium domain by id. 237 func Delete(c *golangsdk.ServiceClient, hostId string, keepPolicy bool) (*SimplePremiumHost, error) { 238 return DeleteWithEpsID(c, keepPolicy, hostId, "") 239 } 240 241 func DeleteWithEpsID(c *golangsdk.ServiceClient, keepPolicy bool, hostId, epsID string) (*SimplePremiumHost, error) { 242 opts := deleteOpts{ 243 KeepPolicy: keepPolicy, 244 EnterpriseProjectID: epsID, 245 } 246 247 url := resourceURL(c, hostId) 248 query, err := golangsdk.BuildQueryString(opts) 249 if err != nil { 250 return nil, err 251 } 252 url += query.String() 253 254 var rst golangsdk.Result 255 _, err = c.DeleteWithResponse(url, &rst.Body, &golangsdk.RequestOpts{ 256 OkCodes: []int{200}, 257 MoreHeaders: RequestOpts.MoreHeaders, 258 }) 259 if err == nil { 260 var r SimplePremiumHost 261 rst.ExtractInto(&r) 262 return &r, nil 263 } 264 return nil, err 265 }