Go to file
Netscape Navigator 05022b7306 Remove Lipmaaa references 2020-11-08 15:34:29 -06:00
fixtures Remove Lipmaaa references 2020-11-08 15:34:29 -06:00
project Remove Lipmaaa references 2020-11-08 15:34:29 -06:00
targets Added vet and fmt 2020-10-21 20:52:11 -04:00
.gitignore Added vet and fmt 2020-10-21 20:52:11 -04:00
LICENSE Hello, world! 2020-08-02 13:59:32 -05:00
Makefile Trim extra line 2020-10-22 13:57:16 -04:00
README.md Remove Lipmaaa references 2020-11-08 15:34:29 -06:00
build.sh Start moving stuff into `/testdata` 2020-10-04 15:19:28 -05:00
coverage.sh Begin building message parser 2020-10-05 08:07:43 -05:00
tests.sh Begin building message parser 2020-10-05 08:07:43 -05:00

README.md

Pigeon CLI

A single executable to manage a Pigeon node.

Project Status

Don't use the Go version yet. If you want something stable, there is a Ruby version that is feature complete.

Setup

By default, data is stored in ~/.pigeon. You can override this value by specifying a PIGEON_PATH ENV var.

Help Wanted

Want to get involved? Below are a few things I need help with.

Email contact@vaporsoft.xyz if you have any questions.

  • Writing a BNF grammar for message parsing
  • Test coverage increases
  • Manual QA of features and edge cases
  • Providing constructive feedback on documentation
  • Cross-compiling windows binaries
  • Security auditing and vulnerability discovery. Please send security concerns to contact@vaporsoft.xyz privately.

TODO

  • Add forgery protection tests
  • Add a real testing lib to DRY things up.
  • Validate and scrutinize depth, prev fields when ingesting message bundles to account for poorly written peer clients.
  • Get a good CI system going? Run tests at PR time, provide prebuilt binaries, prevent coverage slips, etc..
  • Add a transact() helper to ensure all transactions are closed out.
  • Switch to SQLX for extra sanity.
  • Write docs for all CLI commands / args AFTER completion.
  • Start using the check helper instead of error != nil.
  • Update spec to only allow UPPERCASE MULTIHASHES
  • Implement query.pgn protocol, as outlined here and here.
  • Add a note about "shallow" vs. "deep" verification.
  • Finish all the things below

Protocol Changes?

  • Just ditch lipmaa altogether in the name of time?
  • Don't enforce a structure on how blobs are packed into bundles- the client is forced to determine the SHA checksum regardless. Forced structure just complicates protocol design.
  • Mandate usage of ZIP files so that bundles are always a single file?
Done? Noun Verb Flag / arg 1 Flag 2
bundle ingest
message show message mhash
message find --all
blob remove mhash
message find --last
draft create
draft publish
draft show
draft update --key=? --value=?
bundle create
X blob find
X blob add file path
X blob add STDIO pipe
X peer untrack peer mhash
X peers list
X peer block peer mhash
X peer follow peer mhash
X identity show
X identity create
X help
X version

Run Tests

Without coverage:

./tests.sh

With coverage:

./coverage.sh

Build Project

./build.sh