diff --git a/.changes/6632426a-83de-4ceb-8aef-0d27b01b070b.json b/.changes/6632426a-83de-4ceb-8aef-0d27b01b070b.json new file mode 100644 index 00000000000..10eb4f69749 --- /dev/null +++ b/.changes/6632426a-83de-4ceb-8aef-0d27b01b070b.json @@ -0,0 +1,9 @@ +{ + "id": "6632426a-83de-4ceb-8aef-0d27b01b070b", + "type": "feature", + "description": "Add support for presigning DeleteObject requests", + "issues": [ + "https://github.com/awslabs/aws-sdk-kotlin/issues/1609" + ], + "module": "s3" +} \ No newline at end of file diff --git a/codegen/aws-sdk-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/customization/PresignableOperations.kt b/codegen/aws-sdk-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/customization/PresignableOperations.kt index 4f78ba9b211..f9092727d39 100644 --- a/codegen/aws-sdk-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/customization/PresignableOperations.kt +++ b/codegen/aws-sdk-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/customization/PresignableOperations.kt @@ -18,6 +18,7 @@ internal val DEFAULT_PRESIGNABLE_OPERATIONS: Map> = mapOf( "com.amazonaws.s3#GetObject", "com.amazonaws.s3#PutObject", "com.amazonaws.s3#UploadPart", + "com.amazonaws.s3#DeleteObject", ), "com.amazonaws.sts#AWSSecurityTokenServiceV20110615" to setOf( "com.amazonaws.sts#GetCallerIdentity", diff --git a/services/s3/e2eTest/src/S3PresignerTest.kt b/services/s3/e2eTest/src/S3PresignerTest.kt index 38e8a39ee65..78557a06509 100644 --- a/services/s3/e2eTest/src/S3PresignerTest.kt +++ b/services/s3/e2eTest/src/S3PresignerTest.kt @@ -5,8 +5,10 @@ package aws.sdk.kotlin.e2etest import aws.sdk.kotlin.services.s3.S3Client +import aws.sdk.kotlin.services.s3.model.DeleteObjectRequest import aws.sdk.kotlin.services.s3.model.GetObjectRequest import aws.sdk.kotlin.services.s3.model.PutObjectRequest +import aws.sdk.kotlin.services.s3.presigners.presignDeleteObject import aws.sdk.kotlin.services.s3.presigners.presignGetObject import aws.sdk.kotlin.services.s3.presigners.presignPutObject import aws.sdk.kotlin.testing.PRINTABLE_CHARS @@ -50,6 +52,7 @@ class S3PresignerTest { withAllEngines { engine -> val httpClient = SdkHttpClient(engine) + // PUT val unsignedPutRequest = PutObjectRequest { bucket = testBucket key = keyName @@ -58,6 +61,7 @@ class S3PresignerTest { S3TestUtils.responseCodeFromPut(presignedPutRequest, contents) + // GET val unsignedGetRequest = GetObjectRequest { bucket = testBucket key = keyName @@ -69,6 +73,17 @@ class S3PresignerTest { call.complete() assertEquals(200, call.response.status.value) assertEquals(contents, body) + + // DELETE + val unsignedDeleteRequest = DeleteObjectRequest { + bucket = testBucket + key = keyName + } + val presignedDeleteObject = client.presignDeleteObject(unsignedDeleteRequest, 60.seconds) + + val deleteCall = httpClient.call(presignedDeleteObject) + deleteCall.complete() + assertEquals(204, deleteCall.response.status.value) } }