summaryrefslogtreecommitdiff
path: root/state.go
diff options
context:
space:
mode:
authorjwijenbergh <jeroenwijenbergh@protonmail.com>2022-09-08 14:53:02 +0200
committerjwijenbergh <jeroenwijenbergh@protonmail.com>2022-09-08 14:53:02 +0200
commiteb21880077d59e5b5fd7aac3353f4c8cc6bcba43 (patch)
tree79411849d098ab3804d451f924c45741b8dfbef9 /state.go
parent7f7b6884d11e0e2b891814b84eb906db284a50b0 (diff)
OAuth: Separate login functions to get rid of callback
Diffstat (limited to 'state.go')
-rw-r--r--state.go31
1 files changed, 21 insertions, 10 deletions
diff --git a/state.go b/state.go
index d77d1b6..965c934 100644
--- a/state.go
+++ b/state.go
@@ -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}
}