diff options
author | kali kaneko (leap communications) <kali@leap.se> | 2021-03-11 04:37:51 +0100 |
---|---|---|
committer | kali kaneko (leap communications) <kali@leap.se> | 2021-03-11 17:20:50 +0100 |
commit | da761575541809a3a91fad3e469aa3079f435f65 (patch) | |
tree | 06b0183f9d57079f28ffc44420c1b32c056c2b93 /pkg/backend | |
parent | c4bfc04603c361e6a3833f5846d311a73073cd18 (diff) |
[bug] fail gracefully on connection initialization errors
There's some corner cases that were very badly captured. On the first
place, it's confusing to quit on connection errors.
Secondly, a side-effect of aborting the initialization of the bitmask
object was a semi-random segfault when trying to access the object.
Here I pass any connection errors to the gui, but leave to the user to
quit the app. This probably will need more work when we want to
terminate the app on unrecoverable errors (no polkit, etc...), but for
now it makes the systray much more usable.
- Resolves: #465
Diffstat (limited to 'pkg/backend')
-rw-r--r-- | pkg/backend/actions.go | 6 | ||||
-rw-r--r-- | pkg/backend/api.go | 6 | ||||
-rw-r--r-- | pkg/backend/init.go | 11 |
3 files changed, 14 insertions, 9 deletions
diff --git a/pkg/backend/actions.go b/pkg/backend/actions.go index 725a550..e45b026 100644 --- a/pkg/backend/actions.go +++ b/pkg/backend/actions.go @@ -2,14 +2,14 @@ package backend import ( "log" - "os" ) func startVPN() { + setError("") err := ctx.bm.StartVPN(ctx.Provider) if err != nil { - log.Println(err) - os.Exit(1) + log.Println("ERROR: ", err) + setError(err.Error()) } } diff --git a/pkg/backend/api.go b/pkg/backend/api.go index a799b0e..293dd9e 100644 --- a/pkg/backend/api.go +++ b/pkg/backend/api.go @@ -38,6 +38,12 @@ func Login(username, password string) { go ctx.updateStatus() } +func setError(err string) { + ctx.Errors = err + go setStatus(off) + go ctx.updateStatus() +} + func SwitchOn() { go setStatus(starting) go startVPN() diff --git a/pkg/backend/init.go b/pkg/backend/init.go index f76ab49..7d7a534 100644 --- a/pkg/backend/init.go +++ b/pkg/backend/init.go @@ -47,7 +47,7 @@ func checkErrors(errCh chan string) { func initializeBitmask(errCh chan string, opts *InitOpts) { if ctx == nil { - log.Println("bug: cannot initialize bitmask, ctx is nil!") + log.Println("BUG: cannot initialize bitmask, ctx is nil!") os.Exit(1) } bitmask.InitializeLogger() @@ -63,7 +63,7 @@ func initializeBitmask(errCh chan string, opts *InitOpts) { b, err := bitmask.InitializeBitmask(ctx.cfg) if err != nil { - log.Println("error: cannot initialize bitmask") + log.Println("ERROR: cannot initialize bitmask") errCh <- err.Error() return } @@ -72,19 +72,18 @@ func initializeBitmask(errCh chan string, opts *InitOpts) { helpers, privilege, err := b.VPNCheck() if err != nil { - log.Println("error doing vpn check") + log.Println("ERROR: vpn check") errCh <- err.Error() } if helpers == false { - log.Println("no helpers") + log.Println("ERROR: no helpers") errCh <- "nohelpers" } if privilege == false { - log.Println("no polkit") + log.Println("ERROR: no polkit") errCh <- "nopolkit" } - ctx.bm = b } |