From c5f84872af41b7070a0752f036130a46133b610e Mon Sep 17 00:00:00 2001
From: Pea Nut <peanut2@systemli.org>
Date: Wed, 4 Sep 2024 14:49:07 +0200
Subject: [PATCH] Add STUNServers countryCodeLookupURL fields to provider
 config (geolocation lookup)

- add new fields STUNServers and countryCodeLookupURL in providers/vendor.conf (required for the geolocation lookup)
- load new fields STUNServers and countryCodeLookupURL from providers json
- update gen-providers-json script to support geolocation lookup (the STUN servers should be separated with , in providers/vendor.conf)
---
 branding/scripts/provider.py | 11 ++++++++++-
 pkg/bitmask/init.go          | 32 ++++++++++++++++++--------------
 pkg/config/config.go         | 18 ++++++++++--------
 pkg/vpn/menshen/init.go      |  2 ++
 providers/vendor.conf        | 18 ++++++++++++++++++
 5 files changed, 58 insertions(+), 23 deletions(-)

diff --git a/branding/scripts/provider.py b/branding/scripts/provider.py
index d97728f3..fa8fa88f 100644
--- a/branding/scripts/provider.py
+++ b/branding/scripts/provider.py
@@ -24,9 +24,11 @@ def getProviderData(provider, config):
     keys = ('name', 'applicationName', 'binaryName', 'auth', 'authEmptyPass',
             'providerURL', 'tosURL', 'helpURL',
             'askForDonations', 'donateURL', 'apiURL',
-            'apiVersion', 'geolocationAPI', 'caCertString')
+            'apiVersion', 'geolocationAPI', 'caCertString',
+            'STUNServers', 'countryCodeLookupURL')
     boolValues = ['askForDonations', 'authEmptyPass']
     intValues = ['apiVersion', ]
+    listValues = ['STUNServers']
 
     for value in keys:
         if value not in c:
@@ -36,6 +38,13 @@ def getProviderData(provider, config):
             d[value] = bool(d[value])
         elif value in intValues:
             d[value] = int(d[value])
+        elif value in listValues:
+            if d[value].strip() == "":
+                d[value] = []
+            else:
+                d[value] = d[value].split(",")
+                # remove spaces
+                d[value] = [x.strip() for x in d[value]]
 
     d['timeStamp'] = '{:%Y-%m-%d %H:%M:%S}'.format(
         datetime.datetime.now())
