Browse Source

Don't return errors from Logout

Tulir Asokan 2 years ago
parent
commit
89985740fd
3 changed files with 24 additions and 58 deletions
  1. 5 5
      commands.go
  2. 7 39
      provisioning.go
  3. 12 14
      user.go

+ 5 - 5
commands.go

@@ -201,15 +201,15 @@ var cmdLogout = &commands.FullHandler{
 		Section:     commands.HelpSectionAuth,
 		Description: "Forget the stored Discord auth token.",
 	},
-	RequiresLogin: true,
 }
 
 func fnLogout(ce *WrappedCommandEvent) {
-	err := ce.User.Logout()
-	if err != nil {
-		ce.Reply("Error logging out: %v", err)
-	} else {
+	wasLoggedIn := ce.User.DiscordID != ""
+	ce.User.Logout()
+	if wasLoggedIn {
 		ce.Reply("Logged out successfully.")
+	} else {
+		ce.Reply("You weren't logged in, but data was re-cleared just to be safe.")
 	}
 }
 

+ 7 - 39
provisioning.go

@@ -5,7 +5,6 @@ import (
 	"context"
 	"encoding/json"
 	"errors"
-	"fmt"
 	"net"
 	"net/http"
 	"strings"
@@ -207,45 +206,14 @@ func (p *ProvisioningAPI) ping(w http.ResponseWriter, r *http.Request) {
 
 func (p *ProvisioningAPI) logout(w http.ResponseWriter, r *http.Request) {
 	user := r.Context().Value("user").(*User)
-	force := strings.ToLower(r.URL.Query().Get("force")) != "false"
-
-	if !user.IsLoggedIn() {
-		jsonResponse(w, http.StatusNotFound, Error{
-			Error:   "You're not logged in",
-			ErrCode: "not logged in",
-		})
-
-		return
-	}
-
-	if user.Session == nil {
-		if force {
-			jsonResponse(w, http.StatusOK, Response{true, "Logged out successfully."})
-		} else {
-			jsonResponse(w, http.StatusNotFound, Error{
-				Error:   "You're not logged in",
-				ErrCode: "not logged in",
-			})
-		}
-
-		return
-	}
-
-	err := user.Logout()
-	if err != nil {
-		user.log.Warnln("Error while logging out:", err)
-
-		if !force {
-			jsonResponse(w, http.StatusInternalServerError, Error{
-				Error:   fmt.Sprintf("Unknown error while logging out: %v", err),
-				ErrCode: err.Error(),
-			})
-
-			return
-		}
+	var msg string
+	if user.DiscordID != "" {
+		msg = "Logged out successfully."
+	} else {
+		msg = "User wasn't logged in."
 	}
-
-	jsonResponse(w, http.StatusOK, Response{true, "Logged out successfully."})
+	user.Logout()
+	jsonResponse(w, http.StatusOK, Response{true, msg})
 }
 
 func (p *ProvisioningAPI) login(w http.ResponseWriter, r *http.Request) {

+ 12 - 14
user.go

@@ -417,32 +417,30 @@ func (user *User) IsLoggedIn() bool {
 	return user.DiscordToken != ""
 }
 
-func (user *User) Logout() error {
+func (user *User) Logout() {
 	user.Lock()
 	defer user.Unlock()
 
-	if user.Session == nil {
-		return ErrNotLoggedIn
-	}
-
-	puppet := user.bridge.GetPuppetByID(user.DiscordID)
-	if puppet.CustomMXID != "" {
-		err := puppet.SwitchCustomMXID("", "")
-		if err != nil {
-			user.log.Warnln("Failed to logout-matrix while logging out of Discord:", err)
+	if user.DiscordID != "" {
+		puppet := user.bridge.GetPuppetByID(user.DiscordID)
+		if puppet.CustomMXID != "" {
+			err := puppet.SwitchCustomMXID("", "")
+			if err != nil {
+				user.log.Warnln("Failed to logout-matrix while logging out of Discord:", err)
+			}
 		}
 	}
 
-	if err := user.Session.Close(); err != nil {
-		return err
+	if user.Session != nil {
+		if err := user.Session.Close(); err != nil {
+			user.log.Warnln("Error closing session:", err)
+		}
 	}
 
 	user.Session = nil
 	user.DiscordID = ""
 	user.DiscordToken = ""
 	user.Update()
-
-	return nil
 }
 
 func (user *User) Connected() bool {