1
1
package handler
2
2
3
3
import (
4
+ "fmt"
4
5
"net/http"
5
6
"net/url"
6
7
"strconv"
@@ -33,12 +34,18 @@ func (h *handler) ListObjectsV1Handler(w http.ResponseWriter, r *http.Request) {
33
34
return
34
35
}
35
36
36
- if err = api .EncodeToResponse (w , encodeV1 (params , list )); err != nil {
37
+ encoded , err := encodeV1 (params , list )
38
+ if err != nil {
39
+ h .logAndSendError (w , "encode V1" , reqInfo , err )
40
+ return
41
+ }
42
+
43
+ if err = api .EncodeToResponse (w , encoded ); err != nil {
37
44
h .logAndSendError (w , "something went wrong" , reqInfo , err )
38
45
}
39
46
}
40
47
41
- func encodeV1 (p * layer.ListObjectsParamsV1 , list * layer.ListObjectsInfoV1 ) * ListObjectsV1Response {
48
+ func encodeV1 (p * layer.ListObjectsParamsV1 , list * layer.ListObjectsInfoV1 ) ( * ListObjectsV1Response , error ) {
42
49
res := & ListObjectsV1Response {
43
50
Name : p .BktInfo .Name ,
44
51
EncodingType : p .Encode ,
@@ -52,9 +59,14 @@ func encodeV1(p *layer.ListObjectsParamsV1, list *layer.ListObjectsInfoV1) *List
52
59
53
60
res .CommonPrefixes = fillPrefixes (list .Prefixes , p .Encode )
54
61
55
- res .Contents = fillContentsWithOwner (list .Objects , p .Encode )
62
+ content , err := fillContentsWithOwner (list .Objects , p .Encode )
63
+ if err != nil {
64
+ return nil , fmt .Errorf ("fill contents with owner: %w" , err )
65
+ }
66
+
67
+ res .Contents = content
56
68
57
- return res
69
+ return res , nil
58
70
}
59
71
60
72
// ListObjectsV2Handler handles objects listing requests for API version 2.
@@ -77,12 +89,18 @@ func (h *handler) ListObjectsV2Handler(w http.ResponseWriter, r *http.Request) {
77
89
return
78
90
}
79
91
80
- if err = api .EncodeToResponse (w , encodeV2 (params , list )); err != nil {
92
+ encoded , err := encodeV2 (params , list )
93
+ if err != nil {
94
+ h .logAndSendError (w , "encode V2" , reqInfo , err )
95
+ return
96
+ }
97
+
98
+ if err = api .EncodeToResponse (w , encoded ); err != nil {
81
99
h .logAndSendError (w , "something went wrong" , reqInfo , err )
82
100
}
83
101
}
84
102
85
- func encodeV2 (p * layer.ListObjectsParamsV2 , list * layer.ListObjectsInfoV2 ) * ListObjectsV2Response {
103
+ func encodeV2 (p * layer.ListObjectsParamsV2 , list * layer.ListObjectsInfoV2 ) ( * ListObjectsV2Response , error ) {
86
104
res := & ListObjectsV2Response {
87
105
Name : p .BktInfo .Name ,
88
106
EncodingType : p .Encode ,
@@ -98,9 +116,14 @@ func encodeV2(p *layer.ListObjectsParamsV2, list *layer.ListObjectsInfoV2) *List
98
116
99
117
res .CommonPrefixes = fillPrefixes (list .Prefixes , p .Encode )
100
118
101
- res .Contents = fillContents (list .Objects , p .Encode , p .FetchOwner )
119
+ content , err := fillContents (list .Objects , p .Encode , p .FetchOwner )
120
+ if err != nil {
121
+ return nil , fmt .Errorf ("fill content: %w" , err )
122
+ }
102
123
103
- return res
124
+ res .Contents = content
125
+
126
+ return res , nil
104
127
}
105
128
106
129
func parseListObjectsArgsV1 (reqInfo * api.ReqInfo ) (* layer.ListObjectsParamsV1 , error ) {
@@ -184,11 +207,11 @@ func fillPrefixes(src []string, encode string) []CommonPrefix {
184
207
return dst
185
208
}
186
209
187
- func fillContentsWithOwner (src []* data.ObjectInfo , encode string ) []Object {
210
+ func fillContentsWithOwner (src []* data.ObjectInfo , encode string ) ( []Object , error ) {
188
211
return fillContents (src , encode , true )
189
212
}
190
213
191
- func fillContents (src []* data.ObjectInfo , encode string , fetchOwner bool ) []Object {
214
+ func fillContents (src []* data.ObjectInfo , encode string , fetchOwner bool ) ( []Object , error ) {
192
215
var dst []Object
193
216
for _ , obj := range src {
194
217
res := Object {
@@ -198,6 +221,15 @@ func fillContents(src []*data.ObjectInfo, encode string, fetchOwner bool) []Obje
198
221
ETag : obj .HashSum ,
199
222
}
200
223
224
+ if size , ok := obj .Headers [layer .AttributeDecryptedSize ]; ok {
225
+ sz , err := strconv .ParseInt (size , 10 , 64 )
226
+ if err != nil {
227
+ return nil , fmt .Errorf ("parse decrypted size %s: %w" , size , err )
228
+ }
229
+
230
+ res .Size = sz
231
+ }
232
+
201
233
if fetchOwner {
202
234
res .Owner = & Owner {
203
235
ID : obj .Owner .String (),
@@ -207,7 +239,7 @@ func fillContents(src []*data.ObjectInfo, encode string, fetchOwner bool) []Obje
207
239
208
240
dst = append (dst , res )
209
241
}
210
- return dst
242
+ return dst , nil
211
243
}
212
244
213
245
func (h * handler ) ListBucketObjectVersionsHandler (w http.ResponseWriter , r * http.Request ) {
@@ -277,7 +309,7 @@ func encodeListObjectVersionsToResponse(info *layer.ListObjectVersionsInfo, buck
277
309
Key : ver .ObjectInfo .Name ,
278
310
LastModified : ver .ObjectInfo .Created .UTC ().Format (time .RFC3339 ),
279
311
Owner : Owner {
280
- ID : ver .ObjectInfo .Owner . String (),
312
+ ID : ver .ObjectInfo .OwnerPublicKey . StringCompressed (),
281
313
DisplayName : ver .ObjectInfo .Owner .String (),
282
314
},
283
315
Size : ver .ObjectInfo .Size ,
0 commit comments