diff --git a/pkg/bitmask/init.go b/pkg/bitmask/init.go
index 2c594330..bc2a1a3c 100644
--- a/pkg/bitmask/init.go
+++ b/pkg/bitmask/init.go
@@ -29,20 +29,22 @@ type ProviderInfo struct {
 }
 
 type ProviderOpts struct {
-	Provider        string `json:"name"`
-	AppName         string `json:"applicationName"`
-	BinaryName      string `json:"binaryName"`
-	Auth            string `json:"auth"`
-	AuthEmptyPass   bool   `json:"authEmptyPass"`
-	ProviderURL     string `json:"providerURL"`
-	DonateURL       string `json:"donateURL"`
-	ApiURL          string `json:"apiURL"`
-	TosURL          string `json:"tosURL"`
-	HelpURL         string `json:"helpURL"`
-	GeolocationURL  string `json:"geolocationAPI"`
-	AskForDonations bool   `json:"askForDonations"`
-	CaCert          string `json:"caCertString"`
-	ApiVersion      int    `json:"apiVersion"`
+	Provider             string   `json:"name"`
+	AppName              string   `json:"applicationName"`
+	BinaryName           string   `json:"binaryName"`
+	Auth                 string   `json:"auth"`
+	AuthEmptyPass        bool     `json:"authEmptyPass"`
+	ProviderURL          string   `json:"providerURL"`
+	DonateURL            string   `json:"donateURL"`
+	ApiURL               string   `json:"apiURL"`
+	TosURL               string   `json:"tosURL"`
+	HelpURL              string   `json:"helpURL"`
+	GeolocationURL       string   `json:"geolocationAPI"`
+	AskForDonations      bool     `json:"askForDonations"`
+	CaCert               string   `json:"caCertString"`
+	ApiVersion           int      `json:"apiVersion"`
+	STUNServers          []string `json:"STUNServers"`
+	CountryCodeLookupURL string   `json:"countryCodeLookupURL"`
 }
 
 func GetConfiguredProvider() *ProviderInfo {
@@ -60,6 +62,8 @@ func ConfigureProvider(opts *ProviderOpts) {
 	config.APIURL = opts.ApiURL
 	config.CaCert = []byte(opts.CaCert)
 	config.ApiVersion = opts.ApiVersion
+	config.STUNServers = opts.STUNServers
+	config.CountryCodeLookupURL = opts.CountryCodeLookupURL
 }
 
 func InitializeBitmask(conf *config.Config) (Bitmask, error) {
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 06f9d6ef..e3a2f6e8 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -1,12 +1,14 @@
 package config
 
 var (
-	Provider        = ""
-	ApplicationName = ""
-	BinaryName      = ""
-	Auth            = ""
-	APIURL          = ""
-	GeolocationAPI  = ""
-	ApiVersion      = -1
-	CaCert          = []byte("")
+	Provider             = ""
+	ApplicationName      = ""
+	BinaryName           = ""
+	Auth                 = ""
+	APIURL               = ""
+	GeolocationAPI       = ""
+	ApiVersion           = -1
+	CaCert               = []byte("")
+	STUNServers          = []string{}
+	CountryCodeLookupURL = ""
 )
diff --git a/pkg/vpn/menshen/init.go b/pkg/vpn/menshen/init.go
index 7db2ed0a..dc85574f 100644
--- a/pkg/vpn/menshen/init.go
+++ b/pkg/vpn/menshen/init.go
@@ -38,6 +38,8 @@ func New() (*Menshen, error) {
 	if err != nil {
 		return nil, err
 	}
+	cfg.STUNServers = config.STUNServers
+	cfg.CountryCodeLookupURL = config.CountryCodeLookupURL
 
 	api, err := bootstrap.NewAPI(cfg)
 	if err != nil {
diff --git a/providers/vendor.conf b/providers/vendor.conf
index b79f92e8..bcff8472 100644
--- a/providers/vendor.conf
+++ b/providers/vendor.conf
@@ -22,6 +22,9 @@ geolocationAPI      = https://api.black.riseup.net:9001/json
 askForDonations     = true
 donateURL           = https://riseup.net/vpn/donate
 
+STUNServers         = 
+countryCodeLookupURL = 
+
 [riseupbeta]
 
 name                = RiseupBeta
@@ -42,6 +45,9 @@ geolocationAPI      = https://menshen.float.hexacab.org/json
 askForDonations     = true
 donateURL           = https://riseup.net/vpn/donate
 
+STUNServers         = 
+countryCodeLookupURL = 
+
 [calyx]
 
 name                = Calyx
@@ -61,6 +67,9 @@ geolocationAPI      = https://api.black.riseup.net:9001/json
 askForDonations     = false
 donateURL           = 
 
+STUNServers         = 
+countryCodeLookupURL = 
+
 
 [demolib]
 
@@ -83,6 +92,9 @@ geolocationAPI      = https://getmyip.vpnlib.bitmask.net/json
 askForDonations     = false
 donateURL           =
 
+STUNServers         = 
+countryCodeLookupURL = 
+
 [floatdemo]
 
 name                = floatdemo 
@@ -103,6 +115,9 @@ geolocationAPI      = https://menshen.float.bitmask.net/json
 askForDonations     = false
 donateURL           =
 
+STUNServers         = 
+countryCodeLookupURL = 
+
 
 [bitmask]
 
@@ -123,3 +138,6 @@ helpURL             = https://demo.bitmask.net/support
 geolocationAPI      = https://menshen.demo.bitmask.net/json
 askForDonations     = false
 donateURL           =
+
+STUNServers         = 
+countryCodeLookupURL = 
-- 
GitLab