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  }