From 0f43c0444701c1cdb86ea416e452a251abe50137 Mon Sep 17 00:00:00 2001 From: Pea Nut <peanut2@systemli.org> Date: Tue, 18 Jun 2024 19:47:32 +0200 Subject: [PATCH] Use v5 implementation if configured or env is set --- pkg/vpn/bitmask.go | 25 ++++++++++++++++++++++++- pkg/vpn/openvpn.go | 9 +++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/pkg/vpn/bitmask.go b/pkg/vpn/bitmask.go index d40a6013..7fd32d4c 100644 --- a/pkg/vpn/bitmask.go +++ b/pkg/vpn/bitmask.go @@ -29,6 +29,7 @@ import ( "0xacab.org/leap/bitmask-vpn/pkg/snowflake" "0xacab.org/leap/bitmask-vpn/pkg/vpn/bonafide" "0xacab.org/leap/bitmask-vpn/pkg/vpn/management" + "0xacab.org/leap/bitmask-vpn/pkg/vpn/menshen" obfsvpn "0xacab.org/leap/obfsvpn/client" ) @@ -61,7 +62,29 @@ func Init() (*Bitmask, error) { return nil, err } - api := bonafide.New() + var api apiInterface + if os.Getenv("API_VERSION") == "5" { + config.ApiVersion = 5 + log.Debug().Msg("Enforcing API v5 by env variable") + } + log.Debug(). + Int("apiVersion", config.ApiVersion). + Msg("Using specific API backend version") + + if config.ApiVersion == 5 { + api, err = menshen.New() + if err != nil { + return nil, err + } + } else if config.ApiVersion == 3 { + api = bonafide.New() + } else { + log.Warn(). + Int("apiVersion", config.ApiVersion). + Msg("ApiVersion of provider was not set correctly. Version 3 and 5 is supported. Using v3 for backwards compatiblity") + api = bonafide.New() + } + launch, err := launcher.NewLauncher() if err != nil { return nil, err diff --git a/pkg/vpn/openvpn.go b/pkg/vpn/openvpn.go index 0f90770e..edf333ef 100644 --- a/pkg/vpn/openvpn.go +++ b/pkg/vpn/openvpn.go @@ -204,6 +204,15 @@ func (b *Bitmask) startOpenVPN(ctx context.Context) error { */ b.statusCh <- Starting if b.GetTransport() == "obfs4" { + + if config.ApiVersion == 5 { + // if I return an error, the GUI state does not get updated properly to Failed/Stopped and + // continues to stay in state Connecting (also clicking Cancel doesnot work) + log.Fatal().Msg("Could not start OpenVPN with obfs4. This is currently not supported via v5") + // menshen/v5 has different api endpoints: gateways and bridges + // gw.Options is always empty right now + } + var gw bonafide.Gateway var gateways []bonafide.Gateway var proxy string -- GitLab