# S3 API support

Reference:

* [AWS S3 API Reference](https://docs.aws.amazon.com/AmazonS3/latest/API/s3-api.pdf)

|     | Legend                                    |
|-----|-------------------------------------------|
| 🟢  | Supported                                 |
| 🟡  | Partially supported                       |
| 🔵  | Not supported yet, but will be in future  |
| 🔴  | Not applicable or will never be supported |

## Object

|     | Method                 | Comments                                |
|-----|------------------------|-----------------------------------------|
| 🟢  | CopyObject             | Done on gateway side                    |
| 🟢  | DeleteObject           |                                         |
| 🟢  | DeleteObjects          | aka DeleteMultipleObjects               |
| 🟢  | GetObject              |                                         |
| 🔴  | GetObjectTorrent       | We don't plan implementing BT gateway   |
| 🟢  | HeadObject             |                                         |
| 🟢  | ListParts              | Parts loaded with MultipartUpload       |
| 🟢  | ListObjects            |                                         |
| 🟢  | ListObjectsV2          |                                         |
| 🟢  | PutObject              | Content-MD5 header deprecated           |
| 🔵  | SelectObjectContent    | Need to have some Lambda to execute SQL |
| 🔵  | WriteGetObjectResponse | Waiting for Lambda to be developed      |
| 🟢  | GetObjectAttributes    |                                         |

## ACL

For now there are some limitations:

|     | Method       | Comments                          |
|-----|--------------|-----------------------------------|
| 🟢  | GetObjectAcl | Objects can have only private acl |
| 🔴  | PutObjectAcl | Use PutBucketPolicy instead       |

## Locking

For now there are some limitations:

* Retention period can't be shortened, only extended.
* You can't delete locks or object with unexpired lock.

|     | Method                     | Comments                      |
|-----|----------------------------|-------------------------------|
| 🟡  | GetObjectLegalHold         |                               |
| 🟢  | GetObjectLockConfiguration | aka GetBucketObjectLockConfig |
| 🟡  | GetObjectRetention         |                               |
| 🟡  | PutObjectLegalHold         |                               |
| 🟢  | PutObjectLockConfiguration | aka PutBucketObjectLockConfig |
| 🟡  | PutObjectRetention         |                               |

## Multipart

CompleteMultipartUpload operations may take long time to complete. Gateway
sends whitespace characters to keep connection with the client alive. In this
case, gateway is unable to set proper HTTP headers like `X-Amz-Version-Id`.

|     | Method                  | Comments |
|-----|-------------------------|----------|
| 🟢  | AbortMultipartUpload    |          |
| 🟢  | CompleteMultipartUpload |          |
| 🟢  | CreateMultipartUpload   |          |
| 🟢  | ListMultipartUploads    |          |
| 🟢  | ListParts               |          |
| 🟢  | UploadPart              |          |
| 🟢  | UploadPartCopy          |          |

## Tagging

|     | Method              | Comments |
|-----|---------------------|----------|
| 🟢  | DeleteObjectTagging |          |
| 🟢  | GetObjectTagging    |          |
| 🟢  | PutObjectTagging    |          |

## Versioning

See also `GetObject` and other method parameters.

|     | Method             | Comments                 |
|-----|--------------------|--------------------------|
| 🟢  | ListObjectVersions | ListBucketObjectVersions |
| 🔵  | RestoreObject      |                          |

## Bucket

|     | Method               | Comments  |
|-----|----------------------|-----------|
| 🟢  | CreateBucket         | PutBucket |
| 🟢  | DeleteBucket         |           |
| 🟢  | GetBucketLocation    |           |
| 🟢  | HeadBucket           |           |
| 🟢  | ListBuckets          |           |
| 🔵  | PutPublicAccessBlock |           |

## Acceleration

|     | Method                           | Comments            |
|-----|----------------------------------|---------------------|
| 🔴  | GetBucketAccelerateConfiguration | GetBucketAccelerate |
| 🔴  | PutBucketAccelerateConfiguration |                     |

## ACL

|     | Method       | Comments                     |
|-----|--------------|------------------------------|
| 🟡  | GetBucketAcl | Only canned acl is supported |
| 🟡  | PutBucketAcl | Only canned acl is supported |

## Analytics

|     | Method                             | Comments |
|-----|------------------------------------|----------|
| 🔵  | DeleteBucketAnalyticsConfiguration |          |
| 🔵  | GetBucketAnalyticsConfiguration    |          |
| 🔵  | ListBucketAnalyticsConfigurations  |          |
| 🔵  | PutBucketAnalyticsConfiguration    |          |

## CORS

|     | Method           | Comments |
|-----|------------------|----------|
| 🟢  | DeleteBucketCors |          |
| 🟢  | GetBucketCors    |          |
| 🟢  | PutBucketCors    |          |

## Encryption

|     | Method                 | Comments |
|-----|------------------------|----------|
| 🔵  | DeleteBucketEncryption |          |
| 🔵  | GetBucketEncryption    |          |
| 🔵  | PutBucketEncryption    |          |

## Inventory

|     | Method                             | Comments |
|-----|------------------------------------|----------|
| 🔵  | DeleteBucketInventoryConfiguration |          |
| 🔵  | GetBucketInventoryConfiguration    |          |
| 🔵  | ListBucketInventoryConfigurations  |          |
| 🔵  | PutBucketInventoryConfiguration    |          |

## Lifecycle

|     | Method                          | Comments |
|-----|---------------------------------|----------|
| 🔵  | DeleteBucketLifecycle           |          |
| 🔵  | GetBucketLifecycle              |          |
| 🔵  | GetBucketLifecycleConfiguration |          |
| 🔵  | PutBucketLifecycle              |          |
| 🔵  | PutBucketLifecycleConfiguration |          |

## Logging

|     | Method           | Comments |
|-----|------------------|----------|
| 🔵  | GetBucketLogging |          |
| 🔵  | PutBucketLogging |          |

## Metrics

|     | Method                           | Comments |
|-----|----------------------------------|----------|
| 🔵  | DeleteBucketMetricsConfiguration |          |
| 🔵  | GetBucketMetricsConfiguration    |          |
| 🔵  | ListBucketMetricsConfigurations  |          |
| 🔵  | PutBucketMetricsConfiguration    |          |

## Notifications

|     | Method                             | Comments      |
|-----|------------------------------------|---------------|
| 🔵  | GetBucketNotification              |               |
| 🔵  | GetBucketNotificationConfiguration |               |
| 🔵  | ListenBucketNotification           | non-standard? |
| 🔵  | PutBucketNotification              |               |
| 🔵  | PutBucketNotificationConfiguration |               |

## Ownership controls

|     | Method                        | Comments |
|-----|-------------------------------|----------|
| 🔵  | DeleteBucketOwnershipControls |          |
| 🔵  | GetBucketOwnershipControls    |          |
| 🔵  | PutBucketOwnershipControls    |          |

## Policy and replication

|     | Method                  | Comments                     |
|-----|-------------------------|------------------------------|
| 🟢  | DeleteBucketPolicy      |                              |
| 🔵  | DeleteBucketReplication |                              |
| 🔵  | DeletePublicAccessBlock |                              |
| 🟢  | GetBucketPolicy         |                              |
| 🔵  | GetBucketPolicyStatus   |                              |
| 🔵  | GetBucketReplication    |                              |
| 🟢  | PostPolicyBucket        | Upload file using POST form  |
| 🟡  | PutBucketPolicy         | Conditions are not supported |
| 🔵  | PutBucketReplication    |                              |

## Request payment

|     | Method                  | Comments |
|-----|-------------------------|----------|
| 🔴  | GetBucketRequestPayment |          |
| 🔴  | PutBucketRequestPayment |          |

## Tagging

|     | Method              | Comments |
|-----|---------------------|----------|
| 🟢  | DeleteBucketTagging |          |
| 🟢  | GetBucketTagging    |          |
| 🟢  | PutBucketTagging    |          |

## Tiering

|     | Method                                      | Comments |
|-----|---------------------------------------------|----------|
| 🔵  | DeleteBucketIntelligentTieringConfiguration |          |
| 🔵  | GetBucketIntelligentTieringConfiguration    |          |
| 🔵  | ListBucketIntelligentTieringConfigurations  |          |
| 🔵  | PutBucketIntelligentTieringConfiguration    |          |

## Versioning

|     | Method              | Comments |
|-----|---------------------|----------|
| 🟢  | GetBucketVersioning |          |
| 🟢  | PutBucketVersioning |          |

## Website

|     | Method              | Comments |
|-----|---------------------|----------|
| 🔵  | DeleteBucketWebsite |          |
| 🔵  | GetBucketWebsite    |          |
| 🔵  | PutBucketWebsite    |          |