github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/waf_hw/v1/domains/requests.go (about) 1 package domains 2 3 import ( 4 "github.com/chnsz/golangsdk" 5 "github.com/chnsz/golangsdk/openstack/utils" 6 ) 7 8 var RequestOpts golangsdk.RequestOpts = golangsdk.RequestOpts{ 9 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 10 } 11 12 // CreateOptsBuilder allows extensions to add additional parameters to the 13 // Create request. 14 type CreateOptsBuilder interface { 15 ToDomainCreateMap() (map[string]interface{}, error) 16 } 17 18 // CreateOpts contains all the values needed to create a new backup. 19 type CreateOpts struct { 20 HostName string `json:"hostname" required:"true"` 21 Servers []ServerOpts `json:"server" required:"true"` 22 PolicyId string `json:"policyid,omitempty"` 23 CertificateId string `json:"certificateid,omitempty"` 24 CertificateName string `json:"certificatename,omitempty"` 25 Proxy *bool `json:"proxy,omitempty"` 26 PaidType string `json:"paid_type,omitempty"` 27 EnterpriseProjectId string `q:"enterprise_project_id" json:"-"` 28 ForwardHeaderMap map[string]string `json:"forward_header_map,omitempty"` 29 Description string `json:"description,omitempty"` 30 LbAlgorithm string `json:"lb_algorithm,omitempty"` 31 WebTag string `json:"web_tag,omitempty"` 32 } 33 34 // ServerOpts contains the origin server information. 35 type ServerOpts struct { 36 FrontProtocol string `json:"front_protocol" required:"true"` 37 BackProtocol string `json:"back_protocol" required:"true"` 38 Address string `json:"address" required:"true"` 39 Port int `json:"port" required:"true"` 40 Type string `json:"type,omitempty"` 41 VpcId string `json:"vpc_id,omitempty"` 42 Weight int `json:"weight,omitempty"` 43 } 44 45 // ToDomainCreateMap builds a create request body from CreateOpts. 46 func (opts CreateOpts) ToDomainCreateMap() (map[string]interface{}, error) { 47 return golangsdk.BuildRequestBody(opts, "") 48 } 49 50 // Create will create a new Domain based on the values in CreateOpts. 51 func Create(c *golangsdk.ServiceClient, opts CreateOptsBuilder) (r CreateResult) { 52 b, err := opts.ToDomainCreateMap() 53 if err != nil { 54 r.Err = err 55 return 56 } 57 query, err := golangsdk.BuildQueryString(opts) 58 if err != nil { 59 r.Err = err 60 return 61 } 62 63 reqOpt := &golangsdk.RequestOpts{OkCodes: []int{200}} 64 _, r.Err = c.Post(rootURL(c)+query.String(), b, &r.Body, reqOpt) 65 return 66 } 67 68 // UpdateOptsBuilder allows extensions to add additional parameters to the 69 // Update request. 70 type UpdateOptsBuilder interface { 71 ToDomainUpdateMap() (map[string]interface{}, error) 72 } 73 74 // UpdateOpts contains all the values needed to update a Domain. 75 type UpdateOpts struct { 76 Proxy *bool `json:"proxy,omitempty"` 77 CertificateId string `json:"certificateid,omitempty"` 78 CertificateName string `json:"certificatename,omitempty"` 79 Servers []ServerOpts `json:"server,omitempty"` 80 Tls string `json:"tls,omitempty"` 81 Cipher string `json:"cipher,omitempty"` 82 Http2Enable *bool `json:"http2_enable,omitempty"` 83 Ipv6Enable *bool `json:"ipv6_enable,omitempty"` 84 WebTag *string `json:"web_tag,omitempty"` 85 ExclusiveIp *bool `json:"exclusive_ip,omitempty"` 86 PaidType string `json:"paid_type,omitempty"` 87 BlockPage *BlockPage `json:"block_page,omitempty"` 88 TrafficMark *TrafficMark `json:"traffic_mark,omitempty"` 89 Flag *Flag `json:"flag,omitempty"` 90 Extend map[string]string `json:"extend,omitempty"` 91 TimeoutConfig *TimeoutConfig `json:"timeout_config,omitempty"` 92 ForwardHeaderMap map[string]string `json:"forward_header_map,omitempty"` 93 EnterpriseProjectId string `q:"enterprise_project_id" json:"-"` 94 Description *string `json:"description,omitempty"` 95 LbAlgorithm *string `json:"lb_algorithm,omitempty"` 96 } 97 98 // BlockPage contains the alarm page information 99 type BlockPage struct { 100 Template string `json:"template" required:"true"` 101 CustomPage *CustomPage `json:"custom_page,omitempty"` 102 RedirectUrl string `json:"redirect_url,omitempty"` 103 } 104 105 // CustomPage contains the customized alarm page information 106 type CustomPage struct { 107 StatusCode string `json:"status_code" required:"true"` 108 ContentType string `json:"content_type" required:"true"` 109 Content string `json:"content" required:"true"` 110 } 111 112 // TrafficMark contains the traffic identification 113 type TrafficMark struct { 114 Sip []string `json:"sip,omitempty"` 115 Cookie string `json:"cookie,omitempty"` 116 Params string `json:"params,omitempty"` 117 } 118 119 type TimeoutConfig struct { 120 ConnectTimeout *int `json:"connect_timeout,omitempty"` 121 SendTimeout *int `json:"send_timeout,omitempty"` 122 ReadTimeout *int `json:"read_timeout,omitempty"` 123 } 124 125 type Flag struct { 126 Pci3ds string `json:"pci_3ds,omitempty"` 127 PciDss string `json:"pci_dss,omitempty"` 128 Cname string `json:"cname,omitempty"` 129 IsDualAz string `json:"is_dual_az,omitempty"` 130 Ipv6 string `json:"ipv6,omitempty"` 131 } 132 133 // ToDomainUpdateMap builds a update request body from UpdateOpts. 134 func (opts UpdateOpts) ToDomainUpdateMap() (map[string]interface{}, error) { 135 return golangsdk.BuildRequestBody(opts, "") 136 } 137 138 // Update accepts a UpdateOpts struct and uses the values to update a Domain.The response code from api is 200 139 func Update(c *golangsdk.ServiceClient, domainID string, opts UpdateOptsBuilder) (r UpdateResult) { 140 b, err := opts.ToDomainUpdateMap() 141 if err != nil { 142 r.Err = err 143 return 144 } 145 query, err := golangsdk.BuildQueryString(opts) 146 if err != nil { 147 r.Err = err 148 return 149 } 150 151 reqOpt := &golangsdk.RequestOpts{OkCodes: []int{200}} 152 _, r.Err = c.Patch(resourceURL(c, domainID)+query.String(), b, nil, reqOpt) 153 return 154 } 155 156 // updateProtectStatusOpts the struct for updating the protect status of domain. 157 type updateProtectStatusOpts struct { 158 ProtectStatus *int `json:"protect_status" required:"true"` 159 } 160 161 // UpdateProtectStatus update the protect status of domain. 162 func UpdateProtectStatus(c *golangsdk.ServiceClient, protectStatus int, instanceId, epsId string) (*HostProtectStatus, error) { 163 opts := updateProtectStatusOpts{ 164 ProtectStatus: &protectStatus, 165 } 166 167 b, err := golangsdk.BuildRequestBody(opts, "") 168 if err != nil { 169 return nil, err 170 } 171 172 var rst golangsdk.Result 173 _, err = c.Put(protectStatusURL(c, instanceId)+utils.GenerateEpsIDQuery(epsId), b, &rst.Body, &golangsdk.RequestOpts{ 174 MoreHeaders: RequestOpts.MoreHeaders, 175 }) 176 if err == nil { 177 var r HostProtectStatus 178 err := rst.ExtractInto(&r) 179 return &r, err 180 } 181 return nil, err 182 } 183 184 // Get retrieves a particular Domain based on its unique ID. 185 func Get(c *golangsdk.ServiceClient, id string) (r GetResult) { 186 return GetWithEpsID(c, id, "") 187 } 188 189 func GetWithEpsID(c *golangsdk.ServiceClient, id, epsID string) (r GetResult) { 190 reqOpt := &golangsdk.RequestOpts{ 191 OkCodes: []int{200}, 192 MoreHeaders: RequestOpts.MoreHeaders, 193 } 194 _, r.Err = c.Get(resourceURL(c, id)+utils.GenerateEpsIDQuery(epsID), &r.Body, reqOpt) 195 return 196 } 197 198 // DeleteOptsBuilder allows extensions to add additional parameters to the 199 // delete request. 200 type DeleteOptsBuilder interface { 201 ToDeleteQuery() (string, error) 202 } 203 204 // DeleteOpts contains all the values needed to delete a domain. 205 type DeleteOpts struct { 206 // KeepPolicy specifies whether to retain the policy when deleting a domain name 207 // the default value is false 208 KeepPolicy bool `q:"keepPolicy"` 209 EnterpriseProjectId string `q:"enterprise_project_id"` 210 } 211 212 // ToDeleteQuery builds a delete request body from DeleteOpts. 213 func (opts DeleteOpts) ToDeleteQuery() (string, error) { 214 q, err := golangsdk.BuildQueryString(opts) 215 return q.String(), err 216 } 217 218 // Delete will permanently delete a particular Domain based on its unique ID. 219 func Delete(c *golangsdk.ServiceClient, id string, opts DeleteOptsBuilder) (r DeleteResult) { 220 url := resourceURL(c, id) 221 if opts != nil { 222 var query string 223 query, r.Err = opts.ToDeleteQuery() 224 if r.Err != nil { 225 return 226 } 227 url += query 228 } 229 230 reqOpt := &golangsdk.RequestOpts{ 231 OkCodes: []int{200}, 232 MoreHeaders: RequestOpts.MoreHeaders, 233 } 234 _, r.Err = c.Delete(url, reqOpt) 235 return 236 }