Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fde0fbb16f | |||
| 6a28ebaafe | |||
| 84011d41b6 | |||
| 0847617837 | |||
| ebee54114f | |||
| 34390f572a | |||
| 906a729ee8 | |||
| df37079491 | |||
| 23f8e5e9eb | |||
| 7761c0013b | |||
| 8efeca8c41 | |||
| 78ed511b18 | |||
| ce2cdbe520 | |||
| a7c6ed801a | |||
| 9e4fe1c49b | |||
| 9805d2d213 | |||
| 88c37a2a77 | |||
| 397627b24b | |||
| e93c8069eb | |||
| 81e393de2a | |||
| fbbe21f911 | |||
| fbf1105c24 | |||
| 46450f8f37 | |||
| a4dedab2f5 | |||
| 1620565ae6 | |||
| 7539b5db24 | |||
| 862ec3f7bc |
@@ -11,7 +11,7 @@ repos:
|
|||||||
- --allow-multiple-documents
|
- --allow-multiple-documents
|
||||||
- id: check-added-large-files
|
- id: check-added-large-files
|
||||||
- repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook
|
- repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook
|
||||||
rev: v9.24.0
|
rev: v9.25.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: commitlint
|
- id: commitlint
|
||||||
stages: [ commit-msg ]
|
stages: [ commit-msg ]
|
||||||
@@ -30,7 +30,7 @@ repos:
|
|||||||
- id: go-test
|
- id: go-test
|
||||||
- id: gofumpt
|
- id: gofumpt
|
||||||
- repo: https://github.com/golangci/golangci-lint
|
- repo: https://github.com/golangci/golangci-lint
|
||||||
rev: v2.11.4
|
rev: v2.12.2
|
||||||
hooks:
|
hooks:
|
||||||
- id: golangci-lint-full
|
- id: golangci-lint-full
|
||||||
- repo: https://github.com/gitleaks/gitleaks
|
- repo: https://github.com/gitleaks/gitleaks
|
||||||
|
|||||||
@@ -2,6 +2,55 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## [0.4.2] - 2026-06-08
|
||||||
|
|
||||||
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo (#116)
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo (#118)
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo (#120)
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo (#122)
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo (#124)
|
||||||
|
- *(deps)* Update module github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager to v0.2.3 (#126)
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo (#128)
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo (#130)
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo (#132)
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo to v0.2.7 (#134)
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo to v0.2.8 (#136)
|
||||||
|
|
||||||
|
## [0.4.1] - 2026-05-09
|
||||||
|
|
||||||
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo (#102)
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo (#103)
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo (#104)
|
||||||
|
- *(deps)* Update aws-sdk-go-v2 monorepo (#105)
|
||||||
|
- *(deps)* Update module github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager to v0.1.20 (#108)
|
||||||
|
|
||||||
|
### 🎨 Styling
|
||||||
|
|
||||||
|
- Apply gofumpt formatting to s3.go (#112)
|
||||||
|
|
||||||
|
### ⚙️ Miscellaneous Tasks
|
||||||
|
|
||||||
|
- *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.25.0 (#106)
|
||||||
|
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.12.0 (#110)
|
||||||
|
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.12.1 (#111)
|
||||||
|
- *(deps)* Update pre-commit hook golangci/golangci-lint to v2.12.2 (#114)
|
||||||
|
|
||||||
|
## [0.4.0] - 2026-04-17
|
||||||
|
|
||||||
|
### 🚀 Features
|
||||||
|
|
||||||
|
- Auto-enable path-style addressing when a custom endpoint is set (#99)
|
||||||
|
|
||||||
|
## [0.3.0] - 2026-04-16
|
||||||
|
|
||||||
|
### 🚀 Features
|
||||||
|
|
||||||
|
- Add PresignInlineURL method for inline content display (#97)
|
||||||
|
|
||||||
## [0.2.0] - 2026-04-16
|
## [0.2.0] - 2026-04-16
|
||||||
|
|
||||||
### 🚀 Features
|
### 🚀 Features
|
||||||
|
|||||||
@@ -3,27 +3,26 @@ module gitea.unbound.se/unboundsoftware/storage
|
|||||||
go 1.24
|
go 1.24
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/aws/aws-sdk-go-v2 v1.41.5
|
github.com/aws/aws-sdk-go-v2 v1.41.12
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.32.14
|
github.com/aws/aws-sdk-go-v2/config v1.32.23
|
||||||
github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager v0.1.15
|
github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager v0.2.8
|
||||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.103.2
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect
|
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.14 // indirect
|
github.com/aws/aws-sdk-go-v2/credentials v1.19.22 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 // indirect
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.28 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.28 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.28 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.29 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.21 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.28 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.28 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 // indirect
|
github.com/aws/aws-sdk-go-v2/service/signin v1.1.4 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 // indirect
|
github.com/aws/aws-sdk-go-v2/service/sso v1.31.2 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 // indirect
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.5 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 // indirect
|
github.com/aws/aws-sdk-go-v2/service/sts v1.43.2 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 // indirect
|
github.com/aws/smithy-go v1.27.1 // indirect
|
||||||
github.com/aws/smithy-go v1.24.2 // indirect
|
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,40 +1,38 @@
|
|||||||
github.com/aws/aws-sdk-go-v2 v1.41.5 h1:dj5kopbwUsVUVFgO4Fi5BIT3t4WyqIDjGKCangnV/yY=
|
github.com/aws/aws-sdk-go-v2 v1.41.12 h1:DIKX2c31ekm9RA2D9FBj1EWXx++9AdAqRw+e78Tq2Ck=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.41.5/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o=
|
github.com/aws/aws-sdk-go-v2 v1.41.12/go.mod h1:27+ACypSLljLAEKsCYOmrjKh83vuTRkuAe9Uv/3A4bg=
|
||||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o=
|
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13 h1:p1BBrg/Hhp6uK7zpejeI8QFXHJeC/mynzi04Sl03k9g=
|
||||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI=
|
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13/go.mod h1:8cIfkE9MDhkRZGpQ22aV6/lkYeYSozpz16Smrs5x4Ls=
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.32.14 h1:opVIRo/ZbbI8OIqSOKmpFaY7IwfFUOCCXBsUpJOwDdI=
|
github.com/aws/aws-sdk-go-v2/config v1.32.23 h1:PYDobtcsJXK6bQe9I8RQk6s19Bz3xa3xRU08Hy1Em3Y=
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.32.14/go.mod h1:U4/V0uKxh0Tl5sxmCBZ3AecYny4UNlVmObYjKuuaiOo=
|
github.com/aws/aws-sdk-go-v2/config v1.32.23/go.mod h1:QID4dqUQVgEOYPKsPWd1sNWCCR2c5g7o3jeEtIXPOZU=
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.14 h1:n+UcGWAIZHkXzYt87uMFBv/l8THYELoX6gVcUvgl6fI=
|
github.com/aws/aws-sdk-go-v2/credentials v1.19.22 h1:SHfH6wyPsEgG7fVsi5rQxWEt7tuIcN2PGhb1mTFv6tE=
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.14/go.mod h1:cJKuyWB59Mqi0jM3nFYQRmnHVQIcgoxjEMAbLkpr62w=
|
github.com/aws/aws-sdk-go-v2/credentials v1.19.22/go.mod h1:54nO8lKD4aQPOntM/VTWjnR+DYzTwx0YkSMZMhAgewQ=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 h1:NUS3K4BTDArQqNu2ih7yeDLaS3bmHD0YndtA6UP884g=
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.28 h1:b+kcDejJrXc30zU/w8Tc9klISwaO5wh+6T0sMBdDoHM=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21/go.mod h1:YWNWJQNjKigKY1RHVJCuupeWDrrHjRqHm0N9rdrWzYI=
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.28/go.mod h1:LnI62O9GnSv6GcuLXxOYqlq0C8EmxMcgnF6m7LdYuOY=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager v0.1.15 h1:92MfpwB6KjsPIEq9g3DniRPxOe92ew5hUz1h8W8cX7E=
|
github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager v0.2.8 h1:vooR0jc+VLHDkM97Q82ml82WAOl1aA3jX/Dn6Yb19bc=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager v0.1.15/go.mod h1:7O129SmOn4acM++3oVfTLAeHmNOsj0y7AA7zmbgnGOk=
|
github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager v0.2.8/go.mod h1:9A4usyBencYSi5/18mRjSDe0LHFarrOmyWifz4Om4bY=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 h1:Rgg6wvjjtX8bNHcvi9OnXWwcE0a2vGpbwmtICOsvcf4=
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.28 h1:Xf2j7NdVcUKomlZ4iihOP4AZ3Fzlr8h4yKpXeP+OFPg=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21/go.mod h1:A/kJFst/nm//cyqonihbdpQZwiUhhzpqTsdbhDdRF9c=
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.28/go.mod h1:O8cDo1dW63jU7ki//kRe1z+tLGcpnD1jrouitsQddDw=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 h1:PEgGVtPoB6NTpPrBgqSE5hE/o47Ij9qk/SEZFbUOe9A=
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.28 h1:KqIfN9kpkKkcBqBbNpNGTIrXO6ExTUvFKvXkC+YAzVo=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21/go.mod h1:p+hz+PRAYlY3zcpJhPwXlLC4C+kqn70WIHwnzAfs6ps=
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.28/go.mod h1:uxtQiKvLtNS4iXVsH2McVD/ls8FKN/uUhe1hGxPjrw0=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw=
|
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.29 h1:VkE9FuzTQVjBBrnj4+oCdxCLFIz7aqLYKUCjtvxVcOs=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY=
|
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.29/go.mod h1:H32Z2Qth9b+9LqjyBsCnozMQ8H2N7YBUDVXwbs0iggg=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22 h1:rWyie/PxDRIdhNf4DzRk0lvjVOqFJuNnO8WwaIRVxzQ=
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 h1:ZD2+BSw9vFsNlKYIasSNt3uDbjqqXIBcM13UJv/Lx2k=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22/go.mod h1:zd/JsJ4P7oGfUhXn1VyLqaRZwPmZwg44Jf2dS84Dm3Y=
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12/go.mod h1:Ms4zlcVBbXbiP7EVLhl+lgjvA/a7YphqQ3Ih3174EmI=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY=
|
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.21 h1:FsZxbPiVgEHYofziwfylouMki8b1Z7mI4CMU/7bhwBA=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI=
|
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.21/go.mod h1:Mmm30OV+JLXYQUcbSd84THnv3P5JtjhVDujLwMqRG0U=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 h1:JRaIgADQS/U6uXDqlPiefP32yXTda7Kqfx+LgspooZM=
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.28 h1:axj4mEDletwKmTm/9jR+DkIMmCfcn5vE4jBMAAN+3Vg=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13/go.mod h1:CEuVn5WqOMilYl+tbccq8+N2ieCy0gVn3OtRb0vBNNM=
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.28/go.mod h1:3Aaz69M0jqfSHLKqxgolgUBFT4hpwSNc7DzC95orEi8=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 h1:c31//R3xgIJMSC8S6hEVq+38DcvUlgFY0FM6mSI5oto=
|
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.28 h1:li8rTZAAb22g4UsxbjwMdaNVWbgVcDzPqI7nDTI+mF4=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21/go.mod h1:r6+pf23ouCB718FUxaqzZdbpYFyDtehyZcmP5KL9FkA=
|
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.28/go.mod h1:/brXioSGIMEdcBFoubpSdmighSVp6poP+mma/wB7iHA=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 h1:ZlvrNcHSFFWURB8avufQq9gFsheUgjVD9536obIknfM=
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.103.2 h1:b4ikkRk22T4xYkEgaWc3Voe+3xbt5YbbFhNehOWyUiY=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21/go.mod h1:cv3TNhVrssKR0O/xxLJVRfd2oazSnZnkUeTf6ctUwfQ=
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.103.2/go.mod h1:Gp7eHZ0NZ8ZK5RXpoIUp/C8OeAmJqpCgdwEK1D/QOek=
|
||||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0 h1:hlSuz394kV0vhv9drL5lhuEFbEOEP1VyQpy15qWh1Pk=
|
github.com/aws/aws-sdk-go-v2/service/signin v1.1.4 h1:YcpVyIPLCbiypN6KSphijN5fC7DDjX114SqA7prnnxg=
|
||||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0/go.mod h1:uoA43SdFwacedBfSgfFSjjCvYe8aYBS7EnU5GZ/YKMM=
|
github.com/aws/aws-sdk-go-v2/service/signin v1.1.4/go.mod h1:5ZICS++oFTRPfa1GsBqFDWX/8WamZ/QQOcCzIuU/zLw=
|
||||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 h1:QKZH0S178gCmFEgst8hN0mCX1KxLgHBKKY/CLqwP8lg=
|
github.com/aws/aws-sdk-go-v2/service/sso v1.31.2 h1:ySNWu7TPmj5fKFIa1GYvX+Ddxd5ccruqC20aMNuyWDM=
|
||||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.9/go.mod h1:7yuQJoT+OoH8aqIxw9vwF+8KpvLZ8AWmvmUWHsGQZvI=
|
github.com/aws/aws-sdk-go-v2/service/sso v1.31.2/go.mod h1:A+U9luAOwFeB1kseyWCITVg7/NntoPebCFR9pQ4ch9A=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 h1:lFd1+ZSEYJZYvv9d6kXzhkZu07si3f+GQ1AaYwa2LUM=
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.5 h1:KSzGGqfk39O+WU3OEyYbx6F7sLDQCqxlOJ+2IksfK6U=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.15/go.mod h1:WSvS1NLr7JaPunCXqpJnWk1Bjo7IxzZXrZi1QQCkuqM=
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.5/go.mod h1:ATs88lXDeQB6CZOgQ5BIl9JbYS+EsCWUSDyff6L/oVo=
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 h1:dzztQ1YmfPrxdrOiuZRMF6fuOwWlWpD2StNLTceKpys=
|
github.com/aws/aws-sdk-go-v2/service/sts v1.43.2 h1:RTO7mmGyedgnNmcPh3yQizNfc6GKoV5iqfdJavuf9vw=
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19/go.mod h1:YO8TrYtFdl5w/4vmjL8zaBSsiNp3w0L1FfKVKenZT7w=
|
github.com/aws/aws-sdk-go-v2/service/sts v1.43.2/go.mod h1:fBhUZXDin9YYqhcpOMjIcpdik25rVwWyxLdPH1RZd9s=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 h1:p8ogvvLugcR/zLBXTXrTkj0RYBUdErbMnAFFp12Lm/U=
|
github.com/aws/smithy-go v1.27.1 h1:4T340VFndXtADGF52gYa1POyL7s9E4Z1OeZ1hCscIw8=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.10/go.mod h1:60dv0eZJfeVXfbT1tFJinbHrDfSJ2GZl4Q//OSSNAVw=
|
github.com/aws/smithy-go v1.27.1/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
|
||||||
github.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng=
|
|
||||||
github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package storage
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"io"
|
"io"
|
||||||
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go-v2/aws"
|
"github.com/aws/aws-sdk-go-v2/aws"
|
||||||
@@ -12,6 +13,19 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go-v2/service/s3"
|
"github.com/aws/aws-sdk-go-v2/service/s3"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// s3ClientOptions returns the per-client overrides applied to every S3 client
|
||||||
|
// constructed by this package. When the AWS_ENDPOINT_URL_S3 (or
|
||||||
|
// AWS_ENDPOINT_URL) env var is set — typically because the runtime is
|
||||||
|
// pointing at a local MinIO/S3-compatible endpoint — path-style addressing
|
||||||
|
// is enabled so requests look like `http://host:9000/bucket/key` instead of
|
||||||
|
// `http://bucket.host:9000/key`. Production deployments leave those vars
|
||||||
|
// unset and continue talking to real S3 with virtual-hosted style.
|
||||||
|
func s3ClientOptions(o *s3.Options) {
|
||||||
|
if os.Getenv("AWS_ENDPOINT_URL_S3") != "" || os.Getenv("AWS_ENDPOINT_URL") != "" {
|
||||||
|
o.UsePathStyle = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Uploader is the interface for uploading objects to S3 using the transfer manager
|
// Uploader is the interface for uploading objects to S3 using the transfer manager
|
||||||
type Uploader interface {
|
type Uploader interface {
|
||||||
UploadObject(ctx context.Context, input *transfermanager.UploadObjectInput, opts ...func(*transfermanager.Options)) (*transfermanager.UploadObjectOutput, error)
|
UploadObject(ctx context.Context, input *transfermanager.UploadObjectInput, opts ...func(*transfermanager.Options)) (*transfermanager.UploadObjectOutput, error)
|
||||||
@@ -53,7 +67,8 @@ func (s *S3) storeWithManager(path string, content io.Reader, contentType string
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
presignedUrl, err := s.presigner.PresignGetObject(context.Background(),
|
presignedUrl, err := s.presigner.PresignGetObject(
|
||||||
|
context.Background(),
|
||||||
&s3.GetObjectInput{
|
&s3.GetObjectInput{
|
||||||
Bucket: aws.String(s.bucket),
|
Bucket: aws.String(s.bucket),
|
||||||
Key: aws.String(*out.Key),
|
Key: aws.String(*out.Key),
|
||||||
@@ -105,6 +120,25 @@ func (s *S3) PresignURL(ctx context.Context, key string) (string, error) {
|
|||||||
return req.URL, nil
|
return req.URL, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PresignInlineURL generates a presigned URL that tells the browser to display
|
||||||
|
// the content inline rather than triggering a download. The URL is valid for
|
||||||
|
// 15 minutes.
|
||||||
|
func (s *S3) PresignInlineURL(ctx context.Context, key string, contentType string) (string, error) {
|
||||||
|
input := &s3.GetObjectInput{
|
||||||
|
Bucket: aws.String(s.bucket),
|
||||||
|
Key: aws.String(key),
|
||||||
|
ResponseContentDisposition: aws.String("inline"),
|
||||||
|
}
|
||||||
|
if contentType != "" {
|
||||||
|
input.ResponseContentType = aws.String(contentType)
|
||||||
|
}
|
||||||
|
req, err := s.presigner.PresignGetObject(ctx, input, s3.WithPresignExpires(15*time.Minute))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return req.URL, nil
|
||||||
|
}
|
||||||
|
|
||||||
// New creates a new S3 storage instance using the upload manager
|
// New creates a new S3 storage instance using the upload manager
|
||||||
// This loads AWS config from the default locations and is suitable for most use cases
|
// This loads AWS config from the default locations and is suitable for most use cases
|
||||||
func New(bucket string) (*S3, error) {
|
func New(bucket string) (*S3, error) {
|
||||||
@@ -112,7 +146,7 @@ func New(bucket string) (*S3, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client := s3.NewFromConfig(cfg)
|
client := s3.NewFromConfig(cfg, s3ClientOptions)
|
||||||
uploader := transfermanager.New(client, func(o *transfermanager.Options) {
|
uploader := transfermanager.New(client, func(o *transfermanager.Options) {
|
||||||
o.PartSizeBytes = 5 * 1024 * 1024
|
o.PartSizeBytes = 5 * 1024 * 1024
|
||||||
})
|
})
|
||||||
@@ -128,7 +162,7 @@ func New(bucket string) (*S3, error) {
|
|||||||
// NewS3 creates a new S3 storage instance using direct PutObject
|
// NewS3 creates a new S3 storage instance using direct PutObject
|
||||||
// This is useful when you want more control over the AWS configuration
|
// This is useful when you want more control over the AWS configuration
|
||||||
func NewS3(cfg aws.Config, bucket string) *S3 {
|
func NewS3(cfg aws.Config, bucket string) *S3 {
|
||||||
client := s3.NewFromConfig(cfg)
|
client := s3.NewFromConfig(cfg, s3ClientOptions)
|
||||||
return &S3{
|
return &S3{
|
||||||
bucket: bucket,
|
bucket: bucket,
|
||||||
directSvc: client,
|
directSvc: client,
|
||||||
|
|||||||
+29
@@ -40,6 +40,35 @@ func (m *mockPresigner) PresignGetObject(ctx context.Context, params *s3.GetObje
|
|||||||
return m.presignFunc(ctx, params, optFns...)
|
return m.presignFunc(ctx, params, optFns...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test path-style toggle
|
||||||
|
|
||||||
|
func TestS3ClientOptions_PathStyleTogglesOnCustomEndpoint(t *testing.T) {
|
||||||
|
cases := []struct {
|
||||||
|
name string
|
||||||
|
envVar string
|
||||||
|
value string
|
||||||
|
expected bool
|
||||||
|
}{
|
||||||
|
{name: "no env var → virtual-hosted", envVar: "", expected: false},
|
||||||
|
{name: "AWS_ENDPOINT_URL_S3 set → path-style", envVar: "AWS_ENDPOINT_URL_S3", value: "http://minio:9000", expected: true},
|
||||||
|
{name: "AWS_ENDPOINT_URL set → path-style", envVar: "AWS_ENDPOINT_URL", value: "http://minio:9000", expected: true},
|
||||||
|
}
|
||||||
|
for _, tc := range cases {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
t.Setenv("AWS_ENDPOINT_URL", "")
|
||||||
|
t.Setenv("AWS_ENDPOINT_URL_S3", "")
|
||||||
|
if tc.envVar != "" {
|
||||||
|
t.Setenv(tc.envVar, tc.value)
|
||||||
|
}
|
||||||
|
opts := s3.Options{}
|
||||||
|
s3ClientOptions(&opts)
|
||||||
|
if opts.UsePathStyle != tc.expected {
|
||||||
|
t.Fatalf("UsePathStyle = %v, want %v", opts.UsePathStyle, tc.expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Test NewS3 constructor
|
// Test NewS3 constructor
|
||||||
|
|
||||||
func TestNewS3(t *testing.T) {
|
func TestNewS3(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user