/
requests.go
132 lines (108 loc) · 3.53 KB
/
requests.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package orders
import (
"time"
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/pagination"
)
// OrderType represents the valid types of orders.
type OrderType string
const (
KeyOrder OrderType = "key"
AsymmetricOrder OrderType = "asymmetric"
)
// ListOptsBuilder allows extensions to add additional parameters to
// the List request
type ListOptsBuilder interface {
ToOrderListQuery() (string, error)
}
// ListOpts provides options to filter the List results.
type ListOpts struct {
// Limit is the amount of containers to retrieve.
Limit int `q:"limit"`
// Offset is the index within the list to retrieve.
Offset int `q:"offset"`
}
// ToOrderListQuery formats a ListOpts into a query string.
func (opts ListOpts) ToOrderListQuery() (string, error) {
q, err := gophercloud.BuildQueryString(opts)
return q.String(), err
}
// List retrieves a list of orders.
func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
url := listURL(client)
if opts != nil {
query, err := opts.ToOrderListQuery()
if err != nil {
return pagination.Pager{Err: err}
}
url += query
}
return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
return OrderPage{pagination.LinkedPageBase{PageResult: r}}
})
}
// Get retrieves details of a orders.
func Get(client *gophercloud.ServiceClient, id string) (r GetResult) {
resp, err := client.Get(getURL(client, id), &r.Body, nil)
_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
return
}
// CreateOptsBuilder allows extensions to add additional parameters to
// the Create request.
type CreateOptsBuilder interface {
ToOrderCreateMap() (map[string]interface{}, error)
}
// MetaOpts represents options used for creating an order.
type MetaOpts struct {
// Algorithm is the algorithm of the secret.
Algorithm string `json:"algorithm"`
// BitLength is the bit length of the secret.
BitLength int `json:"bit_length"`
// Expiration is the expiration date of the order.
Expiration *time.Time `json:"-"`
// Mode is the mode of the secret.
Mode string `json:"mode"`
// Name is the name of the secret.
Name string `json:"name,omitempty"`
// PayloadContentType is the content type of the secret payload.
PayloadContentType string `json:"payload_content_type,omitempty"`
}
// CreateOpts provides options used to create a orders.
type CreateOpts struct {
// Type is the type of order to create.
Type OrderType `json:"type"`
// Meta contains secrets data to create a secret.
Meta MetaOpts `json:"meta"`
}
// ToOrderCreateMap formats a CreateOpts into a create request.
func (opts CreateOpts) ToOrderCreateMap() (map[string]interface{}, error) {
b, err := gophercloud.BuildRequestBody(opts, "")
if err != nil {
return nil, err
}
if opts.Meta.Expiration != nil {
meta := b["meta"].(map[string]interface{})
meta["expiration"] = opts.Meta.Expiration.Format(gophercloud.RFC3339NoZ)
b["meta"] = meta
}
return b, nil
}
// Create creates a new orders.
func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
b, err := opts.ToOrderCreateMap()
if err != nil {
r.Err = err
return
}
resp, err := client.Post(createURL(client), &b, &r.Body, &gophercloud.RequestOpts{
OkCodes: []int{202},
})
_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
return
}
// Delete deletes a orders.
func Delete(client *gophercloud.ServiceClient, id string) (r DeleteResult) {
resp, err := client.Delete(deleteURL(client, id), nil)
_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
return
}