mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-05 08:18:03 +08:00
Merge pull request #9988 from ipfs/release-v0.21.0
This commit is contained in:
commit
294db3e302
8
.github/workflows/build.yml
vendored
8
.github/workflows/build.yml
vendored
@ -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
|
||||
|
||||
@ -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"]
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
@ -152,4 +152,192 @@ should be using AcceleratedDHTClient because they are falling behind.
|
||||
|
||||
### 📝 Changelog
|
||||
|
||||
<details><summary>Full Changelog</summary>
|
||||
|
||||
- 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
|
||||
|
||||
</details>
|
||||
|
||||
### 👨👩👧👦 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 |
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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=
|
||||
|
||||
2
go.mod
2
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
|
||||
|
||||
4
go.sum
4
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=
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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=
|
||||
|
||||
@ -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 <<EOF > 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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user