* feat: use ooni/probe-engine@286613b74e and cleanup

1. zap unused configuration settings from the config file but do not
bump the version number because doing that _may_ interact in unexpected
ways with probe-desktop (hence https://github.com/ooni/probe/issues/1297)
and also because we've just _removed_ stuff for now, therefore any
previous configuration file will continue to work, except that we'll
be ignoring a bunch of options. In a future version of probe-cli I'll
spend some time to further improve config file management.

2. accordingly, make sure all current configuration files that are around
in the tree are current and only feature supported options.

3. update to ooni/probe-engine@286613b74e, which contains a bunch of
APIs that should allow us to simplify the interaction between the cli and
the engine, by sharing code more cleverly.

4. zap GetTestKeys because now we use code in probe-engine instead.

5. zap LogSummary because it was not being used.

6. the main change related to cleaning up the config and to the update
to the latest probe-engine is that include_{cc,asn,ip} settings are
gone and we now share the CC and the ASN and we never share the IP addr.

Reference issue: https://github.com/ooni/probe/issues/1283.

After this change is landed, there's a bunch more work to do to further
unify cli and engine. The final state will be that the cli uses ~the code
used by miniooni, so it will have a bunch of desirable options.

* fix: bindata after recent changes
This commit is contained in:
Simone Basso 2020-11-26 18:48:20 +01:00 committed by GitHub
parent e4ef279b80
commit 95906fbcce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 13 additions and 495 deletions

View File

@ -2,18 +2,12 @@
"_version": 1,
"_informed_consent": false,
"sharing": {
"include_ip": false,
"include_asn": true,
"include_country": true,
"upload_results": true
},
"nettests": {
"websites_url_limit": 0
},
"advanced": {
"use_domain_fronting": false,
"send_crash_reports": true,
"collector_url": "",
"bouncer_url": "https://bouncer.ooni.io"
"send_crash_reports": true
}
}

2
go.mod
View File

