@@ -11,6 +11,7 @@ import (
11
11
storage "github.com/aws/aws-sdk-go-v2/service/s3"
12
12
"github.com/aws/aws-sdk-go-v2/service/s3/types"
13
13
"github.com/aws/aws-sdk-go/aws"
14
+ "github.com/aws/smithy-go"
14
15
"github.com/padok-team/burrito/internal/burrito/config"
15
16
storageerrors "github.com/padok-team/burrito/internal/datastore/storage/error"
16
17
)
@@ -72,26 +73,36 @@ func (a *S3) Check(key string) ([]byte, error) {
72
73
73
74
result , err := a .Client .HeadObject (context .TODO (), input )
74
75
if err != nil {
75
- var noKey * types.NoSuchKey
76
- if errors .As (err , & noKey ) {
77
- return make ([]byte , 0 ), & storageerrors.StorageError {
78
- Err : err ,
79
- Nil : true ,
76
+ var apiError smithy.APIError
77
+ if errors .As (err , & apiError ) {
78
+ switch apiError .(type ) {
79
+ case * types.NotFound :
80
+ return make ([]byte , 0 ), & storageerrors.StorageError {
81
+ Err : err ,
82
+ Nil : true ,
83
+ }
84
+ default :
85
+ break
80
86
}
81
87
}
82
88
return make ([]byte , 0 ), err
83
89
}
84
90
91
+ // S3 returns a checksum only if the object was uploaded with one
92
+ if result .ChecksumSHA256 == nil {
93
+ return make ([]byte , 0 ), nil
94
+ }
95
+
85
96
return []byte (* result .ChecksumSHA256 ), nil
86
97
}
87
98
88
99
func (a * S3 ) Set (key string , data []byte , ttl int ) error {
89
100
input := & storage.PutObjectInput {
90
- Bucket : & a .Config .Bucket ,
91
- Key : & key ,
92
- Body : bytes .NewReader (data ),
101
+ Bucket : & a .Config .Bucket ,
102
+ Key : & key ,
103
+ Body : bytes .NewReader (data ),
104
+ ChecksumAlgorithm : types .ChecksumAlgorithmSha256 ,
93
105
}
94
-
95
106
_ , err := a .Client .PutObject (context .TODO (), input )
96
107
if err != nil {
97
108
return err
0 commit comments