Verified Commit 1e2d0868 authored by meskio's avatar meskio 🏔️
Browse files

moat: use pt_config.json to fetch the builtin bridges

Builtin bridges in the tor-browser-build repo has being moved to a new
json file.

Closes: #146
parent b8ba6f94
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -112,12 +112,7 @@
            "num_bridges_per_request": 3,
            "rotation_period_hours": 24,
            "num_periods": 30,
            "builtin_bridges_url": "https://gitweb.torproject.org/builders/tor-browser-build.git/plain/projects/common/",
            "builtin_bridges_types": [
                "meek-azure",
                "obfs4",
                "snowflake"
            ],
            "builtin_bridges_url": "https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/raw/main/projects/tor-expert-bundle/pt_config.json",
            "shim_tokens": {
		"shim": ""
	    },
+0 −1
Original line number Diff line number Diff line
@@ -94,7 +94,6 @@ type MoatDistConfig struct {
	RotationPeriodHours   int               `json:"rotation_period_hours"`
	NumPeriods            int               `json:"num_periods"`
	BuiltInBridgesURL     string            `json:"builtin_bridges_url"`
	BuiltInBridgesTypes   []string          `json:"builtin_bridges_types"`
	ShimTokens            map[string]string `json:"shim_tokens"`
	DummyBridgesFile      string            `json:"dummy_bridges_file"`
	WebApi                WebApiConfig      `json:"web_api"`
+9 −8
Original line number Diff line number Diff line
@@ -5,7 +5,6 @@
package moat

import (
	"bytes"
	"encoding/json"
	"errors"
	"fmt"
@@ -303,7 +302,11 @@ func builtinHandler(w http.ResponseWriter, r *http.Request) {
	}
}

func fetchBridges(url string) ([]string, error) {
type builtinBridgesJSON struct {
	Bridges map[string][]string `json:"bridges"`
}

func fetchBridges(url string) (map[string][]string, error) {
	resp, err := http.Get(url)
	if err != nil {
		return nil, err
@@ -313,10 +316,8 @@ func fetchBridges(url string) ([]string, error) {
		return nil, fmt.Errorf("Status code: %d", resp.StatusCode)
	}

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}
	body = bytes.TrimSpace(body)
	return strings.Split(string(body), "\n"), nil
	var builtinBridges builtinBridgesJSON
	dec := json.NewDecoder(resp.Body)
	err = dec.Decode(&builtinBridges)
	return builtinBridges.Bridges, err
}
+7 −7
Original line number Diff line number Diff line
@@ -61,7 +61,9 @@ type MoatDistributor struct {
	wg                    sync.WaitGroup
	shutdown              chan bool

	FetchBridges func(url string) (bridgeLines []string, err error)
	// FetchBridges gets the list of builtin bridgelines from a remote url
	// the bridgeLines map is indexed by bridge type
	FetchBridges func(url string) (bridgeLines map[string][]string, err error)
}

func (d *MoatDistributor) LoadCircumventionMap(r io.Reader) error {
@@ -218,13 +220,11 @@ func (d *MoatDistributor) housekeeping(rStream chan *core.ResourceDiff) {
}

func (d *MoatDistributor) fetchBuiltinBridges() {
	for _, bType := range d.cfg.BuiltInBridgesTypes {
		builtinBridges, err := d.FetchBridges(d.cfg.BuiltInBridgesURL + "bridges_list." + bType + ".txt")
	builtinBridges, err := d.FetchBridges(d.cfg.BuiltInBridgesURL)
	if err != nil {
			log.Println("Failed to fetch builtin bridges of type", bType, ":", err)
			continue
		}
		d.builtinBridges[bType] = builtinBridges
		log.Println("Failed to fetch builtin bridges:", err)
	} else {
		d.builtinBridges = builtinBridges
	}
}

+2 −3
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@ var (
		Distributors: internal.Distributors{
			Moat: internal.MoatDistConfig{
				Resources:            []string{"dummy", "obsf4"},
				BuiltInBridgesTypes:  []string{"snowflake"},
				NumBridgesPerRequest: 1,
			},
		},
@@ -54,8 +53,8 @@ const (
	dummyBridges = `obfs4 209.148.46.65:443 74FAD13168806246602538555B5521A0383A1875 cert=ssH+9rP8dG2NLDN2XuFw63hIO/9MNNinLmxQDpVa+7kTOa9/m+tGWT1SmSYpQ9uTBGa6Hw iat-mode=0`
)

func fetchBridges(url string) ([]string, error) {
	bridgeLines := []string{"snowflake 192.0.2.3:1 2B280B23E1107BB62ABFC40DDCC8824814F80A72"}
func fetchBridges(url string) (map[string][]string, error) {
	bridgeLines := map[string][]string{"snowflake": {"snowflake 192.0.2.3:1 2B280B23E1107BB62ABFC40DDCC8824814F80A72"}}
	return bridgeLines, nil
}