summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/client.go36
1 files changed, 29 insertions, 7 deletions
diff --git a/client/client.go b/client/client.go
index 7069573..e18f686 100644
--- a/client/client.go
+++ b/client/client.go
@@ -237,18 +237,26 @@ func (c *Client) Register() error {
return nil
}
+// SaveState saves the internal state to the config
+func (c *Client) SaveState() {
+ log.Logger.Debugf("saving state configuration....")
+ // Save the config
+ if err := c.Config.Save(&c); err != nil {
+ log.Logger.Infof("failed saving state configuration: '%v'", err)
+ }
+}
+
// Deregister 'deregisters' the client, meaning saving the log file and the config and emptying out the client struct.
func (c *Client) Deregister() {
// First of all let's transition the state machine
_ = c.goTransition(StateDeregistered)
+
+ // SaveState saves the configuration
+ c.SaveState()
+
// Close the log file
_ = log.Logger.Close()
- // Save the config
- if err := c.Config.Save(&c); err != nil {
- log.Logger.Infof("failed saving state configuration: '%v'", err)
- }
-
// Empty out the state
*c = Client{}
}
@@ -454,6 +462,8 @@ func (c *Client) AddServer(ck *cookie.Cookie, identifier string, _type srvtypes.
defer func() {
if err != nil {
_ = c.RemoveServer(identifier, _type) //nolint:errcheck
+ } else {
+ c.SaveState()
}
// If we must run callbacks, go to the previous state if we're not in it
if !ni && !c.FSM.InState(previousState) {
@@ -582,6 +592,7 @@ func (c *Client) GetConfig(ck *cookie.Cookie, identifier string, _type srvtypes.
defer func() {
if err == nil {
c.FSM.GoTransition(StateGotConfig) //nolint:errcheck
+ c.SaveState()
} else if !c.FSM.InState(previousState) {
// go back to the previous state if an error occurred
c.FSM.GoTransition(previousState) //nolint:errcheck
@@ -664,6 +675,7 @@ func (c *Client) RemoveServer(identifier string, _type srvtypes.Type) (err error
if mErr != nil {
log.Logger.Debugf("failed to remove server with identifier: '%s' and type: '%d', error: %v", identifier, _type, mErr)
}
+ c.SaveState()
return nil
}
@@ -800,7 +812,11 @@ func (c *Client) SetProfileID(pID string) (err error) {
if err != nil {
return err
}
- return server.Profile(srv, pID)
+ err = server.Profile(srv, pID)
+ if err == nil {
+ c.SaveState()
+ }
+ return err
}
func (c *Client) Cleanup(ck *cookie.Cookie) (err error) {
@@ -809,6 +825,7 @@ func (c *Client) Cleanup(ck *cookie.Cookie) (err error) {
if err != nil {
return i18nerr.Wrap(err, "Failed to get the current server to cleanup the connection")
}
+ defer c.SaveState()
err = c.updateTokens(srv)
if err != nil {
log.Logger.Debugf("failed to update tokens for disconnect: %v", err)
@@ -838,7 +855,11 @@ func (c *Client) SetSecureLocation(ck *cookie.Cookie, countryCode string) (err e
return err
}
- return c.Servers.SecureInternetHomeServer.Location(ck.Context(), dSrv)
+ err = c.Servers.SecureInternetHomeServer.Location(ck.Context(), dSrv)
+ if err == nil {
+ c.SaveState()
+ }
+ return err
}
func (c *Client) RenewSession(ck *cookie.Cookie) (err error) {
@@ -861,6 +882,7 @@ func (c *Client) RenewSession(ck *cookie.Cookie) (err error) {
log.Logger.Debugf("failed to forward tokens after renew: %v", terr)
}
}()
+ defer c.SaveState()
// TODO: Maybe this can be deleted because we force auth now
server.MarkTokensForRenew(srv)
// run the callbacks by forcing auth