Commit Graph

757 Commits

Author SHA1 Message Date
Gus Eggert
9bd346e250
fix: fix context plumbing in gateway handlers (#8871)
This ensures that child contexts are passed around between
the handlers so that traces show the call hierarchy correctly.
2022-04-11 23:09:00 +02:00
makeworld
52bf133946
fix(gw): missing return if dir fails to finalize (#8806) 2022-04-08 23:09:23 +02:00
Ian Davis
fbf76663f4
fix(gw): update metrics only when payload data sent (#8827)
* fix: report gateway http metrics only when response is successful
* fix(gw): 304 Not Modified as no-op

This fix ensures we don't do any additional work when Etag match
what user already has in their own cache.

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-04-08 22:07:44 +02:00
Gus Eggert
f855bfe6ef
feat: add basic gateway tracing (#8595)
* add deprecation warning when tracer plugins are loaded
* add response format attribute to span in gateway handler
* add note about tracing's experimental status in godoc
* add nil check for TTL when adding name span attrs
* add basic sharness test for integration with otel collector
* add nil check in UnixFSAPI.processLink
* test: sharness check all json objs for swarm span
* add env var docs to docs/environment-variables.md
* chore: pin the otel collector version
* add tracing spans per response type (#8841)
* docs: tracing with jaeger-ui

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-04-04 19:24:05 +02:00
Marcin Rataj
5fa556945e
fix(gw): validate requested CAR version (#8835)
* fix(gw): validate requested CAR version

This adds validation of 'application/vnd.ipld.car;version=n' passed
in the Accept header by HTTP clients to align Gateway behavior with
the spec submitted to IANA.

* test: fix comment in test/sharness/t0118-gateway-car.sh

Co-authored-by: Gus Eggert <gus@gus.dev>

Co-authored-by: Gus Eggert <gus@gus.dev>
2022-04-01 09:12:46 -07:00
Adin Schmahmann
beaa8fc29b
feat: add gateway histogram metrics (#8443)
* feat(gw): response type histogram metrics

- response-type agnostic firstContentBlockGetMetric which counts the
  latency til the first content block.

- car/block/file/gen-dir-index duration histogram metrics that show how
  long each response type takes

* docs: improve metrics descriptions
* feat: more gw histogram buckets

0.05, 0.1, 0.25, 0.5, 1, 2, 5, 10, 30, 60 secs
as suggested in reviews at https://github.com/ipfs/go-ipfs/pull/8443

Co-authored-by: Marcin Rataj <lidel@lidel.org>
Co-authored-by: Gus Eggert <gus@gus.dev>
2022-03-21 15:57:08 +01:00
Marcin Rataj
4cabdfefbf
feat(gateway): Block and CAR response formats (#8758)
* feat: serveRawBlock implements ?format=block
* feat: serveCar implements ?format=car
* feat(gw): ?format= or Accept HTTP header

- extracted file-like content type responses to separate .go files
- Accept HTTP header with support for application/vnd.ipld.* types

* fix: use .bin for raw block content-disposition

.raw may be handled by something, depending on OS, and .bin
seems to be universally "binary file" across all systems:
https://en.wikipedia.org/wiki/List_of_filename_extensions_(A%E2%80%93E)

* refactor: gateway_handler_unixfs.go

- Moved UnixFS response handling to gateway_handler_unixfs*.go files.
- Removed support for X-Ipfs-Gateway-Prefix (Closes #7702)

* refactor: prefix cleanup and readable paths

- removed dead code after X-Ipfs-Gateway-Prefix is gone
  (https://github.com/ipfs/go-ipfs/issues/7702)
- escaped special characters in content paths returned with http.Error
  making them both safer and easier to reason about (e.g. when invisible
  whitespace Unicode is used)
2022-03-17 17:15:24 +01:00
Dave Justice
6774ef9dfd
fix: allow ipfs-companion browser extension to access RPC API (#8690)
* fix: add companion ids to allow origins

- fixes #8689
- Adds the chrome-extension ids for ipfs-companion and
ipfs-companion-beta to the allowed origins list, this
allows us to accesss ipfs api from a manifest v3 extension.
- added tests in t0401-api-browser-security.sh

* fix: companion when custom CORS *-Origin is set

Companion extension should be able to access RPC API even when custom
Access-Control-Allow-Origin is set

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-03-17 00:07:52 +01:00
Gus Eggert
0487f03eae
feat: add endpoint for enabling block profiling (#8469) 2022-03-11 14:32:59 -05:00
Laurent Senta
8d549f03f3 fix: rewrite dependencies over the go-ipfs-config package 2022-03-04 09:45:16 +01:00
Marcin Rataj
d5ad847e05
feat: ipfs-webui v2.15 (#8712)
Release Notes:
https://github.com/ipfs/ipfs-webui/releases/tag/v2.15.0
2022-03-01 19:03:06 +01:00
Marcin Rataj
caba3b2643
feat: X-Ipfs-Roots for smarter HTTP caches (#8720) 2022-03-01 09:04:31 -08:00
Manuel Alonso
edb32ac3d7
chore(gateway): debug logging for the http requests (#8518)
* chore(gateway): better logging for the http requests

* chore(gateway): removed defer and add more data to the final log

* chore(gateway): debug logging refactor

* chore(gateway): use debug w/o context when only msg

* doc: add cmd for log level

* chore: add more logs and address fedback

* chore(gateway): log subdomains and from=requestURI, refactor

* chore(gateway): fix debug redirect
2022-02-15 17:13:09 -05:00
Lucas Molas
9d197ca732
fix(corehttp): adjust peer counting metrics (#8577) 2021-12-02 17:03:00 -08:00
Adin Schmahmann
52c177ced9
feat: go-libp2p 0.16, UnixFS autosharding and go-datastore with contexts (#8563)
* plumb through go-datastore context changes

* update go-libp2p to v0.16.0
* use LIBP2P_TCP_REUSEPORT instead of IPFS_REUSEPORT
* use relay config
* making deprecation notice match the go-ipfs-config key
* docs(config): circuit relay v2
* docs(config): fix links and headers
* feat(config): Internal.Libp2pForceReachability

This switches to config that supports setting and reading
Internal.Libp2pForceReachability OptionalString flag

* use configuration option for static relays

* chore: go-ipfs-config v0.18.0

https://github.com/ipfs/go-ipfs-config/releases/tag/v0.18.0

* feat: circuit v1 migration prompt when Swarm.EnableRelayHop is set (#8559)
* exit when Swarm.EnableRelayHop is set
* docs: Experimental.ShardingEnabled migration

This ensures existing users of global sharding experiment get notified
that the flag no longer works + that autosharding happens automatically.

For people who NEED to keep the old behavior (eg. have no time to
migrate today) there is a note about restoring it with
`UnixFSShardingSizeThreshold`.

* chore: add dag-jose code to the cid command output

* add support for setting automatic unixfs sharding threshold from the config
* test: have tests use low cutoff for sharding to mimic old behavior
* test: change error message to match the current error
* test: Add automatic sharding/unsharding tests (#8547)
* test: refactored naming in the sharding sharness tests to make more sense

* ci: set interop test executor to convenience image for Go1.16 + Node
* ci: use interop master

Co-authored-by: Marcin Rataj <lidel@lidel.org>
Co-authored-by: Marten Seemann <martenseemann@gmail.com>
Co-authored-by: Marcin Rataj <lidel@lidel.org>
Co-authored-by: Gus Eggert <gus@gus.dev>
Co-authored-by: Lucas Molas <schomatis@gmail.com>
2021-11-29 19:58:05 +01:00
mathew-cf
11404a9a03
fix: multiple subdomain gateways on same domain (#8556) 2021-11-23 18:11:37 +01:00
Dimitris Apostolou
0c2f9d5950
Fix typos (#8548) 2021-11-17 21:16:06 +01:00
Marcin Rataj
0b923b7951 chore: update dir-index-html to v1.2.2
https://github.com/ipfs/dir-index-html/releases/tag/1.2.2
2021-10-07 12:42:17 -04:00
Petar Maymounkov
f50d43eb0d
add more logging to flaky TestPeersTotal
Cannot reproduce the flakiness at the moment. The report suggests that connections are established on different transports. Adding logging to show what these transports are.
2021-10-04 08:49:39 -07:00
Marcin Rataj
6a10c1df81
feat: ipfs-webui v2.13.0 (#8430)
Release Notes: https://github.com/ipfs/ipfs-webui/releases/tag/v2.13.0
2021-09-21 20:36:27 +02:00
Lucas Molas
3a84352f18
feat(cli): add daemon option --agent-version-suffix (#8419)
* feat(cli): add daemon option --agent-version-suffix
* fix sharness test when commit is empty (release)
2021-09-21 20:31:08 +02:00
Marten Seemann
c95d6ca08c update go-libp2p to v0.15.0-rc.1 2021-08-19 18:05:04 +02:00
Steven Allen
7c76118b0b
Merge pull request #8318 from ipfs/fix/path-panic
fix: avoid out of bounds error when rendering short hashes
2021-08-13 14:54:25 -07:00
Adrian Lanzafame
02823935aa feat: register first block metric by default 2021-08-07 15:48:22 -04:00
Steven Allen
66a76d27f3 fix: abort when we fail to resolve CIDs
I believe we figured that these were for "informational purposes", but
really, we _should_ always be able to resolve names to CIDs. If we
can't, there's probably something wrong with the directory.
2021-07-30 11:36:23 -07:00
Steven Allen
0858dc62aa fix: avoid panic on short hash
(caught higher up but should still be fixed)
2021-07-30 11:33:53 -07:00
Marcin Rataj
c7444fb61a feat: webui v2.12.4 2021-07-15 08:21:50 -07:00
Marcin Rataj
2c431eb825 fix: webui-2.12.3
This bumps webui to bugfix release based on feedback from 0.9.0-rc1:
https://github.com/ipfs/ipfs-webui/releases/tag/v2.12.3
2021-05-24 08:25:40 -07:00
Marcin Rataj
28d4d9b327 refactor: add isDomainNameAndNotPeerID
This ensures we exclude valid PeerIDs from code paths that require
DNSLink names.

Ref.
https://github.com/ipfs/go-ipfs/pull/8071#pullrequestreview-639409245
2021-05-13 10:54:40 -04:00
divingpetrel
24dd662d38 feat support non-ICANN DNS 2021-05-13 10:54:38 -04:00
Marten Seemann
473d7d5851 update quic-go to v0.21.0-rc.1 2021-05-12 19:17:52 -04:00
Marcin Rataj
a9868105f0
feat: ipfs-webui v2.12.2
https://github.com/ipfs/ipfs-webui/releases/tag/v2.12.2
2021-04-30 16:12:21 +02:00
Steven Allen
a006ded010 chore: update webui to 2.12.1 2021-04-28 11:00:45 -07:00
Marcin Rataj
9f8964e6f9
fix(gw): remove hardcoded hostnames
This closes #7317 by removing hardcoded PL hostnames from default
config, making the localhost the only implicit gateway hostname.
2021-04-12 18:03:44 +02:00
Steven Allen
4cdb67f37d
Merge pull request #7890 from ipfs/fix/remove-clear-site-data
fix(gw): remove use of Clear-Site-Data in subdomain router
2021-03-31 16:24:24 -07:00
Steven Allen
0a3f88823c
Merge pull request #7994 from ipfs/chore/deprecate-pathprefixes
chore: deprecate Gateway.PathPrefixes
2021-03-30 15:52:02 -07:00
Marcin Rataj
2f105f79b9
chore: deprecate Gateway.PathPrefixes
Context:
https://github.com/ipfs/go-ipfs/issues/7702#issuecomment-803136077
2021-03-30 21:17:41 +02:00
Steven Allen
d30f1e5d44
Merge pull request #7930 from ipfs/fix/redundant-ns-on-gateway
feat(gw): /ipfs/ipfs/{cid} → /ipfs/{cid}
2021-03-24 13:12:16 -07:00
Marcin Rataj
763a120ed2
fix: no fixup if X-Ipfs-Gateway-Prefix is present
https://github.com/ipfs/go-ipfs/pull/7930#discussion_r597976690
2021-03-20 00:00:58 +01:00
Marcin Rataj
a35ffee136
refactor: safer query handling
https://github.com/ipfs/go-ipfs/pull/7930#discussion_r597246135
2021-03-18 23:48:53 +01:00
Marcin Rataj
450baef0e9
refactor: explicit prefix check
https://github.com/ipfs/go-ipfs/pull/7930#discussion_r584001161
2021-03-18 21:48:04 +01:00
Marcin Rataj
b81b7549d3
refactor: addressing review
- moved to separate utility function
- return Bad Request error
- improved escaping of values passed via URL path
2021-03-18 21:22:07 +01:00
lanzafame
4ba03fa8df revert registration of metrics against unexposed prom registry 2021-03-17 10:15:42 +10:00
Hector Sanjuan
3db9551f79 Extract the namesys and the keystore submodules
Namesys is a very useful submodule. Given a ValueStore and a Datastore it can
resolve and publish /ipns/ paths.

This functionality does not need to be sequestered inside go-ipfs as it can
and should be used without IPFS, for example, for implementing lightweight
IPNS publishing services or for resolving /ipns/ paths.

"keystore" extraction was necessary, as there is a dependency to it in
namesys. Keystore is also a useful module by itself within the stack.

Fixes #6537
2021-03-12 14:09:36 -05:00
Marcin Rataj
dae7387584
refactor: show error, delay redirect
This implements error page that does not hide the problem,
but still redirects to a valid path after short delay:
https://github.com/ipfs/go-ipfs/pull/7930#issuecomment-786882748
2021-02-27 00:57:05 +01:00
Marcin Rataj
15e3732afd
feat(gw): /ipfs/ipfs/{cid} → /ipfs/{cid}
This will try to recover from invalid paths like  /ipfs/ipfs/{cid}
and redirect to proper one, when possible.
2021-02-20 00:09:17 +01:00
Marcin Rataj
d61ae2bcb4
fix: remove use of Clear-Site-Data
We used Clear-Site-Data to cushion transition period for local gateway
exposed at http://localhost while we were still figuring out
security-related details.

In the final implementation subdomain gateways are not tied to a
hostname explicitly, which removes the risk of cookies leaking,
removing the need for the header.

Turns out it causes issues for Firefox users, so let's just remove it.

Closes https://github.com/ipfs-shipyard/ipfs-companion/issues/977
2021-01-29 22:08:16 +01:00
Marcin Rataj
a0f90d3a14 test: cover 2 remaining lines 2021-01-14 20:53:20 +01:00
Marcin Rataj
abb25a1cfc refactor: remove redundant urlescape
URL.Query() will already decode the query parameters
2021-01-14 20:52:04 +01:00
Marcin Rataj
3de5b14e0c fix: ?uri= url-decode and preserve query
This makes ?uri= param able to process URIs passed by web browsers
https://developer.mozilla.org/en-US/docs/Web/API/Navigator/registerProtocolHandler
2021-01-14 20:52:04 +01:00
Dennis Trautwein
36368ee4dd feat: support requests from registerProtocolHandler
This commit adds support for requests produced by navigator.registerProtocolHandler on gateways. Now one can register `dweb.link` as an URI handler for `ipfs://`:

```
navigator.registerProtocolHandler('ipfs', 'https://dweb.link/ipfs/?uri=%s', 'ipfs resolver')
```

Then opening `ipfs://QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR` will produce an HTTP GET call to:

```
https://dweb.link/ipfs?uri=ipfs%3A%2F%2FQmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR
```

The query parameter `uri` will now be parsed and the given content identifier resolved via:

`https://dweb.link/ipfs/QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR`
2021-01-14 20:52:04 +01:00
Marcin Rataj
f932510b88
fix: check if rootID has DNSLink before uninlining
This kinda enables to run their custom DNS resolver with custom
tlds/names that are independent from the public DNS network.
2021-01-14 20:14:35 +01:00
Marcin Rataj
88dd257ace
test: false for isHTTPSRequest
As suggested in
https://github.com/ipfs/go-ipfs/pull/7847#discussion_r551933162
2021-01-08 00:31:46 +01:00
Marcin Rataj
09178aa717
feat(gw): support inlined DNSLink names with TLS
Problem statement and rationale for doing this can be found under
"Option C" at: https://github.com/ipfs/in-web-browsers/issues/169

TLDR is:

`https://dweb.link/ipns/my.v-long.example.com` can be loaded from a
subdomain gateway with a wildcard TLS cert if represented as a single
DNS label: `https://my-v--long-example-com.ipns.dweb.link`
2021-01-01 21:39:42 +01:00
Adin Schmahmann
fb3316ad05 fix: decrease log level of opencensus initialization 2020-12-08 21:46:49 -05:00
lanzafame
024bf80e6a change the scraping url 2020-12-08 20:22:43 -05:00
lanzafame
3d9821260a register quic opencensus metrics 2020-12-08 20:22:38 -05:00
Adin Schmahmann
76f3395ee6 p2p-proxy: earlier peerID validation check 2020-12-01 12:24:18 -05:00
Adin Schmahmann
a329e4fc66 p2p-proxy: better request length checking 2020-12-01 11:01:40 -05:00
Adin Schmahmann
499e011df9
Merge pull request #7699 from ipfs/fix/dnslink-dir-listing
fix(dnslink-gw): breadcrumbs and CID column when dir listing
2020-11-10 15:03:36 -05:00
Adin Schmahmann
0700c74bad
Merge pull request #7727 from ipfs/fix/preserver-query-on-website-redirect
fix(gw): preserve query on website redirect
2020-11-10 14:36:11 -05:00
Adin Schmahmann
675ef92a2a
Merge pull request #7716 from ipfs/feat/webui-v2.11.3
feat: ipfs-webui v2.11.4
2020-11-10 14:21:55 -05:00
Marcin Rataj
d1c20bdff7
fix: localhost API access via ipv6
This adds localhost ipv6 addresses to the allowlist for use in browser
context and fixes WebUI on ipv6-only deployments: http://[::1]:5001/webui

We were missing CORS/Origin tests for API port so I've added basic ones
and included localhost/127.0.0.1/::1 variants.
2020-10-20 00:46:40 +02:00
Marcin Rataj
6ffd0aa22e
fix(gw): preserve query on website redirect 2020-10-14 00:46:57 +02:00
Marcin Rataj
f62656630b
feat: ipfs-webui v2.11.4 2020-10-07 15:01:32 +02:00
Marcin Rataj
00147106f4
feat: ipfs-webui v2.11.3
https://github.com/ipfs-shipyard/ipfs-webui/releases/tag/v2.11.3
2020-10-06 19:57:18 +02:00
Adin Schmahmann
9c60ad89de
Merge pull request #7703 from rafaelramalho19/chore/bump-go-ipfs
chore: webui v2.11.2
2020-10-02 11:53:09 -04:00
Adin Schmahmann
9b1171d427
Merge pull request #7677 from ipfs/feat/content-disposition-attachment
feat(gateway): Content-Disposition improvements
2020-10-02 11:20:11 -04:00
Marcin Rataj
3ed46d995f
test(gw): add t0115-gateway-dir-listing.sh to sharness
This adds proper end-to-end tests for directory listing on Gateway port
that protects us against regressions oni each gw type:
- path gateway
- subdomain gateway
- dnslink website gateway

Tests cover:
- etag/unicode support
- breadcrumbs
- file name column
- hash column
2020-09-29 02:27:28 +02:00
Marcin Rataj
c94bd768d2
fix(gw): links in CID column on dir listing
This switches go-ipfs to dir-index-html after
https://github.com/ipfs/dir-index-html/pull/43
got merged to master
2020-09-28 23:12:47 +02:00
Rafael Ramalho
43b8a314f1 chore: bump webui version 2020-09-28 18:10:23 +01:00
Marcin Rataj
cd1feb3af4
fix(gateway): correct breadcrumbs on dnslink site 2020-09-25 23:11:53 +02:00
Rafael Ramalho
1b4f5e72ad chore: bump webui version 2020-09-17 15:29:07 -04:00
Marcin Rataj
19ec5f4a51
feat(gateway): Content-Disposition for legacy clients
This adds ASCII-only filename for clients that do not implement RFC 5987

Closes #7648
2020-09-16 22:39:04 +02:00
Marcin Rataj
fd01acdfc0
feat(gateway): ?filename with download=true
This implements 'attachment' mode triggered then
?filename parameter is accompanied with &download=true

When Content-Disposition: attachment is detected by a modern browser
it will skip rendering and immediately open the "save as" dialog,
making this useful feature for using IPFS gateway as target of
"Download" links on various websites.

Parameter name was suggested in:
https://github.com/ipfs/go-ipfs/pull/4177#issuecomment-414870327
2020-09-16 22:15:18 +02:00
Adin Schmahmann
45e574b6bd
Merge pull request #7610 from ipfs/chore/update-deps
chore: update dependencies
2020-08-25 23:14:52 -04:00
Adin Schmahmann
b88bdfeb9d chore: update go-multiaddr and go-multiaddr-net 2020-08-25 15:24:48 -04:00
Adin Schmahmann
bd08c0a4a6
Merge pull request #7550 from trashhalo/dry-up-close
use t.Cleanup() to reduce the need to clean up servers in tests
2020-08-25 12:06:26 -04:00
Kevin Neaton
2feff33235 test: update gateway tests for dir-index-html v1.1.0 2020-08-19 20:31:23 -04:00
Kevin Neaton
044790a838 feat: Directory page UI improvements
These changes are needed to prepare for the Directory page UI improvements
implemented in https://github.com/ipfs/dir-index-html/issues/37.

- update dir-index-html type structs
- emit gateway URL for root links
- emit CID of each directoryItem
- emit size of directory
- emit breadcrumbs
2020-08-19 20:09:35 -04:00
Marcin Rataj
6b6569f3e5
refactor: cleanup/comment
https://github.com/ipfs/go-ipfs/pull/7319#discussion_r472734905

License: MIT
Signed-off-by: Marcin Rataj <lidel@lidel.org>
2020-08-19 15:59:47 +02:00
Marcin Rataj
2ff6f1a80d
test(gateway): IPNS cleanup and implicit defaults fix
This ensures implicit defaults are always present, even when
Gateway.PublicGateways is defined in the config.

User still can disable them, but needs to do it per hostname.

License: MIT
Signed-off-by: Marcin Rataj <lidel@lidel.org>
2020-08-06 14:00:16 +02:00
Michael Muré
13e6bcfb4f
feat: wildcard support for public gateways
Add support for one or more wildcards in the hostname definition
of a public gateway. This is useful for example to support easily
multiples environment.

Wildcarded hostname are set in the config as for example "*.domain.tld".
2020-07-24 20:51:22 +02:00
Rafael Ramalho
e3905e1fdc chore: bump webui version 2020-07-24 12:37:02 -04:00
Stephen Solka
4dbdbe0e02 use t.Cleanup() to reduce the need to clean up servers 2020-07-18 14:47:07 -04:00
Marcin Rataj
231fab811d feat: support ED25519 libp2p-key in subdomains
This:

- adds subdomain gateway support for ED25519 CIDs in a way that fits in
  a single DNS label to enable TLS for every IPNS website.

- cleans up subdomain redirect logic and adds more explicit error
  handling.

TL;DR on router logic:

When CID is longer than 63 characters, router at /ipfs/* and /ipns/*
converts to Base36, and if that does not help, returns a human readable
400 Bad Request error.

Addressing code review:
https://github.com/ipfs/go-ipfs/pull/7441#pullrequestreview-440043209

refactor: use b36 for all libp2p-keys in subdomains
Consensus reached in
https://github.com/ipfs/go-ipfs/pull/7441#discussion_r452372828
https://github.com/ipfs/go-ipfs/pull/7441#discussion_r451477890
https://github.com/ipfs/go-ipfs/pull/7441#discussion_r452500272
2020-07-10 16:25:20 -04:00
Michael Muré
87dfc46e03 feat: support X-Forwarded-Host when doing gateway redirect 2020-07-10 14:13:11 -04:00
Rafael Ramalho
4c38ea748a chore:bump webui version to 2.10.1 2020-06-23 16:28:38 +01:00
Rafael Ramalho
cc4a136360 chore: bump webui version 2020-06-22 17:39:30 +01:00
Steven Allen
84341d0c5a fix: use the correct context when resolving dnsaddr links 2020-06-17 19:44:28 -07:00
Marcin Rataj
5be7e0f8de feat: webui v2.9.0
(cherry picked from commit 0f76ed79f9)
2020-06-02 17:36:30 -07:00
Shotaro Yamada
bd9382fe41 chore: update WebUI to 2.8.0
(cherry picked from commit 58aac04a53)
2020-06-02 17:36:30 -07:00
Peter Rabbitson
2d5f8b4ebe Include the git blob id of the dir-index bundle in the ETag
While the content of raw files retrieved via the gateway should never
change, the look and feel of the directory index can and will change
between versions of go-ipfs.

Incorporate the hash of assets/bindata.go into the ETag when appropriate
2020-05-25 18:42:07 +00:00
Steven Allen
6a2fe0a20d fix: support directory listings even if a 404 page is present
fixes https://github.com/ipfs/go-ipfs/pull/4233#issuecomment-631454543

Basically, there's a trade-off here:

1. We can support directory listings while supporting 404 pages (this PR).
2. If a 404 page is present, directory listings don't work.

Given that option 1 is more flexible and users shouldn't be _too_ confused if
they land on a directory with no index.html page, I've gone with that option.
2020-05-20 19:11:50 -07:00
Peter Wu
d4952f2a73 fix(gateway): ensure directory listings have Content-Type text/html
Files already have an explicit Content-Type set. Be sure to do this for
directory listings as well to avoid a fallback to autodetection in
net/http. That fallback fails when a ResponseWriter is installed that
performs compression.
2020-05-20 15:20:33 +02:00
Peter Wu
7c7888c4db fix(gateway): fix status code for HEAD on redirects
Report a consistent status code for HEAD requests that end up in a
redirect.
2020-05-20 14:03:58 +02:00
JP Hastings-Spital
dfceafdbd3 Gateway renders pretty 404 pages if available
In the same way that an `index.html` file is rendered, if one is present, when the
requested path is a directory, now an `ipfs-404.html` file is rendered if
the requested file is not present within the specified IPFS object.

`ipfs-404.html` files are looked for in the directory of the requested path and each
parent until one is found, falling back on the well-known 404 error message.

License: MIT
Signed-off-by: JP Hastings-Spital <jphastings@gmail.com>
2020-05-19 14:41:21 -07:00
Gowtham G
e93f2002f5 optimize import order 2020-05-02 14:19:01 +05:30
Gowtham G
214d29ebf8 #7252 - print error message 2020-05-01 22:37:20 +05:30
Gowtham G
9201b1dde6 #7252 - read content directly instead of sending 512bytes 2020-05-01 20:29:32 +05:30
Gowtham G
2e87ac88a3 Fixes #7252 - Uses gabriel-vasile/mimetype to support additional content types 2020-05-01 12:19:36 +05:30
Steven Allen
46ae021733 feat: show the absolute path every time
Even for dnslink websites.

fixes https://github.com/ipfs/go-ipfs/issues/7205
2020-04-26 17:19:17 -07:00
Steven Allen
d8bc5c991e feat: always show the hash
Previously, we only showed this /ipns paths. However, knowing the hash of the
current directory is useful regardless.
2020-04-26 16:09:02 -07:00
Dimitris Apostolou
1e437c7e97
Fix typos and cleanup 2020-04-20 22:00:01 +03:00
Henrique Dias
135c451997
feat: webui 2.7.5 2020-04-17 20:10:21 +01:00
Marcin Rataj
8290ec11c3
fix: subdomain redirect for dir CIDs
Closes #7164

License: MIT
Signed-off-by: Marcin Rataj <lidel@lidel.org>
2020-04-15 23:50:53 +02:00
Marcin Rataj
7d397ac219
feat: webui v2.7.4
(supersedes v2.7.3)

License: MIT
Signed-off-by: Marcin Rataj <lidel@lidel.org>
2020-04-14 17:51:25 +02:00
Hector Sanjuan
7340543615 corehttp: Gateway handler: add Allow headers when returning MethodNotAllowed
Spec says that response with 405 must set Allow headers.
2020-04-05 09:57:57 +02:00
Hector Sanjuan
1b490476e5 HTTP API: Disallow GET requests on API
This commit upgrades go-ipfs-cmds and configures the commands HTTP API Handler
to only allow POST/OPTIONS, disallowing GET and others in the handling of
command requests in the IPFS HTTP API (where before every type of request
method was handled, with GET/POST/PUT/PATCH being equivalent).

The Read-Only commands that the HTTP API attaches to the gateway endpoint will
additional handled GET as they did before (but stop handling PUT,DELETEs).

By limiting the request types we address the possibility that a website
accessed by a browser abuses the IPFS API by issuing GET requests to it which
have no Origin or Referrer set, and are thus bypass CORS and CSRF protections.

This is a breaking change for clients that relay on GET requests against the
HTTP endpoint (usually :5001). Applications integrating on top of the
gateway-read-only API should still work (including cross-domain access).

Co-Authored-By: Steven Allen <steven@stebalien.com>
Co-Authored-By: Marcin Rataj <lidel@lidel.org>
2020-04-05 09:57:57 +02:00
Marcin Rataj
f9567a0a0f fix(gateway): curl without redirect on localhost
When request is sent to http://localhost:8080/ipfs/$cid response has
HTTP 301 status code and "Location" header with redirect destination at
$cid.ipfs.localhost:8080

Redirect is followed by browsersi, but not by commandline tools.
Status 301 is ignored by curl in default mode: it will print response
and won't follow redirect, user needs to add -L for that.

To fix curl, we return correct payload in body of HTTP 301 response,
but set Clear-Site-Data header to ensure Origin sandbox can't be abused.

This requires a surgical workaround:
If Location header is present in ResponseWriter's Header map,
we ensure http.ServeContent() returns HTTP 301

Context: https://github.com/ipfs/go-ipfs/pull/6982

License: MIT
Signed-off-by: Marcin Rataj <lidel@lidel.org>
2020-03-18 08:50:40 -07:00
Marcin Rataj
3ecccd6e1d feat(gateway): subdomain and proxy gateway
License: MIT
Signed-off-by: Marcin Rataj <lidel@lidel.org>
2020-03-18 08:50:38 -07:00
Steven Allen
72490f7ed0 gateway: simplify/improve dnslink rewrite handling
Instead of adding a new fake header (that could be spoofed by the client...),
just read the original request URI from the request object.

This also removes support for suborigins. They have never been implemented in
browsers and it looks like efforts have stalled. We can add support back if we
need it but, well, maintaining support was going to be more trouble than it was
worth.

License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2020-03-17 19:34:44 -07:00
Steven Allen
11c229bb14 rename ProxyOption to P2PProxyOption
(we're implementing an _actual_ proxy)

License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2020-03-17 19:34:44 -07:00
Steven Allen
906f45edd9 fix(tracing): remove event tracing
We've deprecated this system and have yet to move to a new system. We might as
well remove everything, switch to a new system, then deliberately trace the
entire system.
2020-01-28 21:31:12 -08:00
Steven Allen
a53d48059b fix: migrate from deprecated warning function 2020-01-28 21:20:21 -08:00
Steven Allen
725e6844ee gateway: cleanup logic
License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2020-01-10 10:19:13 +01:00
Steven Allen
5eea0a4ba0 http: use Method* constants
License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2020-01-10 10:19:08 +01:00
Steven Allen
c64eb11992 test(gateway): test the lazy seeker 2020-01-05 16:43:45 -08:00
Steven Allen
6cb03d4dfd fix(gateway): fix seek read length typo 2020-01-05 16:43:45 -08:00
Steven Allen
453b78962b chore(gateway): remove dead code 2020-01-05 16:43:45 -08:00
Steven Allen
1a06fb6e2f fix(gateway): correct symlink content type
We should be _resolving_ symlinks (sometimes, still need to figure out when to
do this WRT IPNS). However, that's a larger feature.
2020-01-05 16:43:44 -08:00
Steven Allen
3859f08bf7 fix(gateway): better seeking/sized
1. Require files to have known sizes. We can add support for unknown sizes
_later_ but we can't use ServeContent for those files.
2. Replace the `sizeReadSeeker` with a `lazySeeker`. This one makes no
assumptions about how it's used so we're less likely to run into weird bugs.
2020-01-05 16:43:44 -08:00
Steven Allen
e8a6c0c050 fix(gateway): gracefully handle files with unknown sizes in directory listings 2020-01-05 16:43:44 -08:00
Steven Allen
62451039ec fix(gateway): serve the index with serveFile 2020-01-05 16:43:44 -08:00
Marcin Rataj
115b2ba6cd
fix: limit SW registration to content root
Introduces hardening proposed in:
https://github.com/ipfs/go-ipfs/issues/4025#issuecomment-342250616

License: MIT
Signed-off-by: Marcin Rataj <lidel@lidel.org>
2019-12-17 02:20:40 +01:00
Henrique Dias
5ab7a70131
feat: web ui 2.7.2 2019-12-04 08:15:58 +00:00
Steven Allen
c19bc362f5
Merge pull request #6743 from dreamski21/fix/gateway/content-type-header
fix #2203: omit the charset attribute when Content-Type is text/html
2019-12-02 14:13:57 -05:00
Henrique Dias
f4a4baccee
feat: web ui 2.7.1 2019-11-12 23:37:40 +00:00
Steven Allen
7ae6f6fa3e chore(gateway): document encoding fix 2019-11-06 11:47:27 +00:00
Steven Allen
69f6e08d9d chore(gateway): remove redundant seek 2019-11-06 11:45:41 +00:00
Steven Allen
a12d2e265e chore(gateway): fix error call 2019-11-06 11:44:56 +00:00
Steven Allen
ebf2e7da36 chore(gateway): fix import ordering 2019-11-06 11:44:32 +00:00
Djalil Dreamski
a29a9dbb98
gateway: ServeFile: use file extension to determine Content-Type
License: MIT
Signed-off-by: Abdeldjalil Hebal <dreamski21@gmail.com>
2019-11-06 01:52:49 +01:00
Djalil Dreamski
69f81a11dd
Update gateway_handler.go 2019-11-05 17:36:26 +01:00
Djalil Dreamski
aefff48654
fix #2203: omit the charset attribute when Content-Type is text/html
License: MIT
Signed-off-by: Abdeldjalil Hebal <dreamski21@gmail.com>
2019-11-02 21:56:54 +01:00
Henrique Dias
29d6d7e3cd
feat: web ui 2.6.0
See https://github.com/ipfs-shipyard/ipfs-webui/releases/tag/v2.6.0.
2019-10-30 17:50:29 +00:00
Steven Allen
4a102207a3
Merge pull request #6643 from ipfs/fix/provide-prometheus-namespace
ipfs namespace is now being provided to prometheus
2019-10-22 20:38:00 -07:00
Adrian Lanzafame
48f25d9ed7
pass opts.Namespace along like before 2019-10-23 10:46:11 +10:00
Henrique Dias
f3f3899a68
Update webui.go 2019-10-21 20:24:15 +01:00
Henrique Dias
a1854101c0
feat: web ui 2.5.8 2019-10-21 08:31:33 +01:00
Henrique Dias
bb59c24947
feat: web ui 2.5.7
Relevant release notes can be found on [v2.5.5](https://github.com/ipfs-shipyard/ipfs-webui/releases/tag/v2.5.5).
2019-10-08 08:33:58 +01:00
Steven Allen
853ed0be5d chore: fix deprecation warnings 2019-09-26 15:38:12 -07:00
Henrique Dias
36acc402aa
feat: web ui 2.5.4 2019-09-23 15:44:21 +01:00
Adrian Lanzafame
03017cb201
ipfs namespace is now being provided to prometheus 2019-09-15 11:08:19 +10:00
Henrique Dias
7c6ba8f724
feat: webui 2.5.3
Superseeds #6635.
2019-09-12 23:09:43 +01:00
Henrique Dias
de87c3aa45
feat: web ui 2.5.1 2019-09-06 09:04:21 +01:00
Henrique Dias
b0f496e79f
feat: web ui 2.5.0 2019-08-13 15:20:13 +01:00
Steven Allen
521a29956b fix and improve the writable gateway
1. Fix handling of PUT. The simple implementation was the correct
   implementation, I have no idea what was going on here.
2. Use MFS everywhere to reduce code duplication and add support for sharded
   directories.
3. _Correctly_ block IPNS.
4. Remove the dependency on `core.IpfsNode`.
5. Remove support for putting empty directories with a well-known CID. It was
   useless as directories are automatically created.
2019-07-25 19:22:56 -07:00
Hector Sanjuan
98a508fdd1 Deps: update go-libp2p-http to its new libp2p location
License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2019-06-08 00:51:18 +02:00
Steven Allen
d460150f43 gateway: label get requests latency with the path namespace 2019-06-04 17:47:08 -07:00