Don't return errors from Logout

This commit is contained in:
Tulir Asokan
2022-11-26 15:18:42 +02:00
parent 96a0351c68
commit 89985740fd
3 changed files with 24 additions and 58 deletions

View File

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

View File

@@ -5,7 +5,6 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"net" "net"
"net/http" "net/http"
"strings" "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) { func (p *ProvisioningAPI) logout(w http.ResponseWriter, r *http.Request) {
user := r.Context().Value("user").(*User) user := r.Context().Value("user").(*User)
force := strings.ToLower(r.URL.Query().Get("force")) != "false" var msg string
if user.DiscordID != "" {
if !user.IsLoggedIn() { msg = "Logged out successfully."
jsonResponse(w, http.StatusNotFound, Error{ } else {
Error: "You're not logged in", msg = "User wasn't logged in."
ErrCode: "not logged in",
})
return
} }
user.Logout()
if user.Session == nil { jsonResponse(w, http.StatusOK, Response{true, msg})
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."})
} }
func (p *ProvisioningAPI) login(w http.ResponseWriter, r *http.Request) { func (p *ProvisioningAPI) login(w http.ResponseWriter, r *http.Request) {

26
user.go
View File

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