diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 3caee6bac..f6a2ced2b 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -175,11 +175,11 @@ jobs:
working-directory: ipfs-webui
- id: state
env:
- GITHUB_REPOSITORY: ipfs/ipfs-webui
- GITHUB_REF: ${{ steps.ref.outputs.ref }}
GITHUB_TOKEN: ${{ github.token }}
- run: |
- echo "state=$(curl -L -H "Authorization: Bearer $GITHUB_TOKEN" "https://api.github.com/repos/$GITHUB_REPOSITORY/commits/$GITHUB_REF/status" --jq '.state')" | tee -a $GITHUB_OUTPUT
+ ENDPOINT: repos/ipfs/ipfs-webui/commits/${{ steps.ref.outputs.ref }}/status
+ SELECTOR: .state
+ KEY: state
+ run: gh api "$ENDPOINT" --jq "$SELECTOR" | xargs -I{} echo "$KEY={}" | tee -a $GITHUB_OUTPUT
- name: Build ipfs-webui@main (state=${{ steps.state.outputs.state }})
run: npm run test:build
working-directory: ipfs-webui
diff --git a/Dockerfile b/Dockerfile
index e70abcc1a..a5c8d816c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -118,7 +118,7 @@ ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/start_ipfs"]
# Healthcheck for the container
# QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn is the CID of empty folder
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
- CMD ipfs dag stat /ipfs/QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn || exit 1
+ CMD ipfs --api=/ip4/127.0.0.1/tcp/5001 dag stat /ipfs/QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn || exit 1
# Execute the daemon subcommand by default
CMD ["daemon", "--migrate=true", "--agent-version-suffix=docker"]
diff --git a/config/config.go b/config/config.go
index 93494265d..bc8ea371f 100644
--- a/config/config.go
+++ b/config/config.go
@@ -83,7 +83,7 @@ func Path(configroot, extension string) (string, error) {
// - If the user-provided configuration file path is only a file name, use the
// configuration root directory, otherwise use only the user-provided path
// and ignore the configuration root.
-func Filename(configroot string, userConfigFile string) (string, error) {
+func Filename(configroot, userConfigFile string) (string, error) {
if userConfigFile == "" {
return Path(configroot, DefaultConfigFile)
}
diff --git a/config/init.go b/config/init.go
index 646d1e6e0..a6e3c46cc 100644
--- a/config/init.go
+++ b/config/init.go
@@ -67,12 +67,8 @@ func InitWithIdentity(identity Identity) (*Config, error) {
RootRedirect: "",
NoFetch: false,
PathPrefixes: []string{},
- HTTPHeaders: map[string][]string{
- "Access-Control-Allow-Origin": {"*"},
- "Access-Control-Allow-Methods": {"GET"},
- "Access-Control-Allow-Headers": {"X-Requested-With", "Range", "User-Agent"},
- },
- APICommands: []string{},
+ HTTPHeaders: map[string][]string{},
+ APICommands: []string{},
},
Reprovider: Reprovider{
Interval: nil,
diff --git a/config/types.go b/config/types.go
index a781f023a..2171a53f5 100644
--- a/config/types.go
+++ b/config/types.go
@@ -415,9 +415,9 @@ func (p OptionalString) String() string {
var _ json.Unmarshaler = (*OptionalInteger)(nil)
var _ json.Marshaler = (*OptionalInteger)(nil)
-type swarmLimits struct{}
+type swarmLimits doNotUse
-var _ json.Unmarshaler = swarmLimits{}
+var _ json.Unmarshaler = swarmLimits(false)
func (swarmLimits) UnmarshalJSON(b []byte) error {
d := json.NewDecoder(bytes.NewReader(b))
@@ -439,9 +439,9 @@ func (swarmLimits) UnmarshalJSON(b []byte) error {
}
}
-type experimentalAcceleratedDHTClient struct{}
+type experimentalAcceleratedDHTClient doNotUse
-var _ json.Unmarshaler = experimentalAcceleratedDHTClient{}
+var _ json.Unmarshaler = experimentalAcceleratedDHTClient(false)
func (experimentalAcceleratedDHTClient) UnmarshalJSON(b []byte) error {
d := json.NewDecoder(bytes.NewReader(b))
@@ -462,3 +462,8 @@ func (experimentalAcceleratedDHTClient) UnmarshalJSON(b []byte) error {
}
}
}
+
+// doNotUse is a type you must not use, it should be struct{} but encoding/json
+// does not support omitempty on structs and I can't be bothered to write custom
+// marshalers on all structs that have a doNotUse field.
+type doNotUse bool
diff --git a/docs/changelogs/v0.21.md b/docs/changelogs/v0.21.md
index 394059472..b798c0d7b 100644
--- a/docs/changelogs/v0.21.md
+++ b/docs/changelogs/v0.21.md
@@ -152,4 +152,192 @@ should be using AcceleratedDHTClient because they are falling behind.
### 📝 Changelog
+Full Changelog
+
+- github.com/ipfs/kubo:
+ - fix: correctly handle migration of configs
+ - fix(gateway): include CORS on subdomain redirects (#9994) ([ipfs/kubo#9994](https://github.com/ipfs/kubo/pull/9994))
+ - fix: docker repository initialization race condition
+ - chore: update version
+ - ([ipfs/kubo#9981](https://github.com/ipfs/kubo/pull/9981))
+ - ([ipfs/kubo#9960](https://github.com/ipfs/kubo/pull/9960))
+ - ([ipfs/kubo#9936](https://github.com/ipfs/kubo/pull/9936))
+- github.com/ipfs/boxo (v0.8.1 -> v0.10.2-0.20230629143123-2d3edc552442):
+ - chore: version 0.10.2
+ - fix(gateway): include CORS on subdomain redirects (#395) ([ipfs/boxo#395](https://github.com/ipfs/boxo/pull/395))
+ - fix(gateway): ensure 'X-Ipfs-Root' header is valid (#337) ([ipfs/boxo#337](https://github.com/ipfs/boxo/pull/337))
+ - docs: prepare changelog for next release [ci skip]
+ - chore: version 0.10.1 (#359) ([ipfs/boxo#359](https://github.com/ipfs/boxo/pull/359))
+ - fix(gateway): allow CAR trustless requests with path
+ - blockstore: replace go.uber.org/atomic with sync/atomic
+ - fix(gateway): remove handleUnsupportedHeaders after go-ipfs 0.13 (#350) ([ipfs/boxo#350](https://github.com/ipfs/boxo/pull/350))
+ - docs: update RELEASE.md based on 0.9 release (#343) ([ipfs/boxo#343](https://github.com/ipfs/boxo/pull/343))
+ - chore: v0.10.0 (#345) ([ipfs/boxo#345](https://github.com/ipfs/boxo/pull/345))
+ - docs(changelog): car params from ipip-402
+ - docs(changelog): add gateway deserialized responses (#341) ([ipfs/boxo#341](https://github.com/ipfs/boxo/pull/341))
+ - feat(gateway): implement IPIP-402 extensions for gateway CAR requests (#303) ([ipfs/boxo#303](https://github.com/ipfs/boxo/pull/303))
+ - chore: release v0.9.0
+ - changelog: update for 0.8.1 and 0.9.0
+ - provider: second round of reprovider refactor
+ - feat(unixfs): change protobuf package name to unixfs.v1.pb to prevent collisions with go-unixfs. Also regenerate protobufs with latest gogo
+ - feat(ipld/merkledag): remove use of go-ipld-format global registry
+ - feat(ipld/merkledag): updated to use its own global go-ipld-legacy registry instead of a shared global registry
+ - chore: do not rely on deprecated logger
+ - changelog: add changelog for async pin listing (#336) ([ipfs/boxo#336](https://github.com/ipfs/boxo/pull/336))
+ - pinner: change the interface to have async pin listing
+ - provider: revert throughput callback and related refactor
+ - fix(gateway): question marks in url.Path when redirecting (#313) ([ipfs/boxo#313](https://github.com/ipfs/boxo/pull/313))
+ - fix(gateway)!: no duplicate payload during subdomain redirects (#326) ([ipfs/boxo#326](https://github.com/ipfs/boxo/pull/326))
+ - provider: add breaking changes to the changelog (#330) ([ipfs/boxo#330](https://github.com/ipfs/boxo/pull/330))
+ - relocated magic numbers, updated Reprovide Interval from 24h to 22h
+ - provider: refactor to only maintain one batched implementation and add throughput callback
+ - feat(gateway): HTML preview for dag-cbor and dag-json (#315) ([ipfs/boxo#315](https://github.com/ipfs/boxo/pull/315))
+ - coreiface: add a testing.T argument to the provider
+ - feat(gateway): improved templates, user friendly errors (#298) ([ipfs/boxo#298](https://github.com/ipfs/boxo/pull/298))
+ - feat(gateway)!: deserialised responses turned off by default (#252) ([ipfs/boxo#252](https://github.com/ipfs/boxo/pull/252))
+ - fix(gw): missing return in error case ([ipfs/boxo#319](https://github.com/ipfs/boxo/pull/319))
+ - feat(routing/http): pass records limit on routing.FindProviders (#299) ([ipfs/boxo#299](https://github.com/ipfs/boxo/pull/299))
+ - bitswap/client: fix PeerResponseTrackerProbabilityOneKnownOneUnknownPeer
+ - feat(gw): add ipfs_http_gw_car_stream_fail_duration_seconds (#312) ([ipfs/boxo#312](https://github.com/ipfs/boxo/pull/312))
+ - feat(gw): add ipfs_http_gw_request_types metric (#311) ([ipfs/boxo#311](https://github.com/ipfs/boxo/pull/311))
+ - refactor: simplify ipns validation in example
+ - feat: add deprecator
+ - fix(routing/v1): add newline in NDJSON responses (#300) ([ipfs/boxo#300](https://github.com/ipfs/boxo/pull/300))
+ - feat(gateway): redirect ipns b58mh to cid (#236) ([ipfs/boxo#236](https://github.com/ipfs/boxo/pull/236))
+ - refactor: replace assert.Nil for assert.NoError
+ - tar: add test cases for validatePlatformPath
+ - feat(ipns): helper ValidateWithPeerID and UnmarshalIpnsEntry (#294) ([ipfs/boxo#294](https://github.com/ipfs/boxo/pull/294))
+ - Revert "feat: reusable ipns verify (#292)"
+ - feat: reusable ipns verify (#292) ([ipfs/boxo#292](https://github.com/ipfs/boxo/pull/292))
+ - refactor: remove badger, leveldb dependencies (#286) ([ipfs/boxo#286](https://github.com/ipfs/boxo/pull/286))
+ - feat(routing/http): add streaming support (#18) ([ipfs/boxo#18](https://github.com/ipfs/boxo/pull/18))
+ - feat(routing): allow-offline with routing put (#278) ([ipfs/boxo#278](https://github.com/ipfs/boxo/pull/278))
+ - refactor(gateway): switch to xxhash/v2 (#285) ([ipfs/boxo#285](https://github.com/ipfs/boxo/pull/285))
+- github.com/ipfs/go-ipfs-util (v0.0.2 -> v0.0.3):
+ - docs: remove contribution section
+ - chore: bump version
+ - chore: deprecate types and readme
+ - sync: update CI config files (#12) ([ipfs/go-ipfs-util#12](https://github.com/ipfs/go-ipfs-util/pull/12))
+ - fix staticcheck ([ipfs/go-ipfs-util#9](https://github.com/ipfs/go-ipfs-util/pull/9))
+- github.com/ipfs/go-ipld-format (v0.4.0 -> v0.5.0):
+ - chore: release version v0.5.0
+ - feat: remove block decoding global registry
+ - sync: update CI config files (#75) ([ipfs/go-ipld-format#75](https://github.com/ipfs/go-ipld-format/pull/75))
+ - sync: update CI config files (#74) ([ipfs/go-ipld-format#74](https://github.com/ipfs/go-ipld-format/pull/74))
+- github.com/ipfs/go-ipld-legacy (v0.1.1 -> v0.2.1):
+ - v0.2.1 ([ipfs/go-ipld-legacy#15](https://github.com/ipfs/go-ipld-legacy/pull/15))
+ - Expose a constructor for making a decoder with an existing link system ([ipfs/go-ipld-legacy#14](https://github.com/ipfs/go-ipld-legacy/pull/14))
+ - Update to v0.2.0 ([ipfs/go-ipld-legacy#13](https://github.com/ipfs/go-ipld-legacy/pull/13))
+ - Remove global variable
([ipfs/go-ipld-legacy#12](https://github.com/ipfs/go-ipld-legacy/pull/12))
+ - sync: update CI config files (#8) ([ipfs/go-ipld-legacy#8](https://github.com/ipfs/go-ipld-legacy/pull/8))
+- github.com/ipfs/go-unixfsnode (v1.6.0 -> v1.7.1):
+ - chore: bump to v1.7.1
+ - test: remove unnecessary t.Log
+ - test: check if reader reads only necessary blocks
+ - fix: do not read extra block if offset = at+childSize
+ - doc: added simple doc for testutil package
+ - bump v1.7.0
+ - feat(testutil): add test data generation utils (extracted from Lassie)
+- github.com/libp2p/go-libp2p (v0.27.3 -> v0.27.7):
+ - Release v0.27.7 (#2374) ([libp2p/go-libp2p#2374](https://github.com/libp2p/go-libp2p/pull/2374))
+ - Release v0.27.6 (#2359) ([libp2p/go-libp2p#2359](https://github.com/libp2p/go-libp2p/pull/2359))
+ - Release v0.27.5 (#2324) ([libp2p/go-libp2p#2324](https://github.com/libp2p/go-libp2p/pull/2324))
+ - Bump version to v0.27.4
+ - identify: reject signed peer records on peer ID mismatch
+ - swarm: change maps with multiaddress keys to use strings (#2284) ([libp2p/go-libp2p#2284](https://github.com/libp2p/go-libp2p/pull/2284))
+ - identify: avoid spuriously triggering pushes (#2299) ([libp2p/go-libp2p#2299](https://github.com/libp2p/go-libp2p/pull/2299))
+- github.com/libp2p/go-libp2p-kad-dht (v0.23.0 -> v0.24.2):
+ - chore: release v0.24.2
+ - chore: release v0.24.1
+ - fix: decrease tests noise, update kbucket and fix fixRTIUfNeeded
+ - refactor: remove goprocess
+ - fix: leaking go routines
+ - chore: release v0.24.0
+ - fix: don't add unresponsive DHT servers to the Routing Table (#820) ([libp2p/go-libp2p-kad-dht#820](https://github.com/libp2p/go-libp2p-kad-dht/pull/820))
+- github.com/libp2p/go-libp2p-kbucket (v0.5.0 -> v0.6.3):
+ - fix: fix abba bug in UsefullNewPeer ([libp2p/go-libp2p-kbucket#122](https://github.com/libp2p/go-libp2p-kbucket/pull/122))
+ - chore: release v0.6.2 ([libp2p/go-libp2p-kbucket#121](https://github.com/libp2p/go-libp2p-kbucket/pull/121))
+ - Replacing UsefulPeer() with UsefulNewPeer() ([libp2p/go-libp2p-kbucket#120](https://github.com/libp2p/go-libp2p-kbucket/pull/120))
+ - chore: release 0.6.1 ([libp2p/go-libp2p-kbucket#119](https://github.com/libp2p/go-libp2p-kbucket/pull/119))
+ - UsefulPeer function ([libp2p/go-libp2p-kbucket#113](https://github.com/libp2p/go-libp2p-kbucket/pull/113))
+ - Fixed peer replacement with bucket size of 1. ([libp2p/go-libp2p-kbucket#117](https://github.com/libp2p/go-libp2p-kbucket/pull/117))
+ - GenRandomKey function ([libp2p/go-libp2p-kbucket#116](https://github.com/libp2p/go-libp2p-kbucket/pull/116))
+ - Removed maintainers from readme ([libp2p/go-libp2p-kbucket#115](https://github.com/libp2p/go-libp2p-kbucket/pull/115))
+ - Add maintainers ([libp2p/go-libp2p-kbucket#114](https://github.com/libp2p/go-libp2p-kbucket/pull/114))
+ - sync: update CI config files (#112) ([libp2p/go-libp2p-kbucket#112](https://github.com/libp2p/go-libp2p-kbucket/pull/112))
+- github.com/libp2p/go-libp2p-routing-helpers (v0.6.2 -> v0.7.0):
+ - chore: release v0.7.0
+ - fix: iterate over keys manually in ProvideMany
+- github.com/libp2p/go-reuseport (v0.2.0 -> v0.3.0):
+ - release v0.3.0 (#103) ([libp2p/go-reuseport#103](https://github.com/libp2p/go-reuseport/pull/103))
+ - fix error handling when setting socket options (#102) ([libp2p/go-reuseport#102](https://github.com/libp2p/go-reuseport/pull/102))
+ - minor README updates (#96) ([libp2p/go-reuseport#96](https://github.com/libp2p/go-reuseport/pull/96))
+ - sync: update CI config files (#94) ([libp2p/go-reuseport#94](https://github.com/libp2p/go-reuseport/pull/94))
+ - feat: add a DialTimeout function ([libp2p/go-reuseport#92](https://github.com/libp2p/go-reuseport/pull/92))
+- github.com/multiformats/go-multicodec (v0.8.1 -> v0.9.0):
+ - Bump v0.9.0
+ - Bump v0.8.2
+ - chore: update submodules and go generate
+ - chore: update submodules and go generate
+ - chore: update submodules and go generate
+ - chore: update submodules and go generate
+ - chore: update submodules and go generate
+ - chore: update submodules and go generate
+- github.com/multiformats/go-multihash (v0.2.1 -> v0.2.3):
+ - chore: release v0.2.3
+ - perf: outline logic in Decode to allow for stack allocations
+ - chore: release v0.2.2
+ - sha256: drop minio in favor of crypto/sha256 for go1.21 and above
+ - sync: update CI config files (#169) ([multiformats/go-multihash#169](https://github.com/multiformats/go-multihash/pull/169))
+ - add handler for hasher.Write returned error ([multiformats/go-multihash#167](https://github.com/multiformats/go-multihash/pull/167))
+ - sync: update CI config files (#165) ([multiformats/go-multihash#165](https://github.com/multiformats/go-multihash/pull/165))
+ - test: add benchmark for all hash functions Sum
+
+
+
### 👨👩👧👦 Contributors
+
+| Contributor | Commits | Lines ± | Files Changed |
+|-------------|---------|---------|---------------|
+| Jorropo | 47 | +4394/-4458 | 202 |
+| Henrique Dias | 48 | +4344/-3962 | 205 |
+| Łukasz Magiera | 68 | +3604/-886 | 172 |
+| Adin Schmahmann | 8 | +1754/-1057 | 37 |
+| galargh | 7 | +1355/-1302 | 15 |
+| Gus Eggert | 7 | +1566/-655 | 33 |
+| rvagg | 1 | +396/-389 | 3 |
+| Michael Muré | 3 | +547/-202 | 14 |
+| Guillaume Michel - guissou | 5 | +153/-494 | 17 |
+| guillaumemichel | 15 | +446/-189 | 28 |
+| Laurent Senta | 4 | +472/-152 | 29 |
+| Rod Vagg | 6 | +554/-37 | 23 |
+| Marcin Rataj | 11 | +330/-82 | 21 |
+| Arthur Gavazza | 1 | +296/-87 | 7 |
+| Lucas Molas | 1 | +323/-56 | 6 |
+| Marco Munizaga | 5 | +227/-97 | 17 |
+| Alex | 8 | +163/-116 | 10 |
+| Steven Allen | 11 | +154/-114 | 14 |
+| Marten Seemann | 6 | +214/-41 | 12 |
+| web3-bot | 9 | +76/-75 | 28 |
+| Hector Sanjuan | 2 | +5/-96 | 4 |
+| Sukun | 1 | +83/-17 | 3 |
+| Steve Loeppky | 2 | +100/-0 | 2 |
+| Edgar Lee | 1 | +46/-46 | 12 |
+| Ivan Schasny | 1 | +67/-5 | 4 |
+| imthe1 | 1 | +65/-3 | 5 |
+| godcong | 2 | +30/-31 | 5 |
+| Will Scott | 4 | +36/-23 | 6 |
+| Petar Maymounkov | 1 | +45/-9 | 1 |
+| Ross Jones | 1 | +43/-1 | 2 |
+| William Entriken | 1 | +38/-0 | 1 |
+| João Pedro | 1 | +35/-0 | 1 |
+| jhertz | 1 | +21/-0 | 2 |
+| Nikhilesh Susarla | 1 | +21/-0 | 3 |
+| Matt Joiner | 1 | +11/-9 | 2 |
+| Vlad | 2 | +4/-2 | 2 |
+| Russell Dempsey | 2 | +4/-2 | 2 |
+| Will | 2 | +2/-2 | 2 |
+| Piotr Galar | 1 | +1/-1 | 1 |
+| Joel Gustafson | 1 | +1/-1 | 1 |
+| Dennis Trautwein | 1 | +1/-1 | 1 |
+| Bryan Stenson | 1 | +1/-1 | 1 |
diff --git a/docs/examples/kubo-as-a-library/go.mod b/docs/examples/kubo-as-a-library/go.mod
index 0fda8880c..40a4c8e45 100644
--- a/docs/examples/kubo-as-a-library/go.mod
+++ b/docs/examples/kubo-as-a-library/go.mod
@@ -7,7 +7,7 @@ go 1.18
replace github.com/ipfs/kubo => ./../../..
require (
- github.com/ipfs/boxo v0.10.1
+ github.com/ipfs/boxo v0.10.2-0.20230629143123-2d3edc552442
github.com/ipfs/kubo v0.0.0-00010101000000-000000000000
github.com/libp2p/go-libp2p v0.27.7
github.com/multiformats/go-multiaddr v0.9.0
diff --git a/docs/examples/kubo-as-a-library/go.sum b/docs/examples/kubo-as-a-library/go.sum
index d18d571e4..55b93e23a 100644
--- a/docs/examples/kubo-as-a-library/go.sum
+++ b/docs/examples/kubo-as-a-library/go.sum
@@ -320,8 +320,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
-github.com/ipfs/boxo v0.10.1 h1:q0ZhbyN6iNZLipd6txt1xotCiP/icfvdAQ4YpUi+cL4=
-github.com/ipfs/boxo v0.10.1/go.mod h1:1qgKq45mPRCxf4ZPoJV2lnXxyxucigILMJOrQrVivv8=
+github.com/ipfs/boxo v0.10.2-0.20230629143123-2d3edc552442 h1:SGbw381zt6c1VFf3QCBaJ+eVJ4AwD9fPaFKFp9U9Apk=
+github.com/ipfs/boxo v0.10.2-0.20230629143123-2d3edc552442/go.mod h1:1qgKq45mPRCxf4ZPoJV2lnXxyxucigILMJOrQrVivv8=
github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA=
github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU=
github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY=
diff --git a/go.mod b/go.mod
index 1b675c12e..cd58e5cff 100644
--- a/go.mod
+++ b/go.mod
@@ -16,7 +16,7 @@ require (
github.com/gogo/protobuf v1.3.2
github.com/google/uuid v1.3.0
github.com/hashicorp/go-multierror v1.1.1
- github.com/ipfs/boxo v0.10.1
+ github.com/ipfs/boxo v0.10.2-0.20230629143123-2d3edc552442
github.com/ipfs/go-block-format v0.1.2
github.com/ipfs/go-cid v0.4.1
github.com/ipfs/go-cidutil v0.1.0
diff --git a/go.sum b/go.sum
index 6ba018697..319148117 100644
--- a/go.sum
+++ b/go.sum
@@ -355,8 +355,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
-github.com/ipfs/boxo v0.10.1 h1:q0ZhbyN6iNZLipd6txt1xotCiP/icfvdAQ4YpUi+cL4=
-github.com/ipfs/boxo v0.10.1/go.mod h1:1qgKq45mPRCxf4ZPoJV2lnXxyxucigILMJOrQrVivv8=
+github.com/ipfs/boxo v0.10.2-0.20230629143123-2d3edc552442 h1:SGbw381zt6c1VFf3QCBaJ+eVJ4AwD9fPaFKFp9U9Apk=
+github.com/ipfs/boxo v0.10.2-0.20230629143123-2d3edc552442/go.mod h1:1qgKq45mPRCxf4ZPoJV2lnXxyxucigILMJOrQrVivv8=
github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA=
github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU=
github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY=
diff --git a/plugin/loader/loader.go b/plugin/loader/loader.go
index f891bb570..84ebdc0fc 100644
--- a/plugin/loader/loader.go
+++ b/plugin/loader/loader.go
@@ -1,6 +1,7 @@
package loader
import (
+ "encoding/json"
"fmt"
"io"
"os"
@@ -9,7 +10,6 @@ import (
"strings"
config "github.com/ipfs/kubo/config"
- cserialize "github.com/ipfs/kubo/config/serialize"
"github.com/ipld/go-ipld-prime/multicodec"
"github.com/ipfs/kubo/core"
@@ -97,11 +97,10 @@ type PluginLoader struct {
func NewPluginLoader(repo string) (*PluginLoader, error) {
loader := &PluginLoader{plugins: make([]plugin.Plugin, 0, len(preloadPlugins)), repo: repo}
if repo != "" {
- cfg, err := cserialize.Load(filepath.Join(repo, config.DefaultConfigFile))
- switch err {
- case cserialize.ErrNotInitialized:
- case nil:
- loader.config = cfg.Plugins
+ switch plugins, err := readPluginsConfig(repo, config.DefaultConfigFile); {
+ case err == nil:
+ loader.config = plugins
+ case os.IsNotExist(err):
default:
return nil, err
}
@@ -119,6 +118,33 @@ func NewPluginLoader(repo string) (*PluginLoader, error) {
return loader, nil
}
+// readPluginsConfig reads the Plugins section of the IPFS config, avoiding
+// reading anything other than the Plugin section. That way, we're free to
+// make arbitrary changes to all _other_ sections in migrations.
+func readPluginsConfig(repoRoot string, userConfigFile string) (config.Plugins, error) {
+ var cfg struct {
+ Plugins config.Plugins
+ }
+
+ cfgPath, err := config.Filename(repoRoot, userConfigFile)
+ if err != nil {
+ return config.Plugins{}, err
+ }
+
+ cfgFile, err := os.Open(cfgPath)
+ if err != nil {
+ return config.Plugins{}, err
+ }
+ defer cfgFile.Close()
+
+ err = json.NewDecoder(cfgFile).Decode(&cfg)
+ if err != nil {
+ return config.Plugins{}, err
+ }
+
+ return cfg.Plugins, nil
+}
+
func (loader *PluginLoader) assertState(state loaderState) error {
if loader.state != state {
return fmt.Errorf("loader state must be %s, was %s", state, loader.state)
diff --git a/test/dependencies/go.mod b/test/dependencies/go.mod
index f119128d2..18d3d834e 100644
--- a/test/dependencies/go.mod
+++ b/test/dependencies/go.mod
@@ -7,7 +7,7 @@ replace github.com/ipfs/kubo => ../../
require (
github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd
github.com/golangci/golangci-lint v1.49.0
- github.com/ipfs/boxo v0.10.1
+ github.com/ipfs/boxo v0.10.2-0.20230629143123-2d3edc552442
github.com/ipfs/go-cid v0.4.1
github.com/ipfs/go-cidutil v0.1.0
github.com/ipfs/go-datastore v0.6.0
diff --git a/test/dependencies/go.sum b/test/dependencies/go.sum
index 5c3a5ef94..bb4f8ebf5 100644
--- a/test/dependencies/go.sum
+++ b/test/dependencies/go.sum
@@ -413,8 +413,8 @@ github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NH
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
-github.com/ipfs/boxo v0.10.1 h1:q0ZhbyN6iNZLipd6txt1xotCiP/icfvdAQ4YpUi+cL4=
-github.com/ipfs/boxo v0.10.1/go.mod h1:1qgKq45mPRCxf4ZPoJV2lnXxyxucigILMJOrQrVivv8=
+github.com/ipfs/boxo v0.10.2-0.20230629143123-2d3edc552442 h1:SGbw381zt6c1VFf3QCBaJ+eVJ4AwD9fPaFKFp9U9Apk=
+github.com/ipfs/boxo v0.10.2-0.20230629143123-2d3edc552442/go.mod h1:1qgKq45mPRCxf4ZPoJV2lnXxyxucigILMJOrQrVivv8=
github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA=
github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU=
github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo=
diff --git a/test/sharness/t0112-gateway-cors.sh b/test/sharness/t0112-gateway-cors.sh
index 98b92f7de..e4fb57122 100755
--- a/test/sharness/t0112-gateway-cors.sh
+++ b/test/sharness/t0112-gateway-cors.sh
@@ -7,21 +7,9 @@ test_description="Test CORS behavior on Gateway port"
test_init_ipfs
# Default config
-test_expect_success "Default Gateway.HTTPHeaders config match expected values" '
+test_expect_success "Default Gateway.HTTPHeaders is empty (implicit CORS values from boxo/gateway)" '
cat < expected
-{
- "Access-Control-Allow-Headers": [
- "X-Requested-With",
- "Range",
- "User-Agent"
- ],
- "Access-Control-Allow-Methods": [
- "GET"
- ],
- "Access-Control-Allow-Origin": [
- "*"
- ]
-}
+{}
EOF
ipfs config --json Gateway.HTTPHeaders > actual &&
test_cmp expected actual
@@ -43,13 +31,19 @@ test_expect_success "GET to Gateway succeeds" '
test_expect_success "GET response for Gateway resource looks good" '
test_should_contain "< Access-Control-Allow-Origin: \*" curl_output &&
test_should_contain "< Access-Control-Allow-Methods: GET" curl_output &&
+ test_should_contain "< Access-Control-Allow-Methods: HEAD" curl_output &&
+ test_should_contain "< Access-Control-Allow-Methods: OPTIONS" curl_output &&
+ test_should_contain "< Access-Control-Allow-Headers: Content-Type" curl_output &&
test_should_contain "< Access-Control-Allow-Headers: Range" curl_output &&
+ test_should_contain "< Access-Control-Allow-Headers: User-Agent" curl_output &&
+ test_should_contain "< Access-Control-Allow-Headers: X-Requested-With" curl_output &&
test_should_contain "< Access-Control-Expose-Headers: Content-Range" curl_output &&
test_should_contain "< Access-Control-Expose-Headers: Content-Length" curl_output &&
+ test_should_contain "< Access-Control-Expose-Headers: X-Chunked-Output" curl_output &&
+ test_should_contain "< Access-Control-Expose-Headers: X-Stream-Output" curl_output &&
test_should_contain "< Access-Control-Expose-Headers: X-Ipfs-Path" curl_output &&
test_should_contain "< Access-Control-Expose-Headers: X-Ipfs-Roots" curl_output
'
-
# HTTP OPTIONS Request
test_expect_success "OPTIONS to Gateway succeeds" '
curl -svX OPTIONS -H "Origin: https://example.com" "http://127.0.0.1:$GWAY_PORT/ipfs/$thash" 2>curl_output &&
@@ -60,13 +54,34 @@ test_expect_success "OPTIONS to Gateway succeeds" '
test_expect_success "OPTIONS response for Gateway resource looks good" '
test_should_contain "< Access-Control-Allow-Origin: \*" curl_output &&
test_should_contain "< Access-Control-Allow-Methods: GET" curl_output &&
+ test_should_contain "< Access-Control-Allow-Methods: HEAD" curl_output &&
+ test_should_contain "< Access-Control-Allow-Methods: OPTIONS" curl_output &&
+ test_should_contain "< Access-Control-Allow-Headers: Content-Type" curl_output &&
test_should_contain "< Access-Control-Allow-Headers: Range" curl_output &&
+ test_should_contain "< Access-Control-Allow-Headers: User-Agent" curl_output &&
+ test_should_contain "< Access-Control-Allow-Headers: X-Requested-With" curl_output &&
test_should_contain "< Access-Control-Expose-Headers: Content-Range" curl_output &&
test_should_contain "< Access-Control-Expose-Headers: Content-Length" curl_output &&
+ test_should_contain "< Access-Control-Expose-Headers: X-Chunked-Output" curl_output &&
+ test_should_contain "< Access-Control-Expose-Headers: X-Stream-Output" curl_output &&
test_should_contain "< Access-Control-Expose-Headers: X-Ipfs-Path" curl_output &&
test_should_contain "< Access-Control-Expose-Headers: X-Ipfs-Roots" curl_output
'
+# HTTP OPTIONS Request on path → subdomain HTTP 301 redirect
+# (regression test for https://github.com/ipfs/kubo/issues/9983#issuecomment-1599673976)
+test_expect_success "OPTIONS to Gateway succeeds" '
+ curl -svX OPTIONS -H "Origin: https://example.com" "http://localhost:$GWAY_PORT/ipfs/$thash" 2>curl_output &&
+ cat curl_output
+'
+# OPTION Response from Gateway should contain CORS headers
+test_expect_success "OPTIONS response for subdomain redirect looks good" '
+ test_should_contain "HTTP/1.1 301 Moved Permanently" curl_output &&
+ test_should_contain "Location" curl_output &&
+ test_should_contain "< Access-Control-Allow-Origin: \*" curl_output &&
+ test_should_contain "< Access-Control-Allow-Methods: GET" curl_output
+'
+
test_kill_ipfs_daemon
# Test CORS safelisting of custom headers
diff --git a/version.go b/version.go
index 06c8914db..cfe20ca70 100644
--- a/version.go
+++ b/version.go
@@ -11,7 +11,7 @@ import (
var CurrentCommit string
// CurrentVersionNumber is the current application's version literal
-const CurrentVersionNumber = "0.21.0-rc3"
+const CurrentVersionNumber = "0.21.0"
const ApiVersion = "/kubo/" + CurrentVersionNumber + "/" //nolint