-
Notifications
You must be signed in to change notification settings - Fork 329
/
api-datatypes.go
413 lines (348 loc) · 11 KB
/
api-datatypes.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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
/*
* Minio Cloud Storage, (C) 2015, 2016 Minio, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package datatype
import (
"encoding/xml"
"time"
)
const (
MaxObjectList = 1000 // Limit number of objects in a listObjectsResponse.
MaxUploadsList = 1000 // Limit number of uploads in a listUploadsResponse.
MaxPartsList = 1000 // Limit number of parts in a listPartsResponse.
)
// LocationResponse - format for location response.
type LocationResponse struct {
XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ LocationConstraint" json:"-"`
Location string `xml:",chardata"`
}
type ListObjectsResponse struct {
XMLName xml.Name `xml:"ListBucketResult"`
CommonPrefixes []CommonPrefix
Delimiter string `xml:"Delimiter,omitempty"`
EncodingType string `xml:"EncodingType,omitempty"`
IsTruncated bool
MaxKeys int
KeyCount int `xml:",omitempty"`
Prefix string
BucketName string `xml:"Name"`
// v1 specific
Marker string
NextMarker string `xml:",omitempty"`
// v2 specific
ContinuationToken string `xml:",omitempty"`
NextContinuationToken string `xml:",omitempty"`
StartAfter string `xml:",omitempty"`
Contents []Object
}
type VersionedListObjectsResponse struct {
XMLName xml.Name `xml:"ListVersionsResult"`
Contents []VersionedObject
CommonPrefixes []CommonPrefix
Delimiter string
EncodingType string `xml:"Encoding-Type,omitempty"`
IsTruncated bool
MaxKeys int
KeyCount int
Prefix string
BucketName string `xml:"Name"`
KeyMarker string
NextKeyMarker string
VersionIdMarker string
NextVersionIdMarker string
}
type ListObjectsRequest struct {
Versioned bool // should return versioned objects?
Version int // Currently 1 or 2
Delimiter string
EncodingType string
MaxKeys int
Prefix string
// v1 specific
Marker string
// v2 specific
ContinuationToken string
StartAfter string
FetchOwner bool
// versioned specific
KeyMarker string
VersionIdMarker string
}
type ListUploadsRequest struct {
Delimiter string
EncodingType string
MaxUploads int
KeyMarker string
Prefix string
UploadIdMarker string
}
type ListPartsRequest struct {
EncodingType string
UploadId string
MaxParts int
PartNumberMarker int
}
// Part container for part metadata.
type Part struct {
PartNumber int
ETag string
LastModified string
Size int64
}
// ListPartsResponse - format for list parts response.
type ListPartsResponse struct {
XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListPartsResult" json:"-"`
Bucket string
Key string
UploadId string
EncodingType string `xml:"Encoding-Type,omitempty"`
Initiator Initiator
Owner Owner
// The class of storage used to store the object.
StorageClass string
PartNumberMarker int
NextPartNumberMarker int
MaxParts int
IsTruncated bool
// List of parts.
Parts []Part `xml:"Part"`
}
// ListMultipartUploadsResponse - format for list multipart uploads response.
type ListMultipartUploadsResponse struct {
XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListMultipartUploadsResult" json:"-"`
Bucket string
KeyMarker string
UploadIdMarker string
NextKeyMarker string
NextUploadIdMarker string
EncodingType string `xml:"Encoding-Type,omitempty"`
MaxUploads int
IsTruncated bool
Uploads []Upload `xml:"Upload"`
Prefix string
Delimiter string
CommonPrefixes []CommonPrefix
}
// ListBucketsResponse - format for list buckets response
type ListBucketsResponse struct {
XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListAllMyBucketsResult" json:"-"`
Owner Owner
// Container for one or more buckets.
Buckets struct {
Buckets []Bucket `xml:"Bucket"`
} // Buckets are nested
}
// Upload container for in progress multipart upload
type Upload struct {
Key string
UploadId string
Initiator Initiator
Owner Owner
StorageClass string
Initiated string // time string of format "2006-01-02T15:04:05.000Z"
}
// CommonPrefix container for prefix response in ListObjectsResponse
type CommonPrefix struct {
XMLName xml.Name `xml:"CommonPrefixes"`
Prefix string
}
// Bucket container for bucket metadata
type Bucket struct {
Name string
CreationDate string // time string of format "2006-01-02T15:04:05.000Z"
LocationConstraint string
VersionOpts VersioningConfiguration
SSEOpts SSEConfiguration
}
// added for soda
type VersioningConfiguration struct {
XMLName xml.Name `xml:"VersioningConfiguration"`
Status string `xml:"Status"`
}
// added for soda
type SSEConfiguration struct {
XMLName xml.Name `xml:"SSEConfiguration"`
Text string `xml:",chardata"`
SSE struct {
Text string `xml:",chardata"`
Enabled string `xml:"enabled"`
} `xml:"SSE"`
SSEKMS struct {
Text string `xml:",chardata"`
Enabled string `xml:"enabled"`
DefaultKMSMasterKey string `xml:"DefaultKMSMasterKey"`
} `xml:"SSE-KMS"`
}
// Object container for object metadata
type Object struct {
XMLName xml.Name `xml:"Contents"`
Key string
LastModified string // time string of format "2006-01-02T15:04:05.000Z"
ETag string
Size int64
Owner *Owner `xml:"Owner,omitempty"`
// The class of storage used to store the object.
StorageClass string
Location string
Tier int32
}
type VersionedObject struct {
XMLName xml.Name
Key string
VersionId string
// TODO: IsLatest
// IsLatest bool
LastModified string // time string of format "2006-01-02T15:04:05.000Z"
ETag string
Size int64
StorageClass string
Owner Owner
}
// CopyObjectResponse container returns ETag and LastModified of the
// successfully copied object
type CopyObjectResponse struct {
XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CopyObjectResult" json:"-"`
ETag string
LastModified string // time string of format "2006-01-02T15:04:05.000Z"
}
type CopyObjectPartResponse struct {
XMLName xml.Name `xml:"CopyPartResult"`
LastModified string
ETag string
}
// Initiator inherit from Owner struct, fields are same
type Initiator Owner
// Owner - bucket owner/principal
type Owner struct {
ID string
DisplayName string
}
// InitiateMultipartUploadResponse container for InitiateMultiPartUpload response, provides uploadID to start MultiPart upload
type InitiateMultipartUploadResponse struct {
XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ InitiateMultipartUploadResult" json:"-"`
Bucket string
Key string
UploadID string `xml:"UploadId"`
}
// CompleteMultipartUploadResponse container for completed multipart upload response
type CompleteMultipartUploadResponse struct {
XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CompleteMultipartUploadResult" json:"-"`
Location string
Bucket string
Key string
ETag string
}
// PostResponse container for completed post upload response
type PostResponse struct {
XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ PostResponse" json:"-"`
Location string
Bucket string
Key string
ETag string
}
// DeleteError structure.
type DeleteError struct {
Code string
Message string
Key string
VersionId string `xml:",omitempty"`
}
// ObjectIdentifier carries key name for the object to delete.
type ObjectIdentifier struct {
ObjectName string `xml:"Key"`
VersionId string `xml:",omitempty"`
DeleteMarker bool `xml:",omitempty"`
DeleteMarkerVersionId string `xml:",omitempty"`
}
// createBucketConfiguration container for bucket configuration request from client.
// Used for parsing the location from the request body for MakeBucket.
type CreateBucketLocationConfiguration struct {
XMLName xml.Name `xml:"CreateBucketConfiguration" json:"-"`
Location string `xml:"LocationConstraint"`
}
// DeleteObjectsRequest - xml carrying the object key names which needs to be deleted.
type DeleteObjectsRequest struct {
XMLName xml.Name `xml:"Delete"`
// Element to enable quiet mode for the request
Quiet bool
// List of objects to be deleted
Objects []ObjectIdentifier `xml:"Object"`
}
type PutObjectResult struct {
Md5 string
VersionId string
LastModified time.Time
}
type AppendObjectResult struct {
PutObjectResult
NextPosition int64
}
type DeleteObjectResult struct {
DeleteMarker bool
VersionId string
}
type PutObjectPartResult struct {
ETag string
SseType string
SseAwsKmsKeyIdBase64 string
SseCustomerAlgorithm string
SseCustomerKeyMd5Base64 string
}
type CompleteMultipartResult struct {
ETag string
VersionId string
SseType string
SseAwsKmsKeyIdBase64 string
SseCustomerAlgorithm string
SseCustomerKeyMd5Base64 string
}
type SseRequest struct {
// type of Server Side Encryption, could be "SSE-KMS", "SSE-S3", "SSE-C"(custom), or ""(none),
// KMS is not implemented yet
Type string
// AWS-managed specific(KMS and S3)
SseAwsKmsKeyId string
SseContext string
// customer-provided specific(SSE-C)
SseCustomerAlgorithm string
SseCustomerKey []byte
// keys for copy
CopySourceSseCustomerAlgorithm string
CopySourceSseCustomerKey []byte
}
type LifecycleConfiguration struct {
Rule []Rule `xml:"Rule"`
}
type Rule struct {
ID string `xml:"ID"`
Prefix string `xml:"Prefix,omitempty"`
Status string `xml:"Status"`
Transition []Transition `xml:"Transition,omitempty"`
Expiration []Expiration `xml:"Expiration,omitempty"`
AbortIncompleteMultipartUpload *AbortIncompleteMultipartUpload `xml:"AbortIncompleteMultipartUpload,omitempty"`
}
type Transition struct {
Days int32 `xml:"Days"`
StorageClass string `xml:"StorageClass"`
Backend string `xml:"Backend"`
}
type Expiration struct {
Days int32 `xml:"Days"`
//Delete marker will be used in later release
//ExpiredObjectDeleteMarker string `xml:"ExpiredObjectDeleteMArker"`
}
type AbortIncompleteMultipartUpload struct {
DaysAfterInitiation int32 `xml:"DaysAfterInitiation"`
}