@ -13,7 +13,7 @@ require (
github.com/mattn/go-colorable v0.1.8
github.com/mattn/go-sqlite3 v1.14.5 // indirect
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
github.com/ooni/probe-engine v0.20.2
github.com/ooni/probe-engine v0.20.1-0.20201126115133-286613b74e6c
github.com/pkg/errors v0.9.1
github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351
github.com/sirupsen/logrus v1.7.0 // indirect

4
go.sum
View File

@ -350,8 +350,8 @@ github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/ooni/probe-engine v0.20.2 h1:QO4HsHw5lG8vshtV0MQwINuYlVnVPPqaVCq8Zx+9guQ=
github.com/ooni/probe-engine v0.20.2/go.mod h1:58nNKsvU/jPjsQ8OZJFNu06l6yRJYYWfNE1JwGmbRwc=
github.com/ooni/probe-engine v0.20.1-0.20201126115133-286613b74e6c h1:+4uKh4ljd5Lui16QAKSKLw4Ld2NACDnuW7lxnUDZ8n8=
github.com/ooni/probe-engine v0.20.1-0.20201126115133-286613b74e6c/go.mod h1:58nNKsvU/jPjsQ8OZJFNu06l6yRJYYWfNE1JwGmbRwc=
github.com/ooni/psiphon v0.1.0 h1:fUcDpzZSd2McI5GomHtwusQllYPQoq3ETM3GMfQxCQQ=
github.com/ooni/psiphon v0.1.0/go.mod h1:p+l7SBAGTH3bw9ALcLvlrz6ry+isIM2f51Y5yOhgmTQ=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=

View File

@ -80,7 +80,7 @@ func (fi bindataFileInfo) Sys() interface{} {
return nil
}
var _bindataDataDefaultconfigJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8f\x41\x4e\xc4\x30\x0c\x45\xf7\x3d\x85\x95\x35\x9a\x81\x6d\x2f\x63\x65\x12\x0f\xb5\x94\xda\x95\xed\x0c\x42\x68\xee\x8e\x5a\xaa\x52\xd8\xfe\x97\x9f\xff\xfc\x35\x00\x24\x7c\x90\x39\xab\xa4\x11\xde\x5e\xb6\x80\xe5\xae\x36\x53\xc5\xa2\xe2\x24\x91\x46\xb8\xe7\xe6\xb4\x51\x9f\xb2\xb1\xbc\xa7\x11\xd6\x36\x40\x62\x29\xad\x57\x42\x5e\xce\xef\x4e\x20\xfb\xfa\x77\x58\xff\x0f\x8a\x76\x09\xfb\xfc\x0b\xfb\xd2\x34\x57\x34\xf2\xde\xc2\x77\x36\x00\x3c\xb7\x75\xa1\x08\xf2\x2d\xdf\xe7\x3f\xe8\xe6\x1c\xe4\xd8\xad\x61\xe3\x99\x57\xdd\xd7\xa3\x90\xeb\x23\x4b\xa1\xfa\x5b\xe8\x4e\x58\x75\xce\x2c\x78\x37\x95\xf8\x39\xe6\x2c\xee\x24\x15\x8b\x65\x9f\xd0\x68\x51\x3b\x34\x76\x5e\xb4\x35\x2a\xa1\xb6\x6e\xa6\x11\x52\xda\xc1\x4d\xbb\x14\x3a\xe2\x29\x62\xf1\xf1\x7a\xdd\xe3\x8b\xaa\xf0\x85\x35\xad\x72\xc3\x73\xf8\x0e\x00\x00\xff\xff\xfb\x1f\x97\x64\x7e\x01\x00\x00")
var _bindataDataDefaultconfigJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x8d\x31\x0e\xc2\x30\x0c\x45\xf7\x9c\xc2\xca\xcc\x00\x6b\x2e\x63\x85\xe6\x97\x46\x4a\x9d\xca\x4e\xca\x80\x7a\x77\xd4\x08\x81\x58\x9f\xdf\xf3\x7f\x39\x22\xcf\x3b\xd4\x72\x15\x1f\xe8\x76\x19\x20\xcb\x5c\x75\x45\xe2\xa9\x8a\x41\x9a\x0f\x34\xc7\x62\x18\x57\x5b\xa2\x66\x79\xf8\x40\x67\x4d\xe4\xfb\x56\x6a\x4c\xac\xb0\x5e\x9a\xf9\x40\x4d\x3b\x1c\xd1\x31\x74\x41\x6b\xb0\xc1\x3f\xfe\x13\x77\xcb\x0d\xc6\x5d\x0b\x97\xbc\xe6\xf3\xff\xf5\x1b\xc4\xb4\x47\x99\x90\x7e\x81\x41\x12\x4f\x1a\x6d\x61\xc5\x56\xf5\x6f\xc4\x1d\xee\x1d\x00\x00\xff\xff\x5e\x8a\x1a\x13\xc6\x00\x00\x00")
func bindataDataDefaultconfigJsonBytes() ([]byte, error) {
return bindataRead(

View File

@ -134,8 +134,6 @@ func Onboarding(config *config.Config) error {
config.Lock()
config.InformedConsent = true
config.Advanced.SendCrashReports = settings.SendCrashReports
config.Sharing.IncludeIP = settings.IncludeIP
config.Sharing.IncludeASN = settings.IncludeNetwork
config.Sharing.UploadResults = settings.UploadResults
config.Unlock()

View File

@ -28,8 +28,8 @@ func TestParseConfig(t *testing.T) {
if err != nil {
t.Error(err)
}
if config.Sharing.IncludeASN == false {
t.Error("network should be included")
if config.Sharing.UploadResults != true {
t.Fatal("not the expected value for UploadResults")
}
}
@ -58,8 +58,6 @@ func TestUpdateConfig(t *testing.T) {
if err != nil {
t.Error(err)
}
origIncludeIP := config.Sharing.IncludeIP
origIncludeASN := config.Sharing.IncludeASN
origUploadResults := config.Sharing.UploadResults
origInformedConsent := config.InformedConsent
if err != nil {
@ -79,12 +77,6 @@ func TestUpdateConfig(t *testing.T) {
if err != nil {
t.Error(err)
}
if newConfig.Sharing.IncludeIP != origIncludeIP {
t.Error("includeIP differs")
}
if newConfig.Sharing.IncludeASN != origIncludeASN {
t.Error("includeASN differs")
}
if newConfig.Sharing.UploadResults != origUploadResults {
t.Error("UploadResults differs")
}

View File

@ -35,8 +35,6 @@ var websiteCategories = []string{
// Sharing settings
type Sharing struct {
IncludeIP bool `json:"include_ip"`
IncludeASN bool `json:"include_asn"`
UploadResults bool `json:"upload_results"`
}

View File

@ -2,18 +2,12 @@
"_version": 1,
"_informed_consent": false,
"sharing": {
"include_ip": false,
"include_asn": true,
"include_country": true,
"upload_results": true
},
"nettests": {
"websites_url_limit": 0
},
"advanced": {
"use_domain_fronting": false,
"send_crash_reports": true,
"collector_url": "",
"bouncer_url": "https://bouncer.ooni.io"
"send_crash_reports": true
}
}

View File

@ -1,9 +1,5 @@
package nettests
import (
"github.com/pkg/errors"
)
// Dash test implementation
type Dash struct {
}
@ -16,48 +12,3 @@ func (d Dash) Run(ctl *Controller) error {
}
return ctl.Run(builder, []string{""})
}
// DashTestKeys for the test
// TODO: process 'receiver_data' to provide an array of performance for a chart.
type DashTestKeys struct {
Latency float64 `json:"connect_latency"`
Bitrate float64 `json:"median_bitrate"`
Delay float64 `json:"min_playout_delay"`
IsAnomaly bool `json:"-"`
}
// GetTestKeys generates a summary for a test run
func (d Dash) GetTestKeys(tk map[string]interface{}) (interface{}, error) {
var err error
testKeys := DashTestKeys{IsAnomaly: false}
simple, ok := tk["simple"].(map[string]interface{})
if !ok {
return testKeys, errors.New("simple key is not of the expected type")
}
latency, ok := simple["connect_latency"].(float64)
if !ok {
err = errors.Wrap(err, "connect_latency is invalid")
}
testKeys.Latency = latency
bitrate, ok := simple["median_bitrate"].(float64)
if !ok {
err = errors.Wrap(err, "median_bitrate is invalid")
}
testKeys.Bitrate = bitrate
delay, ok := simple["min_playout_delay"].(float64)
if !ok {
err = errors.Wrap(err, "min_playout_delay is invalid")
}
testKeys.Delay = delay
return testKeys, err
}
// LogSummary writes the summary to the standard output
func (d Dash) LogSummary(s string) error {
return nil
}

View File

@ -14,40 +14,3 @@ func (h FacebookMessenger) Run(ctl *Controller) error {
}
return ctl.Run(builder, []string{""})
}
// FacebookMessengerTestKeys for the test
type FacebookMessengerTestKeys struct {
DNSBlocking bool `json:"facebook_dns_blocking"`
TCPBlocking bool `json:"facebook_tcp_blocking"`
IsAnomaly bool `json:"-"`
}
// GetTestKeys generates a summary for a test run
func (h FacebookMessenger) GetTestKeys(tk map[string]interface{}) (interface{}, error) {
var (
dnsBlocking bool
tcpBlocking bool
)
if tk["facebook_dns_blocking"] == nil {
dnsBlocking = false
} else {
dnsBlocking = tk["facebook_dns_blocking"].(bool)
}
if tk["facebook_tcp_blocking"] == nil {
tcpBlocking = false
} else {
tcpBlocking = tk["facebook_tcp_blocking"].(bool)
}
return FacebookMessengerTestKeys{
DNSBlocking: dnsBlocking,
TCPBlocking: tcpBlocking,
IsAnomaly: dnsBlocking || tcpBlocking,
}, nil
}
// LogSummary writes the summary to the standard output
func (h FacebookMessenger) LogSummary(s string) error {
return nil
}

View File

@ -1,9 +1,5 @@
package nettests
import (
"errors"
)
// HTTPHeaderFieldManipulation test implementation
type HTTPHeaderFieldManipulation struct {
}
@ -18,31 +14,3 @@ func (h HTTPHeaderFieldManipulation) Run(ctl *Controller) error {
}
return ctl.Run(builder, []string{""})
}
// HTTPHeaderFieldManipulationTestKeys for the test
type HTTPHeaderFieldManipulationTestKeys struct {
IsAnomaly bool `json:"-"`
}
// GetTestKeys returns a projection of the tests keys needed for the views
func (h HTTPHeaderFieldManipulation) GetTestKeys(tk map[string]interface{}) (interface{}, error) {
testKeys := HTTPHeaderFieldManipulationTestKeys{IsAnomaly: false}
tampering, ok := tk["tampering"].(map[string]interface{})
if !ok {
return testKeys, errors.New("tampering testkey is invalid")
}
for _, v := range tampering {
t, ok := v.(bool)
// Ignore non booleans in the tampering map
if ok && t == true {
testKeys.IsAnomaly = true
}
}
return testKeys, nil
}
// LogSummary writes the summary to the standard output
func (h HTTPHeaderFieldManipulation) LogSummary(s string) error {
return nil
}

View File

@ -1,9 +1,5 @@
package nettests
import (
"errors"
)
// HTTPInvalidRequestLine test implementation
type HTTPInvalidRequestLine struct {
}
@ -18,26 +14,3 @@ func (h HTTPInvalidRequestLine) Run(ctl *Controller) error {
}
return ctl.Run(builder, []string{""})
}
// HTTPInvalidRequestLineTestKeys for the test
type HTTPInvalidRequestLineTestKeys struct {
IsAnomaly bool `json:"-"`
}
// GetTestKeys generates a summary for a test run
func (h HTTPInvalidRequestLine) GetTestKeys(tk map[string]interface{}) (interface{}, error) {
testKeys := HTTPInvalidRequestLineTestKeys{IsAnomaly: false}
tampering, ok := tk["tampering"].(bool)
if !ok {
return testKeys, errors.New("tampering is not bool")
}
testKeys.IsAnomaly = tampering
return testKeys, nil
}
// LogSummary writes the summary to the standard output
func (h HTTPInvalidRequestLine) LogSummary(s string) error {
return nil
}

View File

@ -1,9 +1,5 @@
package nettests
import (
"github.com/pkg/errors"
)
// NDT test implementation. We use v7 of NDT since 2020-03-12.
type NDT struct {
}
@ -17,67 +13,3 @@ func (n NDT) Run(ctl *Controller) error {
}
return ctl.Run(builder, []string{""})
}
// NDTTestKeys for the test
type NDTTestKeys struct {
Upload float64 `json:"upload"`
Download float64 `json:"download"`
Ping float64 `json:"ping"`
MaxRTT float64 `json:"max_rtt"`
AvgRTT float64 `json:"avg_rtt"`
MinRTT float64 `json:"min_rtt"`
MSS float64 `json:"mss"`
RetransmitRate float64 `json:"retransmit_rate"`
IsAnomaly bool `json:"-"`
}
// GetTestKeys generates a summary for a test run
func (n NDT) GetTestKeys(tk map[string]interface{}) (interface{}, error) {
var err error
testKeys := NDTTestKeys{IsAnomaly: false}
summary, ok := tk["summary"].(map[string]interface{})
if !ok {
return testKeys, errors.New("summary key is invalid")
}
// XXX there is likely a better pattern for this
testKeys.Upload, ok = summary["upload"].(float64)
if !ok {
err = errors.Wrap(err, "upload key invalid")
}
testKeys.Download, ok = summary["download"].(float64)
if !ok {
err = errors.Wrap(err, "download key invalid")
}
testKeys.Ping, ok = summary["ping"].(float64)
if !ok {
err = errors.Wrap(err, "ping key invalid")
}
testKeys.MaxRTT, ok = summary["max_rtt"].(float64)
if !ok {
err = errors.Wrap(err, "max_rtt key invalid")
}
testKeys.AvgRTT, ok = summary["avg_rtt"].(float64)
if !ok {
err = errors.Wrap(err, "avg_rtt key invalid")
}
testKeys.MinRTT, ok = summary["min_rtt"].(float64)
if !ok {
err = errors.Wrap(err, "min_rtt key invalid")
}
testKeys.MSS, ok = summary["mss"].(float64)
if !ok {
err = errors.Wrap(err, "mss key invalid")
}
testKeys.RetransmitRate, ok = summary["retransmit_rate"].(float64)
if !ok {
err = errors.Wrap(err, "retransmit_rate key invalid")
}
return testKeys, err
}
// LogSummary writes the summary to the standard output
func (n NDT) LogSummary(s string) error {
return nil
}

View File

@ -18,8 +18,6 @@ import (
// Nettest interface. Every Nettest should implement this.
type Nettest interface {
Run(*Controller) error
GetTestKeys(map[string]interface{}) (interface{}, error)
LogSummary(string) error
}
// NewController creates a nettest controller
@ -168,12 +166,7 @@ func (c *Controller) Run(builder *engine.ExperimentBuilder, inputs []string) err
// is an inconsistency between the code that generate the measurement
// and the code that process the measurement. We do have some data
// but we're not gonna have a summary. To be reconsidered.
genericTk, err := measurement.MakeGenericTestKeys()
if err != nil {
log.WithError(err).Error("failed to cast the test keys")
continue
}
tk, err := c.nt.GetTestKeys(genericTk)
tk, err := exp.GetSummaryKeys(measurement)
if err != nil {
log.WithError(err).Error("failed to obtain testKeys")
continue

View File

@ -1,7 +1,5 @@
package nettests
import "github.com/pkg/errors"
// Psiphon test implementation
type Psiphon struct {
}
@ -16,36 +14,3 @@ func (h Psiphon) Run(ctl *Controller) error {
}
return ctl.Run(builder, []string{""})
}
// PsiphonTestKeys contains the test keys
type PsiphonTestKeys struct {
IsAnomaly bool `json:"-"`
BootstrapTime float64 `json:"bootstrap_time"`
Failure string `json:"failure"`
}
// GetTestKeys generates a summary for a test run
func (h Psiphon) GetTestKeys(tk map[string]interface{}) (interface{}, error) {
var (
ok bool
testKeys PsiphonTestKeys
)
if tk["failure"] != nil {
testKeys.IsAnomaly = true
failure, ok := tk["failure"].(*string)
if !ok {
return testKeys, errors.New("failure key invalid")
}
testKeys.Failure = *failure
}
testKeys.BootstrapTime, ok = tk["bootstrap_time"].(float64)
if !ok {
return testKeys, errors.New("bootstrap_time key invalid")
}
return testKeys, nil
}
// LogSummary writes the summary to the standard output
func (h Psiphon) LogSummary(s string) error {
return nil
}

View File

@ -14,48 +14,3 @@ func (h Telegram) Run(ctl *Controller) error {
}
return ctl.Run(builder, []string{""})
}
// TelegramTestKeys for the test
type TelegramTestKeys struct {
HTTPBlocking bool `json:"telegram_http_blocking"`
TCPBlocking bool `json:"telegram_tcp_blocking"`
WebBlocking bool `json:"telegram_web_blocking"`
IsAnomaly bool `json:"-"`
}
// GetTestKeys generates a summary for a test run
func (h Telegram) GetTestKeys(tk map[string]interface{}) (interface{}, error) {
var (
tcpBlocking bool
httpBlocking bool
webBlocking bool
)
if tk["telegram_tcp_blocking"] == nil {
tcpBlocking = false
} else {
tcpBlocking = tk["telegram_tcp_blocking"].(bool)
}
if tk["telegram_http_blocking"] == nil {
httpBlocking = false
} else {
httpBlocking = tk["telegram_http_blocking"].(bool)
}
if tk["telegram_web_status"] == nil {
webBlocking = false
} else {
webBlocking = tk["telegram_web_status"].(string) == "blocked"
}
return TelegramTestKeys{
TCPBlocking: tcpBlocking,
HTTPBlocking: httpBlocking,
WebBlocking: webBlocking,
IsAnomaly: webBlocking || httpBlocking || tcpBlocking,
}, nil
}
// LogSummary writes the summary to the standard output
func (h Telegram) LogSummary(s string) error {
return nil
}

View File

@ -14,59 +14,3 @@ func (h Tor) Run(ctl *Controller) error {
}
return ctl.Run(builder, []string{""})
}
// TorTestKeys contains the test keys
type TorTestKeys struct {
DirPortTotal int64 `json:"dir_port_total"`
DirPortAccessible int64 `json:"dir_port_accessible"`
IsAnomaly bool `json:"-"`
OBFS4Total int64 `json:"obfs4_total"`
OBFS4Accessible int64 `json:"obfs4_accessible"`
ORPortDirauthTotal int64 `json:"or_port_dirauth_total"`
ORPortDirauthAccessible int64 `json:"or_port_dirauth_accessible"`
ORPortTotal int64 `json:"or_port_total"`
ORPortAccessible int64 `json:"or_port_accessible"`
}
// GetTestKeys generates a summary for a test run
func (h Tor) GetTestKeys(tk map[string]interface{}) (interface{}, error) {
testKeys := TorTestKeys{IsAnomaly: false}
// Implementation note: when Go marshals into an interface, it marshals to
// float64 rather than int64, so we need to do some more work here.
//
// See <https://golang.org/pkg/encoding/json/#Unmarshal>.
if tk["dir_port_total"] != nil {
testKeys.DirPortTotal = int64(tk["dir_port_total"].(float64))
}
if tk["dir_port_accessible"] != nil {
testKeys.DirPortAccessible = int64(tk["dir_port_accessible"].(float64))
}
if tk["obfs4_total"] != nil {
testKeys.OBFS4Total = int64(tk["obfs4_total"].(float64))
}
if tk["obfs4_accessible"] != nil {
testKeys.OBFS4Accessible = int64(tk["obfs4_accessible"].(float64))
}
if tk["or_port_dirauth_total"] != nil {
testKeys.ORPortDirauthTotal = int64(tk["or_port_dirauth_total"].(float64))
}
if tk["or_port_dirauth_accessible"] != nil {
testKeys.ORPortDirauthAccessible = int64(tk["or_port_dirauth_accessible"].(float64))
}
if tk["or_port_total"] != nil {
testKeys.ORPortTotal = int64(tk["or_port_total"].(float64))
}
if tk["or_port_accessible"] != nil {
testKeys.ORPortAccessible = int64(tk["or_port_accessible"].(float64))
}
testKeys.IsAnomaly = ((testKeys.DirPortAccessible <= 0 && testKeys.DirPortTotal > 0) ||
(testKeys.OBFS4Accessible <= 0 && testKeys.OBFS4Total > 0) ||
(testKeys.ORPortDirauthAccessible <= 0 && testKeys.ORPortDirauthTotal > 0) ||
(testKeys.ORPortAccessible <= 0 && testKeys.ORPortTotal > 0))
return testKeys, nil
}
// LogSummary writes the summary to the standard output
func (h Tor) LogSummary(s string) error {
return nil
}

View File

@ -52,50 +52,3 @@ func (n WebConnectivity) Run(ctl *Controller) error {
}
return ctl.Run(builder, urls)
}
// WebConnectivityTestKeys for the test
type WebConnectivityTestKeys struct {
Accessible bool `json:"accessible"`
Blocking string `json:"blocking"`
IsAnomaly bool `json:"-"`
}
// GetTestKeys generates a summary for a test run
func (n WebConnectivity) GetTestKeys(tk map[string]interface{}) (interface{}, error) {
var (
blocked bool
blocking string
accessible bool
)
// We need to do these complicated type assertions, because some of the fields
// are "nullable" and/or can be of different types
switch v := tk["blocking"].(type) {
case bool:
blocked = false
blocking = "none"
case string:
blocked = true
blocking = v
default:
blocked = false
blocking = "none"
}
if tk["accessible"] == nil {
accessible = false
} else {
accessible = tk["accessible"].(bool)
}
return WebConnectivityTestKeys{
Accessible: accessible,
Blocking: blocking,
IsAnomaly: blocked,
}, nil
}
// LogSummary writes the summary to the standard output
func (n WebConnectivity) LogSummary(s string) error {
return nil
}

View File

@ -14,46 +14,3 @@ func (h WhatsApp) Run(ctl *Controller) error {
}
return ctl.Run(builder, []string{""})
}
// WhatsAppTestKeys for the test
type WhatsAppTestKeys struct {
RegistrationServerBlocking bool `json:"registration_server_blocking"`
WebBlocking bool `json:"whatsapp_web_blocking"`
EndpointsBlocking bool `json:"whatsapp_endpoints_blocking"`
IsAnomaly bool `json:"-"`
}
// GetTestKeys generates a summary for a test run
func (h WhatsApp) GetTestKeys(tk map[string]interface{}) (interface{}, error) {
var (
webBlocking bool
registrationBlocking bool
endpointsBlocking bool
)
var computeBlocking = func(key string) bool {
const blk = "blocked"
if tk[key] == nil {
return false
}
if tk[key].(string) == blk {
return true
}
return false
}
registrationBlocking = computeBlocking("registration_server_status")
webBlocking = computeBlocking("whatsapp_web_status")
endpointsBlocking = computeBlocking("whatsapp_endpoints_status")
return WhatsAppTestKeys{
RegistrationServerBlocking: registrationBlocking,
WebBlocking: webBlocking,
EndpointsBlocking: endpointsBlocking,
IsAnomaly: registrationBlocking || webBlocking || endpointsBlocking,
}, nil
}
// LogSummary writes the summary to the standard output
func (h WhatsApp) LogSummary(s string) error {
return nil
}

