Updates from Pancake's comments

This commit is contained in:
Opaque02 2024-10-17 10:34:39 +10:00
parent 2e7c596f7f
commit 73a87d6b90
4 changed files with 68 additions and 48 deletions

View File

@ -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
}

View File

@ -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"))
@ -811,7 +821,13 @@ func handleAdminGoogleLink(w http.ResponseWriter, r *http.Request) {
return
}
err = db.AddGoogleIdByUsername(googleId, username)
userUuid, err := db.FetchUUIDFromUsername(username)
if err != nil {
httpError(w, r, err, http.StatusInternalServerError)
return
}
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"))

View File

@ -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 {