github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/waf/v1/certificates/requests.go (about) 1 package certificates 2 3 import ( 4 "fmt" 5 6 "github.com/opentelekomcloud/gophertelekomcloud" 7 "github.com/opentelekomcloud/gophertelekomcloud/openstack" 8 "github.com/opentelekomcloud/gophertelekomcloud/pagination" 9 ) 10 11 // CreateOptsBuilder allows extensions to add additional parameters to the 12 // Create request. 13 type CreateOptsBuilder interface { 14 ToCertCreateMap() (map[string]interface{}, error) 15 } 16 17 // CreateOpts contains all the values needed to create a new certificate. 18 type CreateOpts struct { 19 // Certificate name 20 Name string `json:"name" required:"true"` 21 // Certificate content 22 Content string `json:"content" required:"true"` 23 // Private Key 24 Key string `json:"key" required:"true"` 25 } 26 27 // ToCertCreateMap builds a create request body from CreateOpts. 28 func (opts CreateOpts) ToCertCreateMap() (map[string]interface{}, error) { 29 return golangsdk.BuildRequestBody(opts, "") 30 } 31 32 // Create will create a new certificate based on the values in CreateOpts. 33 func Create(c *golangsdk.ServiceClient, opts CreateOptsBuilder) (r CreateResult) { 34 b, err := opts.ToCertCreateMap() 35 if err != nil { 36 r.Err = err 37 return 38 } 39 reqOpt := &golangsdk.RequestOpts{OkCodes: []int{200}} 40 _, r.Err = c.Post(rootURL(c), b, &r.Body, reqOpt) 41 return 42 } 43 44 // UpdateOptsBuilder allows extensions to add additional parameters to the 45 // Update request. 46 type UpdateOptsBuilder interface { 47 ToCertUpdateMap() (map[string]interface{}, error) 48 } 49 50 // UpdateOpts contains all the values needed to update a certificate. 51 type UpdateOpts struct { 52 // Certificate name 53 Name string `json:"name,omitempty"` 54 } 55 56 // ToCertUpdateMap builds a update request body from UpdateOpts. 57 func (opts UpdateOpts) ToCertUpdateMap() (map[string]interface{}, error) { 58 return golangsdk.BuildRequestBody(opts, "") 59 } 60 61 // Update accepts a UpdateOpts struct and uses the values to update a certificate.The response code from api is 200 62 func Update(c *golangsdk.ServiceClient, certID string, opts UpdateOptsBuilder) (r UpdateResult) { 63 b, err := opts.ToCertUpdateMap() 64 if err != nil { 65 r.Err = err 66 return 67 } 68 reqOpt := &golangsdk.RequestOpts{OkCodes: []int{200}} 69 _, r.Err = c.Put(resourceURL(c, certID), b, &r.Body, reqOpt) 70 return 71 } 72 73 // Get retrieves a particular certificate based on its unique ID. 74 func Get(c *golangsdk.ServiceClient, id string) (r GetResult) { 75 _, r.Err = c.Get(resourceURL(c, id), &r.Body, openstack.StdRequestOpts()) 76 return 77 } 78 79 // Delete will permanently delete a particular certificate based on its unique ID. 80 func Delete(c *golangsdk.ServiceClient, id string) (r DeleteResult) { 81 reqOpt := &golangsdk.RequestOpts{OkCodes: []int{204}, 82 MoreHeaders: openstack.StdRequestOpts().MoreHeaders} 83 _, r.Err = c.Delete(resourceURL(c, id), reqOpt) 84 return 85 } 86 87 type ListOptsBuilder interface { 88 ToCertificateListQuery() (string, error) 89 } 90 91 type ListOpts struct { 92 Offset int `q:"offset"` 93 Limit int `q:"limit"` 94 } 95 96 func (opts ListOpts) ToCertificateListQuery() (string, error) { 97 if opts.Offset > 0xffff || opts.Offset < 0 { 98 return "", fmt.Errorf("offset must be 0-65535") 99 } 100 if opts.Limit > 50 || opts.Offset < -1 { 101 return "", fmt.Errorf("limit must be -1-50") 102 } 103 q, err := golangsdk.BuildQueryString(opts) 104 if err != nil { 105 return "", err 106 } 107 return q.String(), err 108 } 109 110 func List(c *golangsdk.ServiceClient, opts ListOptsBuilder) (p pagination.Pager) { 111 url := rootURL(c) 112 if opts != nil { 113 q, err := opts.ToCertificateListQuery() 114 if err != nil { 115 p.Err = err 116 return 117 } 118 url += q 119 } 120 p = pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page { 121 return CertificatePage{OffsetPageBase: pagination.OffsetPageBase{PageResult: r}} 122 }) 123 p.Headers = map[string]string{"content-type": "application/json"} 124 return p 125 }