From 0bd196e7cc00ee9dfa65bec337b824663f72be04 Mon Sep 17 00:00:00 2001
From: jkito <belter@riseup.net>
Date: Tue, 15 Oct 2024 01:40:36 +0530
Subject: [PATCH] enable setting introducer url using env variable

check if the LEAP_INTRODUCER_URL env variable is
non-empty and use its value as introducer URL

this allows us to test the introducer feature in
the client
---
 pkg/vpn/bonafide/bonafide.go | 20 ++++++++++++++++++++
 pkg/vpn/menshen/init.go      |  5 +++++
 2 files changed, 25 insertions(+)

diff --git a/pkg/vpn/bonafide/bonafide.go b/pkg/vpn/bonafide/bonafide.go
index c6d07cb8..6c2b3517 100644
--- a/pkg/vpn/bonafide/bonafide.go
+++ b/pkg/vpn/bonafide/bonafide.go
@@ -30,6 +30,7 @@ import (
 
 	"github.com/rs/zerolog/log"
 
+	"0xacab.org/leap/bitmask-core/pkg/introducer"
 	"0xacab.org/leap/bitmask-vpn/pkg/config"
 	"0xacab.org/leap/bitmask-vpn/pkg/snowflake"
 )
@@ -100,6 +101,25 @@ func New() *Bonafide {
 		},
 		Timeout: time.Second * 30,
 	}
+
+	// experimental introducer
+	if introURL := os.Getenv("LEAP_INTRODUCER_URL"); introURL != "" {
+		inr, err := introducer.NewIntroducerFromURL(introURL)
+		if err != nil {
+			log.Debug().
+				Err(err).
+				Str("introducer URL", introURL).
+				Msg("failed to create introducer from URL")
+		}
+
+		client, err = introducer.NewHTTPClientFromIntroducer(inr)
+		if err != nil {
+			log.Debug().
+				Err(err).
+				Msg("failed to create http client from introducer")
+		}
+	}
+	client.Timeout = time.Minute
 	_, tzOffsetSeconds := time.Now().Zone()
 	tzOffsetHours := tzOffsetSeconds / secondsPerHour
 
diff --git a/pkg/vpn/menshen/init.go b/pkg/vpn/menshen/init.go
index 809aafa3..90f9989d 100644
--- a/pkg/vpn/menshen/init.go
+++ b/pkg/vpn/menshen/init.go
@@ -41,6 +41,11 @@ func New() (*Menshen, error) {
 	cfg.STUNServers = config.STUNServers
 	cfg.CountryCodeLookupURL = config.CountryCodeLookupURL
 
+	// experimental introducer
+	if introURL := os.Getenv("LEAP_INTRODUCER_URL"); introURL != "" {
+		cfg.Introducer = introURL
+	}
+
 	api, err := bootstrap.NewAPI(cfg)
 	if err != nil {
 		return nil, err
-- 
GitLab