From 30587fb27b73fdb3f0aab1a78844edcaaae1c3bb Mon Sep 17 00:00:00 2001 From: "kali kaneko (leap communications)" Date: Wed, 19 Aug 2020 18:21:37 +0200 Subject: [feat] pick only the top 3 gateways fixes bug: do not initialize an empty list of gateways --- pkg/vpn/bonafide/bonafide.go | 2 +- pkg/vpn/bonafide/eip_service.go | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) (limited to 'pkg') diff --git a/pkg/vpn/bonafide/bonafide.go b/pkg/vpn/bonafide/bonafide.go index 9963448..9916b55 100644 --- a/pkg/vpn/bonafide/bonafide.go +++ b/pkg/vpn/bonafide/bonafide.go @@ -232,7 +232,7 @@ func (b *Bonafide) GetOpenvpnArgs() ([]string, error) { } func (b *Bonafide) fetchGeolocation() ([]string, error) { - /* FIXME in float deployments, geolocation is served on gemyip.domain/json, with a LE certificate. + /* FIXME in float deployments, geolocation is served on gemyip.domain/json, with a LE certificate, but in riseup is served behind the api certificate. So this is a workaround until we streamline that behavior */ resp, err := b.client.Post(config.GeolocationAPI, "", nil) if err != nil { diff --git a/pkg/vpn/bonafide/eip_service.go b/pkg/vpn/bonafide/eip_service.go index 49f4bb1..961ac40 100644 --- a/pkg/vpn/bonafide/eip_service.go +++ b/pkg/vpn/bonafide/eip_service.go @@ -116,6 +116,9 @@ func (b *Bonafide) fetchEipJSON() error { } b.setupAuthentication(b.eip) + /* TODO we could launch the looping call from here. + but smells: calls a bonafide method that in turn calls methods in this file + */ b.sortGateways() return nil } @@ -204,8 +207,9 @@ func (eip eipService) getOpenvpnArgs() []string { } func (eip *eipService) sortGatewaysByGeolocation(geolocatedGateways []string) { - gws := make([]gatewayV3, len(eip.Gateways)) + gws := make([]gatewayV3, 0) + /* TODO this probably should be moved out of this method */ if eip.defaultGateway != "" { for _, gw := range eip.Gateways { if gw.Location == eip.defaultGateway { @@ -213,6 +217,8 @@ func (eip *eipService) sortGatewaysByGeolocation(geolocatedGateways []string) { break } } + // a manually selected gateway means we do want exactly one remote + return } for _, host := range geolocatedGateways { @@ -224,7 +230,9 @@ func (eip *eipService) sortGatewaysByGeolocation(geolocatedGateways []string) { } if len(gws) == 0 { - log.Println("ERROR: avoiding to replace eip.Gateways will null list. Is the geolocation service properly configured?") + // this can happen if a misconfigured geoip service does not match the + // providers list we got. + log.Println("ERROR: avoiding to nullify eip.Gateways. Is the geolocation service properly configured?") } else { if len(gws) > 2 { eip.Gateways = gws[:3] -- cgit v1.2.3