diff --git a/api/common.go b/api/common.go index bd4cf8a..0f93ca4 100644 --- a/api/common.go +++ b/api/common.go @@ -68,11 +68,11 @@ func Init(mux *http.ServeMux) error { mux.HandleFunc("/auth/{provider}/logout", handleProviderLogout) // admin - mux.HandleFunc("POST /admin/account/discord-link", handleAdminDiscordLink) - mux.HandleFunc("POST /admin/account/discord-unlink", handleAdminDiscordUnlink) - mux.HandleFunc("POST /admin/account/google-link", handleAdminGoogleLink) - mux.HandleFunc("POST /admin/account/google-unlink", handleAdminGoogleUnlink) - mux.HandleFunc("GET /admin/account/admin-search", handleAdminSearch) + mux.HandleFunc("POST /admin/account/discordLink", handleAdminDiscordLink) + mux.HandleFunc("POST /admin/account/discordUnlink", handleAdminDiscordUnlink) + mux.HandleFunc("POST /admin/account/googleLink", handleAdminGoogleLink) + mux.HandleFunc("POST /admin/account/googleUnlink", handleAdminGoogleUnlink) + mux.HandleFunc("GET /admin/account/adminSearch", handleAdminSearch) return nil } diff --git a/api/endpoints.go b/api/endpoints.go index 64ac6d6..162900d 100644 --- a/api/endpoints.go +++ b/api/endpoints.go @@ -704,7 +704,13 @@ func handleAdminDiscordLink(w http.ResponseWriter, r *http.Request) { return } - err = db.AddDiscordIdByUsername(discordId, username) + userUuid, err := db.FetchUUIDFromUsername(username) + if err != nil { + httpError(w, r, err, http.StatusInternalServerError) + return + } + + err = db.AddDiscordIdByUUID(discordId, userUuid) if err != nil { httpError(w, r, err, http.StatusInternalServerError) return @@ -754,12 +760,17 @@ func handleAdminDiscordUnlink(w http.ResponseWriter, r *http.Request) { return } - err = db.RemoveDiscordIdByUsername(username) + userUuid, err := db.FetchUUIDFromUsername(username) if err != nil { httpError(w, r, err, http.StatusInternalServerError) return } + err = db.RemoveDiscordIdByUUID(userUuid) + if err != nil { + httpError(w, r, err, http.StatusInternalServerError) + return + } case discordId != "": log.Printf("DiscordID given, removing discordId") err = db.RemoveDiscordIdByDiscordId(discordId) @@ -767,7 +778,6 @@ func handleAdminDiscordUnlink(w http.ResponseWriter, r *http.Request) { httpError(w, r, err, http.StatusInternalServerError) return } - } log.Printf("%s: %s removed discord id %s from username %s", userDiscordId, r.URL.Path, r.Form.Get("discordId"), r.Form.Get("username")) @@ -810,8 +820,14 @@ func handleAdminGoogleLink(w http.ResponseWriter, r *http.Request) { httpError(w, r, fmt.Errorf("username does not exist on the server"), http.StatusNotFound) return } + + userUuid, err := db.FetchUUIDFromUsername(username) + if err != nil { + httpError(w, r, err, http.StatusInternalServerError) + return + } - err = db.AddGoogleIdByUsername(googleId, username) + err = db.AddGoogleIdByUUID(googleId, userUuid) if err != nil { httpError(w, r, err, http.StatusInternalServerError) return @@ -861,12 +877,17 @@ func handleAdminGoogleUnlink(w http.ResponseWriter, r *http.Request) { return } - err = db.RemoveGoogleIdByUsername(username) + userUuid, err := db.FetchUUIDFromUsername(username) if err != nil { httpError(w, r, err, http.StatusInternalServerError) return } + err = db.RemoveGoogleIdByUUID(userUuid) + if err != nil { + httpError(w, r, err, http.StatusInternalServerError) + return + } case googleId != "": log.Printf("DiscordID given, removing googleId") err = db.RemoveGoogleIdByDiscordId(googleId) @@ -874,7 +895,6 @@ func handleAdminGoogleUnlink(w http.ResponseWriter, r *http.Request) { httpError(w, r, err, http.StatusInternalServerError) return } - } log.Printf("%s: %s removed google id %s from username %s", userDiscordId, r.URL.Path, r.Form.Get("googleId"), r.Form.Get("username")) diff --git a/beta.env b/beta.env index 079128a..d472e37 100644 --- a/beta.env +++ b/beta.env @@ -10,4 +10,4 @@ dbuser=pokerogue dbpass=pokerogue dbname=pokeroguedb gameurl=http://{devMachineIP}:8000 -callbackurl=http://{serverIP}:8001 \ No newline at end of file +callbackurl=http://{serverIP}:8001 diff --git a/db/account.go b/db/account.go index 7bacf35..3ee9633 100644 --- a/db/account.go +++ b/db/account.go @@ -68,6 +68,25 @@ func AddGoogleIdByUsername(googleId string, username string) error { return nil } +func AddGoogleIdByUUID(googleId string, uuid []byte) error { + _, err := handle.Exec("UPDATE accounts SET googleId = ? WHERE uuid = ?", googleId, uuid) + if err != nil { + return err + } + + return nil +} + +func AddDiscordIdByUUID(discordId string, uuid []byte) error { + _, err := handle.Exec("UPDATE accounts SET discordId = ? WHERE uuid = ?", discordId, uuid) + if err != nil { + return err + } + + return nil +} + + func FetchUsernameByDiscordId(discordId string) (string, error) { var username string err := handle.QueryRow("SELECT username FROM accounts WHERE discordId = ?", discordId).Scan(&username) @@ -163,6 +182,7 @@ func CheckUsernameExists(username string) (string, error) { if !dbUsername.Valid { return "", nil } + return dbUsername.String, nil } @@ -175,6 +195,7 @@ func FetchLastLoggedInDateByUsername(username string) (string, error) { if !lastLoggedIn.Valid { return "", nil } + return lastLoggedIn.String, nil } @@ -188,7 +209,6 @@ type AdminSearchResponse struct { func FetchAdminDetailsByUsername(dbUsername string) (AdminSearchResponse, error) { var resultUsername, resultDiscordId, resultGoogleId, resultLastLoggedIn, resultRegistered sql.NullString - var username, discordId, googleId, lastLoggedIn, registered string var adminResponse AdminSearchResponse err := handle.QueryRow("SELECT username, discordId, googleId, lastLoggedIn, registered from accounts WHERE username = ?", dbUsername).Scan(&resultUsername, &resultDiscordId, &resultGoogleId, &resultLastLoggedIn, &resultRegistered) @@ -196,42 +216,12 @@ func FetchAdminDetailsByUsername(dbUsername string) (AdminSearchResponse, error) return adminResponse, err } - if resultUsername.Valid { - username = resultUsername.String - } else { - username = "" - } - - if resultDiscordId.Valid { - discordId = resultDiscordId.String - } else { - discordId = "" - } - - if resultGoogleId.Valid { - googleId = resultGoogleId.String - } else { - googleId = "" - } - - if resultLastLoggedIn.Valid { - lastLoggedIn = resultLastLoggedIn.String - } else { - lastLoggedIn = "" - } - - if resultRegistered.Valid { - registered = resultRegistered.String - } else { - registered = "" - } - adminResponse = AdminSearchResponse{ - Username: username, - DiscordId: discordId, - GoogleId: googleId, - LastLoggedIn: lastLoggedIn, - Registered: registered, + Username: resultUsername.String, + DiscordId: resultDiscordId.String, + GoogleId: resultGoogleId.String, + LastLoggedIn: resultLastLoggedIn.String, + Registered: resultRegistered.String, } return adminResponse, nil @@ -426,6 +416,16 @@ func FetchUsernameFromUUID(uuid []byte) (string, error) { return username, nil } +func FetchUUIDFromUsername(username string) ([]byte, error) { + var uuid []byte + err := handle.QueryRow("SELECT uuid FROM accounts WHERE username = ?", username).Scan(&uuid) + if err != nil { + return nil, err + } + + return uuid, nil +} + func RemoveDiscordIdByUUID(uuid []byte) error { _, err := handle.Exec("UPDATE accounts SET discordId = NULL WHERE uuid = ?", uuid) if err != nil {