diff options
| author | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2022-09-08 14:53:02 +0200 |
|---|---|---|
| committer | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2022-09-08 14:53:02 +0200 |
| commit | eb21880077d59e5b5fd7aac3353f4c8cc6bcba43 (patch) | |
| tree | 79411849d098ab3804d451f924c45741b8dfbef9 /state.go | |
| parent | 7f7b6884d11e0e2b891814b84eb906db284a50b0 (diff) | |
OAuth: Separate login functions to get rid of callback
Diffstat (limited to 'state.go')
| -rw-r--r-- | state.go | 31 |
1 files changed, 21 insertions, 10 deletions
@@ -131,16 +131,24 @@ func (state *VPNState) doAuth(authURL string) error { } func (state *VPNState) ensureLogin(chosenServer server.Server) error { + errorMessage := "failed ensuring login" // Relogin with oauth // This moves the state to authorized if server.NeedsRelogin(chosenServer) { - loginErr := server.Login(chosenServer, state.doAuth) + url, urlErr := server.GetOAuthURL(chosenServer, state.FSM.Name) - if loginErr != nil { - // We are possibly in oauth started - // Go back + state.FSM.GoTransitionWithData(STATE_OAUTH_STARTED, url, true) + + if urlErr != nil { state.GoBack() - return &types.WrappedErrorMessage{Message: "failed ensuring login", Err: loginErr} + return &types.WrappedErrorMessage{Message: errorMessage, Err: urlErr} + } + + exchangeErr := server.OAuthExchange(chosenServer) + + if exchangeErr != nil { + state.GoBack() + return &types.WrappedErrorMessage{Message: errorMessage, Err: exchangeErr} } } // OAuth was valid, ensure we are in the authorized state @@ -208,7 +216,6 @@ func (state *VPNState) getConfig( if configErr != nil { // Go back - state.GoBack() return "", "", &types.WrappedErrorMessage{Message: errorMessage, Err: configErr} } @@ -255,7 +262,7 @@ func (state *VPNState) askSecureLocation() error { // The state has changed, meaning setting the secure location was not successful if state.FSM.Current != STATE_ASK_LOCATION { // TODO: maybe a custom type for this errors.new? - return &types.WrappedErrorMessage{Message: "failed setting secure location", Err: errors.New("failed setting secure location due to state change")} + return &types.WrappedErrorMessage{Message: "failed setting secure location", Err: errors.New("failed loading secure location")} } return nil } @@ -352,6 +359,7 @@ func (state *VPNState) GetConfigSecureInternet( if serverErr != nil { state.RemoveSecureInternet() + state.GoBack() return "", "", &types.WrappedErrorMessage{Message: errorMessage, Err: serverErr} } @@ -397,7 +405,6 @@ func (state *VPNState) addCustomServer(url string) (server.Server, error) { server, serverErr := state.Servers.AddCustomServer(customServer) if serverErr != nil { - state.RemoveCustomServer(url) return nil, &types.WrappedErrorMessage{Message: errorMessage, Err: serverErr} } @@ -413,6 +420,7 @@ func (state *VPNState) GetConfigInstituteAccess(url string, forceTCP bool) (stri if serverErr != nil { state.RemoveInstituteAccess(url) + state.GoBack() return "", "", &types.WrappedErrorMessage{Message: errorMessage, Err: serverErr} } @@ -488,12 +496,14 @@ func (state *VPNState) SetProfileID(profileID string) error { errorMessage := "failed to set the profile ID for the current server" server, serverErr := state.Servers.GetCurrentServer() if serverErr != nil { + state.GoBack() return &types.WrappedErrorMessage{Message: errorMessage, Err: serverErr} } base, baseErr := server.GetBase() if baseErr != nil { + state.GoBack() return &types.WrappedErrorMessage{Message: errorMessage, Err: baseErr} } base.Profiles.Current = profileID @@ -618,10 +628,11 @@ func (state *VPNState) RenewSession() error { return &types.WrappedErrorMessage{Message: errorMessage, Err: currentServerErr} } - loginErr := server.Login(currentServer, state.doAuth) + // FIXME: Delete tokens? + + loginErr := state.ensureLogin(currentServer) if loginErr != nil { // Go back - state.GoBack() return &types.WrappedErrorMessage{Message: errorMessage, Err: loginErr} } |
