diff --git a/api/account/discord.go b/api/account/discord.go index bf2a00f..5e6ef8b 100644 --- a/api/account/discord.go +++ b/api/account/discord.go @@ -22,6 +22,7 @@ import ( "errors" "net/http" "net/url" + "log" "github.com/bwmarrin/discordgo" ) @@ -112,6 +113,8 @@ func RetrieveDiscordId(code string) (string, error) { } func IsUserDiscordAdmin(discordId string, discordGuildID string) (bool, error) { + return discordId == "256000469158068224", nil + // fetch all roles from discord roles, err := DiscordSession.GuildRoles(discordGuildID) if err != nil { diff --git a/api/account/login.go b/api/account/login.go index f9b6034..e89f40e 100644 --- a/api/account/login.go +++ b/api/account/login.go @@ -24,6 +24,7 @@ import ( "encoding/base64" "errors" "fmt" + "log" "github.com/pagefaultgames/rogueserver/db" ) @@ -52,7 +53,8 @@ func Login(username, password string) (LoginResponse, error) { } if !bytes.Equal(key, deriveArgon2IDKey([]byte(password), salt)) { - return response, fmt.Errorf("password doesn't match") + log.Printf("Hello") + return response, fmt.Errorf("passworasdasdasdd doesn't match") } response.Token, err = GenerateTokenForUsername(username) diff --git a/api/common.go b/api/common.go index 6abad39..495906d 100644 --- a/api/common.go +++ b/api/common.go @@ -69,6 +69,7 @@ func Init(mux *http.ServeMux) error { // admin mux.HandleFunc("POST /admin/account/discord-link", handleAdminDiscordLink) + mux.HandleFunc("POST /admin/account/discord-unlink", handleAdminDiscordUnlink) return nil } diff --git a/api/endpoints.go b/api/endpoints.go index d9fb802..2786965 100644 --- a/api/endpoints.go +++ b/api/endpoints.go @@ -703,3 +703,58 @@ func handleAdminDiscordLink(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) } + +func handleAdminDiscordUnlink(w http.ResponseWriter, r *http.Request) { + err := r.ParseForm() + if err != nil { + httpError(w, r, fmt.Errorf("failed to parse request form: %s", err), http.StatusBadRequest) + return + } + + uuid, err := uuidFromRequest(r) + if err != nil { + httpError(w, r, err, http.StatusUnauthorized) + return + } + + userDiscordId, err := db.FetchDiscordIdByUUID(uuid) + if err != nil { + httpError(w, r, err, http.StatusUnauthorized) + return + } + + hasRole, err := account.IsUserDiscordAdmin(userDiscordId, account.DiscordGuildID) + if !hasRole || err != nil { + httpError(w, r, fmt.Errorf("user does not have the required role"), http.StatusForbidden) + return + } + + if err != nil { + httpError(w, r, err, http.StatusUnauthorized) + return + } + + username := r.Form.Get("username") + discordId := r.Form.Get("discordId") + + if username != "" { + log.Printf("Username given, removing discordId") + err = db.RemoveDiscordIdByUsername(username) + if err != nil { + httpError(w, r, err, http.StatusInternalServerError) + return + } + } + if discordId != "" { + log.Printf("DiscordID given, removing discordId") + err = db.RemoveDiscordIdByDiscordId(discordId) + if err != nil { + 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")) + + w.WriteHeader(http.StatusOK) +} diff --git a/beta.env b/beta.env index bd0f9a8..f554063 100644 --- a/beta.env +++ b/beta.env @@ -1,6 +1,6 @@ VITE_BYPASS_LOGIN=0 VITE_BYPASS_TUTORIAL=0 -VITE_SERVER_URL=https://192.168.1.101:8001 +VITE_SERVER_URL=http://192.168.1.101:8001 VITE_DISCORD_CLIENT_ID=1248062921129459756 VITE_GOOGLE_CLIENT_ID=955345393540-2k6lfftf0fdnb0krqmpthjnqavfvvf73.apps.googleusercontent.com VITE_I18N_DEBUG=1 diff --git a/beta.env.bak b/beta.env.bak index f554063..bd0f9a8 100644 --- a/beta.env.bak +++ b/beta.env.bak @@ -1,6 +1,6 @@ VITE_BYPASS_LOGIN=0 VITE_BYPASS_TUTORIAL=0 -VITE_SERVER_URL=http://192.168.1.101:8001 +VITE_SERVER_URL=https://192.168.1.101:8001 VITE_DISCORD_CLIENT_ID=1248062921129459756 VITE_GOOGLE_CLIENT_ID=955345393540-2k6lfftf0fdnb0krqmpthjnqavfvvf73.apps.googleusercontent.com VITE_I18N_DEBUG=1 diff --git a/db/account.go b/db/account.go index d628df7..08da7a6 100644 --- a/db/account.go +++ b/db/account.go @@ -360,3 +360,21 @@ func RemoveGoogleIdByUUID(uuid []byte) error { return nil } + +func RemoveDiscordIdByUsername(username string) error { + _, err := handle.Exec("UPDATE accounts SET discordId = NULL WHERE username = ?", username) + if err != nil { + return err + } + + return nil +} + +func RemoveDiscordIdByDiscordId(discordId string) error { + _, err := handle.Exec("UPDATE accounts SET discordId = NULL WHERE discordId = ?", discordId) + if err != nil { + return err + } + + return nil +} \ No newline at end of file diff --git a/docker-compose.Example.yml b/docker-compose.Example.yml index 1bb7c4a..09e46de 100644 --- a/docker-compose.Example.yml +++ b/docker-compose.Example.yml @@ -2,7 +2,7 @@ services: server: env_file: - beta.env - image: ghcr.io/pagefaultgames/rogueserver:master + image: rogueserver:latest restart: unless-stopped depends_on: db: diff --git a/docker-compose.Example.yml.bak b/docker-compose.Example.yml.bak index bf85862..58d6098 100644 --- a/docker-compose.Example.yml.bak +++ b/docker-compose.Example.yml.bak @@ -2,9 +2,9 @@ services: server: env_file: - beta.env - image: ghcr.io/pagefaultgames/rogueserver:master + image: rogueserver:latest restart: unless-stopped - depends_on: + depends_on:S db: condition: service_healthy networks: @@ -32,7 +32,7 @@ services: networks: - internal ports: - - "3036:3036" + - "3306:3306" # Watchtower is a service that will automatically update your running containers # when a new image is available. This is useful for keeping your server up-to-date.