ooni-probe-cli/internal/cmd
Simone Basso 85c71c09dc
feat: introduce ptx package for pluggable transports dialers (#373)
* feat: introduce ptx package for pluggable transports dialers

Version 2 of the pluggable transports specification defines a function
that's like `Dial() (net.Conn, error`).

Because we use contexts as much as possible in `probe-cli`, we are
wrapping such an interface into a `DialContext` func.

The code for obfs4 is adapted from https://github.com/ooni/probe-cli/pull/341.

The code for snowflake is significantly easier than it is in
https://github.com/ooni/probe-cli/pull/341, because now Snowflake
supports the PTv2 spec (thanks @cohosh!).

The code for setting up a pluggable transport listener has also
been adapted from https://github.com/ooni/probe-cli/pull/341.

We cannot merge this code yet, because we need unit testing, yet the
newly added code already seems suitable for these use cases:

1. testing by dialing and seeing whether we can dial (which is not
very useful but still better than not doing it);

2. spawning tor+pluggable transports for circumvention (we need a
little more hammering like we did in https://github.com/ooni/probe-cli/pull/341,
which is basically https://github.com/ooni/probe/issues/1565, and then
we will be able to do that, as demonstrated by the new, simple client which
already allows us to use pluggable transports with tor);

3. testing by launching tor (when available) with a set of
pluggable transports (which depends on https://github.com/ooni/probe-engine/issues/897
and has not been assigned an issue yet).

* fix: tweaks after self code-review

* feat: write quick tests for ptx/obfs4

(They run in 0.4s, so I think it's fine for them to always run.)

* feat(ptx/snowflake): write unit and integration tests

* feat: create a fake PTDialer

The idea is that we'll use this simpler PTDialer for testing.

* feat: finish writing tests for new package

* Apply suggestions from code review

* Update internal/ptx/dependencies_test.go

Co-authored-by: Arturo Filastò <arturo@openobservatory.org>

* Update internal/ptx/dependencies_test.go

Co-authored-by: Arturo Filastò <arturo@openobservatory.org>

* chore: use as testing bridge one that's used by tor browser

The previous testing bridge used to be used by tor browser but
it was subsequently removed here:

e26e91bef8

See https://github.com/ooni/probe-cli/pull/373#discussion_r649820724

Co-authored-by: Arturo Filastò <arturo@openobservatory.org>
2021-06-14 10:20:54 +02:00
..
apitool refactor: flatten and separate (#353) 2021-06-04 10:34:18 +02:00
e2epostprocess fix: use golang.org/x/sys/execabs (#224) 2021-02-10 07:40:48 +01:00
getresources refactor: redesign how we import assets (#260) 2021-04-01 16:57:31 +02:00
jafar cleanup(shellx): do not directly depend on apex/log (#357) 2021-06-04 14:02:18 +02:00
miniooni refactor(netx): remove the self censorship mechanism (#364) 2021-06-08 19:40:17 +02:00
oohelper refactor: flatten and separate (#353) 2021-06-04 10:34:18 +02:00
oohelperd refactor: flatten and separate (#353) 2021-06-04 10:34:18 +02:00
ptxclient feat: introduce ptx package for pluggable transports dialers (#373) 2021-06-14 10:20:54 +02:00
README.md doc: ensure all top dirs have an explanatory README (#214) 2021-02-03 16:54:00 +01:00

Directory github.com/ooni/probe-cli/internal/cmd

This directory contains the source code for the CLI tools we build but we don't want to expose to the outside world. That is, you can only build these tools if you have cloned this repo.