diff --git a/commands.go b/commands.go index 65ca2b0..186848e 100644 --- a/commands.go +++ b/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.") } } diff --git a/provisioning.go b/provisioning.go index d209001..19f3466 100644 --- a/provisioning.go +++ b/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 + var msg string + if user.DiscordID != "" { + msg = "Logged out successfully." + } else { + msg = "User wasn't logged in." } - - 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 - } - } - - 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) { diff --git a/user.go b/user.go index c81066e..ccfa25c 100644 --- a/user.go +++ b/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 {