A tool for checking the accessibility of your data by IPFS peers

ipfs-check

Check if you can find your content on IPFS

A tool for checking the accessibility of your data by IPFS peers

Documentation

Build

go build will build the server binary in your local directory

Install

go install will build and install the server binary in your global Go binary directory (e.g. ~/go/bin)

Deploy

There's an HTML file in web that interacts with the Go HTTP server that can be deployed however you deploy HTML files. Maybe just deploy it on IPFS and reference it with DNSLink.

For anything other than local testing you're going to want to have a proxy to give you HTTPS support on the Go server.

License

SPDX-License-Identifier: Apache-2.0 OR MIT

Comments
  • Get a sweet subdomain on ipfs.{io,network}

    Get a sweet subdomain on ipfs.{io,network}

    • How about publising this at https://check.ipfs.network ?
    • How about setting the url on this repo so i don't have to keep digging it out of my memory banks?
  • How to use IPFS check with a local IPFS node

    How to use IPFS check with a local IPFS node

    It would be useful if IPFS Check had some instructions and a link to a docs page about how to find your multiadder via the webUI as an individual running a local IPFS node (ex via IPFS Desktop).

    How to:

    1. Open IPFS WebUI "Status" page via IPFS Desktop drop down or by visiting "http://127.0.0.1:5001/ipfs/bafybeihcyruaeza7uyjd6ugicbcrqumejf6uf353e5etdkhotqffwtguva/#/" (with default config settings)
    2. Click the "Advanced" drop down to see more detailed node settings
    3. Choose the top entry in your list of "Addresses" (these are the various multiaddrs via which your node is addressable)
    4. Insert this address into the "multiaddr" text box
  • fix: add form validation and mobile friendly scaling

    fix: add form validation and mobile friendly scaling

    • set all fields to required
    • use placeholder instead of value to show example inputs
    • add viewport meta tag to ensure mobile devices use the responsive styles rather than scaling the entire page.
    Screenshot 2021-09-23 at 11 47 11

    License: (Apache-2.0 AND MIT) Signed-off-by: Oli Evans [email protected]

  • Loop through found addrs manually & insert newlines

    Loop through found addrs manually & insert newlines

    After using a pinning service in addition to my local node - I got back many found peers (but not the local node I was checking) in my ipfs-check output - which didn't wrap nicely onto newlines when using the Object.keys() output.

    Before: image

    After: image

    (warning - not a js dev - please double check my syntax!)

  • fix: a typo

    fix: a typo

    @aschmahmann this PR fixes a typo and adds a canonical link to ensure the website gets deduplicated across all gateway search results and placed under a canonical URL.

  • make website more user-friendly

    make website more user-friendly

    This adds an instructions section (copied from your message in slack) to the website.

    While I was here, also added:

    • Some formatting tweaks to form fields
    • Link to Github repo
  • feat: encode formdata in url query for much share

    feat: encode formdata in url query for much share

    • allow users to share their params by encoding them in the query. I've been sharing screenshots like an animal up till now.
    • hide optional fields. few understand.
    • disable submit button while work is happening
    • rewrite the frontend to use contemporary js™️

    See it on IPFS! Watch the values prefill! https://bafybeifpup7ecbo7x4eclndh4mgf54p4zd4p4quiotgfqwolrfn5yedmbi.ipfs.dweb.link/?cid=bafkreif34ryzti67dxguo23fxbikbqv4ywetshpfi7a5g2s35vblqtbocm&multiaddr=%2Fp2p%2F12D3KooWSafoW6yrSL7waghFAaiCqGy5mdjpQx4jn4CRNqbG7eqG

    Share URL demo ipfs-check-share-url

    License: (Apache-2.0 AND MIT) Signed-off-by: Oli Evans [email protected]

  • Add GitHub Action to publish the binary to GitHub releases

    Add GitHub Action to publish the binary to GitHub releases

    This will create a new GitHub Release each time you merge to main. It will also tag the commit as latest because it seems that you have to have a tag when you release. We can work on it if you want other things (such as creating a new release for every branch or for every PR).

  • Query by peerID rather than full multiaddr

    Query by peerID rather than full multiaddr

    Fixes #13

    This PR makes it so users can query by peerID rather than full multiaddr and will use the DHT to resolve the peerID -> addresses mappings.

    • Advantages:
      • Users don't need to know about various address types (localhost, private network, public networks)
      • PeerID is easier to access in various UX flows, and is stable over time
    • Disadvantages:
      • It uses the DHT behind the scenes which obscures some of the debugging from users if they're running into particular issues
        • In particular it hides the surfacing of issues like which transports work properly if that's causing problems
      • It requires the node to be a DHT client which may not be true for all nodes, especially if/when new content routing mechanisms are added to IPFS Check.

    Overall since this behavior is optional it seems like a nice UX improvement though.

    cc @guseggert @TheDiscordian

  • Allow for testing using a peerID

    Allow for testing using a peerID

    As in noted in https://github.com/aschmahmann/ipfs-check/issues/9#issuecomment-1004171075, it's not great that users need to figure out which of the variety of addresses their node supports they should be putting into IPFS Check.

    If we could let people specify /p2p/YourPeerID and use the DHT to do the lookup that could make this much easier. This will likely require some rewording of the error messages and returned values on the front-end for things to continue to make sense for users though.

  • Update go-libp2p and redeploy

    Update go-libp2p and redeploy

    go-libp2p has been updated and resolved a number of issues around WSS as well as Circuit Relay v2 usage (e.g. not getting issues with trying to use transient connections for non-DCuTR data like Bitswap requests). This repo needs to be correspondingly updated and the backend redeployed.

  • Call out the benefits of browser-compatible transports

    Call out the benefits of browser-compatible transports

    When listing addresses for peers we should explicitly check if they have advertised browser-compatible transport addresses (WSS, WebTransport, WebRTC) and if they are reachable. May want to link to https://connectivity.libp2p.io/

    Supporting WSS/WebTransport/WebRTC addresses means that nodes in more limited environments, in particular browser nodes, will be able to fetch data directly from you rather than requiring some other node to proxy requests for them and slow things down in the process. While these protocols generally have more performant alternatives, for example WSS is not the most performant protocol (e.g. libp2p's usage of WS is more efficient than WSS) it can be important to have it exposed. WebTransport and WebRTC should make this even easier for people who don't have the domain names needed for WSS support.

    Pieces required to make this happen:

    • Try explicitly dialing WSS/WebTransport/WebRTC addresses from the internal go-libp2p node if they are available rather than other addresses
      • We could also try all the addresses and report back which ones are reachable vs not
      • Requires an update of go-libp2p in order for these dials to work at all (#26)
    • Front end processing and text to signal to the end user that it's fine if they don't support these protocols but that they should if they can
      • Pointer to instructions for how they can do so (e.g. a WSS listener or a WS listener with some TLS termination endpoint in front, enabling WebTransport, etc.)
  • Port features from pl-diagnose

    Port features from pl-diagnose

    We implemented pl-diagnose during launchpad as a "ipfs-check but easier to use", We want to merge its features back into ipfs-check.

    https://github.com/laurentsenta/pl-diagnose

    API endpoints:

    https://github.com/laurentsenta/pl-diagnose/blob/32be4cf13db63da02a5f626215f849c60f80a1b2/backend/main.go#L31-L49

    • [ ] /find?cid={cid}: Find a piece of content in the DHT
    • [ ] /find-peer?addr={peer-multiaddress}: Find a peer in the DHT
    • [ ] /identify?addr={peer-multiaddress}: Dial into the peer and use the identify protocol
    • [ ] /bitswap?addr={peer-multiaddress}&cid={cid}: Dial into the peer and try getting the content identified by the cid

    Outputs & Implementations can be found in the daemon file.

    UI / UX

    Not sure what we want to do with the frontend. It made sense to use something familiar during launchpad, a few things probably worth saving:

    • [ ] pl-diagnose is literally "ipfs-check but with smaller steps",
      • we try our best to test only 1 thing per step so that if something goes wrong, it's easier to tell why and how to fix it.
    • [ ] There is a link ❓ Need help with this result? Ask for help on github that generates an issue for the user.
      • I think that's the killer feature, we're targeting beginners, and as a user, there's always one clear path to fix my issue. as a developer, I get an issue I can use to improve the app.
      • Example: https://github.com/laurentsenta/pl-diagnose/issues/6
    • [ ] Parameters are stored in the URI, easy to share,
    • [ ] We hoped to create a single location to share pl's diagnostics-related tools and made sure there's an easy way to contribute (https://pl-diagnose.on.fleek.co/#/toolbox)
  • Allow for testing using only a CID

    Allow for testing using only a CID

    ipfs-check currently requires that the user knows who has their data, which generally seems like a good thing in terms of raising awareness of "IPFS is not a magic data box of free cloud storage, it just helps you find who has your stuff".

    However, if a user clicks a link ipfs.io/ipfs/QmFooBar on some website they have no way of knowing the PeerID that is supposed to have their data this means that the user who clicks the link might experience "IPFS doesn't work" rather than "I better tell website.tld that their link is busted".

    Perhaps just giving a CID could trigger the following:

    1. Check the DHT for any providers, if none then error
    2. Check each of the providers to see if they are dialable and Bitswap thinks they have the data

    Users could then see feedback like:

    • Data is not advertised in the DHT
    • X/Y providers are reachable
    • X/Y dialable providers responded saying they had the data

    The error help text could also be reoriented from speaking to a user trying to make data available via IPFS (e.g. Peer has not responded that it has the CID. Your node does not think it has the data you think it does, or it took too long to respond. Until this is resolved other machines will be unable to download that content from you.) to the perspective of a user trying to find data (e.g. Peer has not responded that it has the CID. The providing nodes do not think they have the data you think they do, or they took too long to respond. Until this is resolved other machines will be unable to download that content from them. Reach out to the content providers for to let them know their service is experiencing issues.)

Related tags
Ipfs-retriever - An application that retrieves files from IPFS network

ipfs-retriever This is an application that retrieves files from IPFS network. It

Jan 5, 2022
An anonymous, encrypted Point-to-Point (Layer 3) tunnel between two peers.

NKN-Link An anonymous, encrypted Point-to-Point (Layer 3) tunnel between two peers. NKN-Link Table of Contents Preface Description Install Setup Run P

Dec 20, 2022
An IPFS bytes exchange for caching and retrieving data from Filecoin

?? go-hop-exchange An IPFS bytes exchange to allow any IPFS node to become a Filecoin retrieval provider and retrieve content from Filecoin Highlights

Aug 25, 2022
PinGo is a standalone and feature-rich tool for common IP-based reachability checking tasks. Ping or Trace and Observe in real-time the statistics.

pingo As a network champion from designing and implementing to troubleshooting large scale networks - I know that is usually not easy for administrato

Sep 26, 2022
A tool for capturing newly issued x.509 from Certificate Transparency logs & performing periodic revocation checking.

ct-logster This repository contains the tools for collecting newly issued x509 certificates from Certificate Transparency logs, as well as performing

May 4, 2022
A simple, standalone, and lightWeight tool that can do health/status checking, written in Go.
A simple, standalone, and lightWeight tool that can do health/status checking, written in Go.

EaseProbe EaseProbe is a simple, standalone, and lightWeight tool that can do health/status checking, written in Go. Table of Contents EaseProbe 1. Ov

Dec 24, 2022
Go-aspell - GNU Aspell spell checking library bindings for golang

Aspell library bindings for Go GNU Aspell is a spell checking tool written in C/

Nov 14, 2022
IPFS implementation in Go
IPFS implementation in Go

go-ipfs What is IPFS? IPFS is a global, versioned, peer-to-peer filesystem. It combines good ideas from previous systems such as Git, BitTorrent, Kade

Jan 9, 2023
Deece is an open, collaborative, and decentralised search mechanism for IPFS
Deece is an open, collaborative, and decentralised search mechanism for IPFS

Deece Deece is an open, collaborative, and decentralised search mechanism for IPFS. Any node running the client is able to crawl content on IPFS and a

Oct 29, 2022
🌐 (Web 3.0) Pastebin built on IPFS, securely served by Distributed Web and Edge Network.
🌐 (Web 3.0) Pastebin built on IPFS, securely served by Distributed Web and Edge Network.

pastebin-ipfs 简体中文 (IPFS Archivists) Still in development, Pull Requests are welcomed. Pastebin built on IPFS, securely served by Distributed Web and

Jan 1, 2023
A standalone ipfs gateway

rainbow Because ipfs should just work like unicorns and rainbows Building go build Running rainbow Configuration NAME: rainbow - a standalone ipf

Nov 9, 2022
A minimal IPFS replacement for P2P IPLD apps

IPFS-Nucleus IPFS-Nucleus is a minimal block daemon for IPLD based services. You could call it an IPLDaemon. It implements the following http api call

Jan 4, 2023
Technical specifications for the IPFS protocol stack
Technical specifications for the IPFS protocol stack

IPFS Specifications This repository contains the specs for the IPFS Protocol and associated subsystems. Understanding the meaning of the spec badges a

Jan 7, 2023
Generates file.key file for IPFS Private Network.

ipfs-keygen Generates file.key file for IPFS Private Network. Installation go get -u github.com/reixmor/ipfs-keygen/ipfs-keygen Usage ipfs-keygen > ~/

Jan 18, 2022
Go-ipfs-pinner - The pinner system is responsible for keeping track of which objects a user wants to keep stored locally

go-ipfs-pinner Background The pinner system is responsible for keeping track of

Jan 18, 2022
Traefik config validator: a CLI tool to (syntactically) validate your Traefik configuration filesTraefik config validator: a CLI tool to (syntactically) validate your Traefik configuration files
Traefik config validator: a CLI tool to (syntactically) validate your Traefik configuration filesTraefik config validator: a CLI tool to (syntactically) validate your Traefik configuration files

Traefik Config Validator Note This is currently pre-release software. traefik-config-validator is a CLI tool to (syntactically) validate your Traefik

Dec 16, 2021
Send email and SMS broadcasts to your contacts. SMS are sent via your Android phone connected to your PC.

Polysender Send email and SMS broadcasts to your contacts. Polysender is a desktop application, so it does not require a complicated server setup. Ema

Aug 11, 2022
Simple application in Golang that retrieves your ip and updates your DNS entries automatically each time your IP changes.

DNS-Updater Simple application in Golang that retrieves your ip and updates your DNS entries automatically each time your IP changes. Motivation Havin

Mar 10, 2022