summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/client.go23
-rw-r--r--internal/config/config.go5
-rw-r--r--internal/discovery/discovery.go6
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";