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  }