fix(oonimkall): allow Android app to set proxy (#303)

Part of https://github.com/ooni/probe/issues/985
This commit is contained in:
Simone Basso
2021-04-06 14:53:58 +02:00
committed by GitHub
parent 7172e750dd
commit 5d8cf60f55
3 changed files with 52 additions and 0 deletions
+13
View File
@@ -5,6 +5,7 @@ import (
"context"
"encoding/json"
"fmt"
"net/url"
"time"
engine "github.com/ooni/probe-cli/v3/internal/engine"
@@ -74,9 +75,21 @@ func (r *Runner) newsession(ctx context.Context, logger *ChanLogger) (*engine.Se
if err != nil {
return nil, err
}
// TODO(bassosimone): write tests for this functionality
var proxyURL *url.URL
if r.settings.Proxy != "" {
var err error
proxyURL, err = url.Parse(r.settings.Proxy)
if err != nil {
return nil, err
}
}
config := engine.SessionConfig{
KVStore: kvstore,
Logger: logger,
ProxyURL: proxyURL,
SoftwareName: r.settings.Options.SoftwareName,
SoftwareVersion: r.settings.Options.SoftwareVersion,
TempDir: r.settings.TempDir,
+13
View File
@@ -32,6 +32,19 @@ type Settings struct {
// Options contains the task options.
Options SettingsOptions `json:"options"`
// Proxy allows you to optionally force a specific proxy
// rather than using no proxy (the default).
//
// Use `psiphon:///` to force using Psiphon with the
// embedded configuration file. Not all builds have
// an embedded configuration file, but OONI builds have
// such a file, so they can use this functionality.
//
// Use `socks5://10.0.0.1:9050/` to connect to a SOCKS5
// proxy running on 10.0.0.1:9050. This could be, for
// example, a suitably configured `tor` instance.
Proxy string
// StateDir is the directory where to store persistent data. This
// field is an extension of MK's specification. If
// this field is empty, the task won't start.