View File

@ -14,7 +14,6 @@ import (
"github.com/ooni/probe-cli/internal/enginex"
"github.com/ooni/probe-cli/internal/utils"
engine "github.com/ooni/probe-engine"
"github.com/ooni/probe-engine/model"
"github.com/pkg/errors"
"upper.io/db.v3/lib/sqlbuilder"
)
@ -203,11 +202,6 @@ func (p *Probe) NewSession() (*engine.Session, error) {
AssetsDir: utils.AssetsDir(p.home),
KVStore: kvstore,
Logger: enginex.Logger,
PrivacySettings: model.PrivacySettings{
IncludeASN: p.config.Sharing.IncludeASN,
IncludeCountry: true,
IncludeIP: p.config.Sharing.IncludeIP,
},
SoftwareName: p.softwareName,
SoftwareVersion: p.softwareVersion,
TempDir: p.tempDir,

View File

@ -2,18 +2,12 @@
"_version": 1,
"_informed_consent": true,
"sharing": {
"include_ip": true,
"include_asn": true,
"include_country": true,
"upload_results": true
},
"nettests": {
"websites_url_limit": 10
},
"advanced": {
"use_domain_fronting": false,
"send_crash_reports": true,
"collector_url": "",
"bouncer_url": "https://bouncer.ooni.io"
"send_crash_reports": true
}
}