User-visible changes in "magic-wormhole":
wormhole send /dev/fd0 can send the
contents of the named block device (USB stick, SD card, floppy, etc),
resulting in a plain file on the other side. (#323)--verify long enough to send the verifier. This
fixes a bug when both sides use --verify, the receiver uses
tab-completion, the sender sees the verifier and waits for the user to
confirm, but the receiver cannot show the verifier (enabling that
confirmation) until the sender approves the transfer. (#349)This release also includes an incomplete implementation of the new "Dilation" API (see ticket #312 for details). In the future this will enable restarting interrupted transfers, tolerating changes in network address, bidirectional transfers in a long-running GUI/daemon process, and more. The protocol is not finalized, nor is it backward compatible with the old "Transit" protocol yet, so there is no CLI access so far. The code is present and tested to make sure it doesn't regress and for ease of development, but intrepid folks who want to try it out will need to write a client first (and be aware that the protocol may change out from under them). A future release will add compatibility negotiation with old clients and start using the new protocol.
PRs and tickets addressed in this release: #144 #312 #318 #321 #323 #327 #330 #331 #332 #339 #349 #361 #365 #368 #367 #378 #379.
Thanks to the many contributors of bugs, patches, and other help with this release:
Rerelease to fix the long description on PyPI. Thanks to Marius Gedminas for tracking down the problem and providing the fix. (#316)
python -m wormhole on py2. (#315)Thanks to Marius Gedminas, FreddieHo, and Jakub Wilk for patches and bug reports in this release.
Packaging changes:
magic-wormhole-mailbox-server. We still import it for
tests. Use pip install magic-wormhole-mailbox-server to run
your own server. (#240)Thanks to Andreas Baeumla Bäuml, Marius
mgedmin Gedminas, Ofek ofek Lev, Thomas
ThomasWaldmann Waldmann, and Vasudev copyninja
Kamath for patches and bug reports in this release.
Minor client changes:
$WORMHOLE_RELAY_URL and
$WORMHOLE_TRANSIT_HELPER environment variables, in addition
to command-line arguments (#256)send output format to make copy-paste easier
(#266, #267)We also moved the docs to readthedocs (https://magic-wormhole.readthedocs.io/), rather than pointing folks at the GitHub rendered markdown files. This should encourage us to write more instructional text in the future.
Finally, we removed the Transit Relay server code from the
magic-wormhole package and repository. It now lives in a
separate repository named magic-wormhole-transit-relay, and
we only import it for tests. If you'd like to run a transit relay,
you'll want to use
pip install magic-wormhole-transit-relay.
Thanks to meejah, Jonathan "jml" Lange, Alex Gaynor, David "dharrigan" Harrigan, and Jaye "jtdoepke" Doepke, for patches and bug reports in this release.
Minor client changes:
wormhole help should behave like
wormhole --help (#61)Server changes:
wormhole-server start adds
--relay-database-path and --stats-json-path
(#186)--websocket-protocol-option= (#196, #197)In addition, the snapcraft packaging was updated (#202), and
setup.py now properly marks the dependency on
attrs (#248).
Thanks to cclauss, Buckaroo9, JP Calderone, Pablo Oliveira, Leo Arias, Johan Lindskogen, lanzelot1989, CottonEaster, Chandan Rai, Jaakko Luttinen, Alex Gaynor, and Quentin Hibon for patches and bug reports fixed in this release.
WebSocket connection errors are now reported properly. Previous
versions crashed with an unhelpful
automat._core.NoTransition exception when the TCP
connection was established but WebSocket negotiation could not complete
(e.g. the URL path was incorrect and the server reported a 404, or we
connected to an SMTP or other non-HTTP server). (#180)
The unit test suite should now pass: a CLI-version advertisement issue caused the 0.10.1 release tests to fail.
Thanks to Fabien "fdev31" Devaux for bug reports addressed in this release.
Server-only: the rendezvous server no longer advertises a CLI version
unless specifically requested (by passing --advertise-version= to
wormhole-server start). The public server no longer does
this, so e.g. 0.10.0 clients will not emit a warning about the server
recommending the 0.9.2 release. This feature was useful when the only
way to use magic-wormhole was to install the CLI tool with pip, however
now that 0.9.1 is in debian Stretch (and we hope to maintain
compatibility with it), the nag-you-to-upgrade messages probably do more
harm than good. (#179)
No user-visible client-side changes.
Thanks to ilovezfs and JP Calderone for bug reports addressed in this release.
The client-side code was completely rewritten, with proper Automat state machines. The only immediately user-visible consequence is that restarting the rendezvous server no longer terminates all waiting clients, so server upgrades won't be quite so traumatic. In the future, this will also support "Journaled Mode" (see docs/journal.md for details). (#42, #68)
The programmatic API has changed (see docs/api.md). Stability is not promised until we reach 1.0, but this should be close, at least for the non-Transit portions.
wormhole send DIRECTORY can now handle larger (>2GB)
directories. However the entire zipfile is built in-RAM before
transmission, so the maximum size is still limited by available memory
(follow #58 for progress on fixing this). (#138)
wormhole rx --output-file= for a pre-existing file will
now overwrite the file (noisily), instead of terminating with an error.
(#73)
We now test on py3.6. Support for py3.3 was dropped. Magic-wormhole should now work on NetBSD. (#158)
Added a Dockerfile to build a rendezvous/transit-relay server. (#149)
wormhole-server --disallow-list instructs the rendezvous
server to not honor "list nameplates" requests, effectively disabling
tab-completion of the initial numeric portion of the wormhole code, but
also making DoS attacks slightly easier to detect. (#53, #150)
wormhole send --ignore-unsendable-files will skip things
that cannot be sent (mostly dangling symlinks and files for which you do
not have read permission, but possibly also unix-domain sockets, device
nodes, and pipes). (#112, #161)
txtorcon is now required by default, so the
magic-wormhole[tor] "extra" was removed, and a simple
pip install magic-wormhole should provide tor-based
transport as long as Tor itself is available. Also, Tor works on py3
now. (#136, #174)
python -m wormhole is an alternative way to run the CLI
tool. (#159)
wormhole send might handle non-ascii (unicode) filenames
better now. (#157)
Thanks to Alex Gaynor, Atul Varma, dkg, JP Calderone, Kenneth Reitz, Kurt Rose, maxalbert, meejah, midnightmagic, Robert Foss, Shannon Mulloy, and Shirley Kotian, for patches and bug reports in this release cycle. A special thanks to Glyph, Mark Williams, and the whole #twisted crew at PyCon for help with the transition to Automat.
Tor support was rewritten. wormhole send,
wormhole receive, wormhole ssh invite, and
wormhole ssh accept all now accept three Tor-related
arguments:
--tor: use Tor for all connections, and hide all IP
addresses--launch-tor: launch a new Tor process instead of using
an existing one--tor-control-port=: use a specific control port,
instead of using the defaultIf Tor is already running on your system (either as an OS-installed
package, or because the TorBrowser
application is running), simply adding --tor should be
sufficient. If Tor is installed but not running, you may need to use
both, e.g. wormhole send --tor --launch-tor. See
docs/tor.md for more details. Note that Tor support must be requested at
install time (with pip install magic-wormhole[tor]), and
only works on python2.7 (not py3). (#64, #97)
The relay and transit URLs were changed to point at the project's official domain name (magic-wormhole.io). The servers themselves are identical (only the domain name changed, not the IP address), so this release is fully compatible with previous releases.
A packaging file for "snapcraft.io" is now included. (#131)
wormhole receive now reminds you that tab-completion is
available, if you didn't use the Tab key while entering the code.
(#15)
wormhole receive should work on cygwin now (a problem
with the readline-completion library caused a failure on previous
releases). (#111)
Thanks to Atul Varma, Leo Arias, Daniel Kahn Gillmor, Christopher Wood, Kostin Anagnostopoulos, Martin Falatic, and Joey Hess for patches and bug reports in this cycle.
The wormhole client's --transit-helper=
argument can now include a "relay priority" via a numerical
priority= field, e.g.
--transit-helper tcp:example.org:12345:priority=2.5.
Clients exchange transit relay suggestions, then try to use the
highest-priority relay first, falling back to others after a few seconds
if necessary. Direct connections are always preferred to a relay.
Clients running 0.9.0 or earlier will ignore priorities, and unmarked
relay arguments have an implicit priority of 0. (#103)
Other changes:
Thanks to xloem, kneufeld, and meejah for their help this cycle.
This release fixes an important "Transit Relay" bug that would have
prevented future versions from using non-default relay servers. It is
now easier to run wormhole as a subprocess beneath some
other program (the long term goal is to provide a nice API, but even
with one, there will be programs written in languages without Wormhole
bindings that may find it most convenient to use a subprocess).
--transit-helper=: Older versions had a bug that
broke file/directory transfers when the two sides offered different
transit-relay servers. This was fixed by deduplicating relay hints and
adding a new kind of relay handshake. Clients running 0.9.0 or higher
now require a transit-relay server running 0.9.0 or higher. (#115)wormhole receive: reject transfers when the target does
not appear to have enough space (not available on windows) (#91)--appid= so wrapping scripts can use a distinct
value (#113)wormhole send: flush output after displaying code, for
use in scripts (#108)Many thanks to patch submitters for this release: Joey Hess, Jared Anderson, Antoine Beaupré, and to everyone testing and filing issues on Github.
~/.ssh/id_*.pub key
into a suitably-permissioned remote ~/.ssh/authorized_keys
file. These commands are experimental: the syntax might be changed in
the future, or they might be removed altogether.Twisted[tls], which
will cause pyOpenSSL and the cryptography package to be
installed. This should prevent a warning about the "service_identity"
module not being available.Thanks to everyone who submitted patches in this release cycle: anarcat, Ofekmeister, Tom Lowenthal, meejah, dreid, and dkg. And thanks to the many bug reporters on Github!
This release contains mostly minor changes.
The most noticeable is that long-lived wormholes should be more
reliable now. Previously, if you run wormhole send but your
peer doesn't run their receive for several hours, a
NAT/firewall box on either side could stop forwarding traffic for the
idle connection (without sending a FIN or RST to properly close the
socket), causing both sides to hang forever and never actually connect.
Now both sides send periodic keep-alive messages to prevent this.
In addition, by switching to "Click" for argument parsing, we now
have short command aliases: wormhole tx does the same thing
as wormhole send, and wormhole rx is an
easier-to-spell equivalent of wormhole receive.
Other changes:
wormhole send --verify) rather than on the "wormhole"
command (old: wormhole --verify send). Four arguments
remain on the "wormhole" command: --relay-url=,
--transit-helper=, --dump-timing=, and
--version.Many thanks to the folks who contributed to this release, during the PyCon sprints and afterwards: higs4281, laharah, Chris Wolfe, meejah, wsanchez, Kurt Neufeld, and Francois Marier.
This release is completely incompatible with the previous 0.7.6 release. Clients using 0.7.6 or earlier will not even notice clients using 0.8.0 or later.
.send_data()/.get_data() became
.send()/.get(), neither takes a phase= argument (the
Wormhole is now a record pipe) .get_verifier() became
.verify() (and waits to receive the key-confirmation
message before firing its Deferred), wormholes are constructed with a
function call instead of a class constructor, close()
always waits for server ack of outbound messages. Note that the API
remains unstable until 1.0.0 .Compatibility: this remains compatible with 0.7.x, and 0.8.x is still expected to break compatibility.
Compatibility:
Packaging:
wormhole send DIRNAME/ used to deal very badly with the
trailing slash (sending a directory with an empty name). This is now
fixed.magic-wormhole[tor], make sure you have a Tor executable on
your $PATH, and run wormhole --tor send. This will launch a
new Tor process. Do not use this in anger/fear until it has been tested
more carefully. This feature is likely to be unstable for a while, and
lacks tests.misc/dump-timing.py.wormhole --twisted send to force the use
of the Twisted implementation.--no-listen to prevent Transit from listening for
inbound connections (or advertising any addresses): this is only useful
for testing.Mostly internal changes:
wormhole server usage now shows Transit usage too, not
just Rendezvouswormhole can now send/receive entire directories. They
are zipped before transport.--output-file= argument was finally implemented,
which allows the receiver to override the filename that it writes. This
may help scripted usage.wormhole send --text - to read the text message
from stdin. wormhole receive >outfile works, but
currently appends an extra newline, which may be removed in a future
release.This changes the protocol (to a symmetric form), breaking compatibility with 0.3.0 peers. Now both blocking-style and Twisted-style use a symmetric protocol, and the two sides do not need to figure out (ahead of time) which one goes first. The internal layout was rearranged, so applications that import wormhole must be updated.
Add preliminary Twisted support, only for symmetric endpoints (no initator/receiver distinction). Lacks code-entry tab-completion. May still leave timers lingering. Add test suite (only for Twisted, so far).
Use a sqlite database for Relay server state, to survive reboots with less data loss. Add "--advertise-version=" to "wormhole relay start", to override the version we recommend to clients.
Initial release: supports blocking/synchronous asymmetric endpoints (Initiator on one side, Receiver on the other). Codes can be generated by Initiator, or created externally and passed into both (as long as they start with digits: NNN-anything).