diff options
| -rw-r--r-- | client/client.go | 23 | ||||
| -rw-r--r-- | internal/config/config.go | 5 | ||||
| -rw-r--r-- | internal/discovery/discovery.go | 6 |
3 files changed, 30 insertions, 4 deletions
diff --git a/client/client.go b/client/client.go index ac13e62..12e0ea5 100644 --- a/client/client.go +++ b/client/client.go @@ -166,6 +166,13 @@ func New(name string, version string, directory string, stateCallback func(FSMSt // set the servers c.Servers = server.NewServers(c.Name, c, c.cfg.V2) + + // the first fetch for the servers should be fresh + c.cfg.Discovery().MarkServersExpired() + + if !c.cfg.HasSecureInternet() { + c.cfg.Discovery().MarkOrganizationsExpired() + } return c, nil } @@ -423,22 +430,30 @@ func (c *Client) GetConfig(ck *cookie.Cookie, identifier string, _type srvtypes. if err != nil { log.Logger.Debugf("no tokens found for server: '%s', with error: '%v'", identifier, err) } + + ctx := ck.Context() + disco := c.cfg.Discovery() + // make sure the servers are fetched fresh + disco.Servers(ctx) + var srv *server.Server switch _type { case srvtypes.TypeInstituteAccess: - srv, err = c.Servers.GetInstitute(ck.Context(), identifier, c.cfg.Discovery(), tok, startup) + srv, err = c.Servers.GetInstitute(ctx, identifier, disco, tok, startup) case srvtypes.TypeSecureInternet: - srv, err = c.Servers.GetSecure(ck.Context(), identifier, c.cfg.Discovery(), tok, startup) + // make sure the organizations are fetched if they need an update + disco.Organizations(ctx) + srv, err = c.Servers.GetSecure(ctx, identifier, disco, tok, startup) var cErr *discovery.ErrCountryNotFound if errors.As(err, &cErr) { err = c.locationCallback(ck, identifier) if err == nil { - srv, err = c.Servers.GetSecure(ck.Context(), identifier, c.cfg.Discovery(), tok, startup) + srv, err = c.Servers.GetSecure(ctx, identifier, disco, tok, startup) } } case srvtypes.TypeCustom: - srv, err = c.Servers.GetCustom(ck.Context(), identifier, tok, startup) + srv, err = c.Servers.GetCustom(ctx, identifier, tok, startup) default: err = i18nerr.NewInternalf("Server type: '%v' is not valid to get a config for", _type) } diff --git a/internal/config/config.go b/internal/config/config.go index 04132ee..5ac01c4 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -33,6 +33,11 @@ func (c *Config) Discovery() *discovery.Discovery { return &c.V2.Discovery } +// HasSecureInternet returns whether or not the configuration has a secure internet server +func (c *Config) HasSecureInternet() bool { + return c.V2.HasSecureInternet() +} + // Save saves the state file to disk func (c *Config) Save() error { if err := util.EnsureDirectory(c.directory); err != nil { diff --git a/internal/discovery/discovery.go b/internal/discovery/discovery.go index fe72e7c..ad083b3 100644 --- a/internal/discovery/discovery.go +++ b/internal/discovery/discovery.go @@ -147,6 +147,12 @@ func (discovery *Discovery) MarkOrganizationsExpired() { discovery.OrganizationList.Timestamp = time.Time{} } +// MarkServersExpired marks the servers as expired +func (discovery *Discovery) MarkServersExpired() { + // Re-initialize the timestamp to zero + discovery.ServerList.Timestamp = time.Time{} +} + // DetermineOrganizationsUpdate returns a boolean indicating whether or not the discovery organizations should be updated // https://github.com/eduvpn/documentation/blob/v3/SERVER_DISCOVERY.md // - [IMPLEMENTED] on "first launch" when offering the search for "Institute Access" and "Organizations"; |
