Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Misc] PR that brings back local testing capabilities #61

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 44 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,41 +11,55 @@ There is a sample docker-compose file for setting up a docker container to setup
- npm: [how to install](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)

## Installation:
The docker compose file should automatically implement a container with mariadb with an empty database and the default user and password combo of pokerogue:pokerogue

### src/utils.ts:224-225 (in pokerogue)
Replace both URLs (one on each line) with the local API server address from rogueserver.go (0.0.0.0:8001) (or whatever port you picked)

# If you are on Windows

Now that all of the files are configured: start up powershell as administrator:
### First Steps
- Edit beta.env
- Setting VITE_BYPASS_LOGIN to 0 helps provide access to PokeRogue's accounts features
- If testing locally without an S3 instance, set local to true.
- gameurl should reference the IP of your development machine
- callbackurl should reference the IP of your server
- Edit docker-compose.Example.yml
- Under services->server, add the following lines right above image: rogueserver:latest
```
env_file:
- beta.env
```
- Under services->db, add the port the database will use.
```
ports:
- "3306:3306"
```
### Booting up Rogueserver
- First, compile the code with
```
cd C:\api\server\location\
go build .
.\rogueserver.exe --debug --dbuser yourusername --dbpass yourpassword
```
The other available flags are located in rogueserver.go:34-43.

Then in another run this the first time then run `npm run start` from the rogueserver location from then on:
- Then run the command
```
powershell -ep bypass
cd C:\server\location\
npm install
npm run start
docker build ./ -t rogueserver
```
You will need to allow the port youre running the API (8001) on and port 8000 to accept inbound connections through the [Windows Advanced Firewall](https://www.youtube.com/watch?v=9llH5_CON-Y).

# If you are on Linux
In whatever shell you prefer, run the following:
- Finally, run the command with the Docker file you just configured!
```
cd /api/server/location/
go build .
./rogueserver --debug --dbuser yourusername --dbpass yourpassword &

cd /server/location/
npm run start
docker-compose -f docker-compose.Example.yml up -d
```
### Connecting your PokeRogue to RogueServer
- Find .env.development in your PokeRogue repo and update it with the following changes
- To access PokeRogue's account features, you need to set VITE_BYPASS_LOGIN to 0 here too
- Update VITE_SERVER_URL with the correct machine if your server is running on a different machine than your development machine.
- In utils.ts, around lines 280-300, remove the Secure headers from the document.cookie variables. For example:
```
document.cookie = `${cName}=${cValue};Secure;SameSite=Strict;Domain=${window.location.hostname};Path=/;Expires=${expiration.toUTCString()}`;
```
should be changed to
```
document.cookie = `${cName}=${cValue};SameSite=Strict;Domain=${window.location.hostname};Path=/;Expires=${expiration.toUTCString()}`;
```

The docker compose file should automatically implement a container with mariadb with an empty database and the default user and password combo of pokerogue:pokerogue

# If you are on Windows
You will need to allow the port youre running the API (8001) on and port 8000 to accept inbound connections through the [Windows Advanced Firewall](https://www.youtube.com/watch?v=9llH5_CON-Y).

# If you are on Linux
If you have a firewall running such as ufw on your linux machine, make sure to allow inbound connections on the ports youre running the API and the pokerogue server (8000,8001).
An example to allow incoming connections using UFW:
```
Expand Down Expand Up @@ -80,4 +94,7 @@ Make sure that both 8000 and 8001 are portforwarded on your router.

Test that the server's game and game authentication works from other machines both in and outside of the network. Once this is complete, enjoy!

### Contributors
- Instructions by Opaquer


10 changes: 6 additions & 4 deletions api/daily/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,9 @@
const secondsPerDay = 60 * 60 * 24

var (
scheduler = cron.New(cron.WithLocation(time.UTC))
secret []byte
scheduler = cron.New(cron.WithLocation(time.UTC))
s3scheduler = cron.New(cron.WithLocation(time.UTC))
secret []byte
)

func Init() error {
Expand Down Expand Up @@ -90,7 +91,7 @@

scheduler.Start()

if os.Getenv("AWS_ENDPOINT_URL_S3") != "" {
if os.Getenv("AWS_ENDPOINT_URL_S3") != "" && !db.isLocalInstance() {

Check failure on line 94 in api/daily/common.go

View workflow job for this annotation

GitHub Actions / Build (linux)

undefined: db.isLocalInstance (typecheck)

Check failure on line 94 in api/daily/common.go

View workflow job for this annotation

GitHub Actions / Build (linux)

undefined: db.isLocalInstance) (typecheck)

Check failure on line 94 in api/daily/common.go

View workflow job for this annotation

GitHub Actions / Build (linux)

undefined: db.isLocalInstance

Check failure on line 94 in api/daily/common.go

View workflow job for this annotation

GitHub Actions / Build (windows)

undefined: db.isLocalInstance
go func() {
for {
err = S3SaveMigration()
Expand Down Expand Up @@ -138,7 +139,7 @@
}

for _, user := range accounts {
data, err := db.ReadSystemSaveData(user)
data, err := db.ReadSystemSaveDataS3(user)
if err != nil {
continue
}
Expand All @@ -158,6 +159,7 @@
Key: aws.String(username),
Body: bytes.NewReader(json),
})

if err != nil {
log.Printf("error while saving data in S3 for user %s: %s", username, err)
continue
Expand Down
3 changes: 1 addition & 2 deletions api/endpoints.go
Original file line number Diff line number Diff line change
Expand Up @@ -415,14 +415,13 @@ func handleSystem(w http.ResponseWriter, r *http.Request) {
}
}

save, err := savedata.GetSystem(uuid)
save, err := db.ReadSystemSaveData(uuid)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
http.Error(w, err.Error(), http.StatusNotFound)
} else {
httpError(w, r, fmt.Errorf("failed to get system save data: %s", err), http.StatusInternalServerError)
}

return
}

Expand Down
9 changes: 0 additions & 9 deletions api/savedata/system.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,6 @@ import (
"github.com/pagefaultgames/rogueserver/defs"
)

func GetSystem(uuid []byte) (defs.SystemSaveData, error) {
system, err := db.ReadSystemSaveData(uuid)
if err != nil {
return system, err
}

return system, nil
}

func UpdateSystem(uuid []byte, data defs.SystemSaveData) error {
if data.TrainerId == 0 && data.SecretId == 0 {
return fmt.Errorf("invalid system data")
Expand Down
1 change: 1 addition & 0 deletions beta.env
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ VITE_DISCORD_CLIENT_ID=1248062921129459756
VITE_GOOGLE_CLIENT_ID=955345393540-2k6lfftf0fdnb0krqmpthjnqavfvvf73.apps.googleusercontent.com
VITE_I18N_DEBUG=1
debug=true
local=false
dbaddr=db
dbuser=pokerogue
dbpass=pokerogue
Expand Down
16 changes: 8 additions & 8 deletions db/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
"database/sql"
"fmt"
"log"
"os"
"strconv"

_ "github.com/go-sql-driver/mysql"
)
Expand All @@ -44,10 +46,10 @@
if err != nil {
log.Fatal(err)
}

err = setupDb(tx)
local, _ := strconv.ParseBool(os.Getenv("debug"))
err = setupDb(tx, local)
if err != nil {
tx.Rollback()

Check failure on line 52 in db/db.go

View workflow job for this annotation

GitHub Actions / Build (windows)

Error return value of `tx.Rollback` is not checked (errcheck)
log.Fatal(err)
}

Expand All @@ -59,7 +61,7 @@
return nil
}

func setupDb(tx *sql.Tx) error {
func setupDb(tx *sql.Tx, local bool) error {
queries := []string{
// MIGRATION 000

Expand Down Expand Up @@ -108,13 +110,11 @@
// MIGRATION 004

`ALTER TABLE accounts ADD COLUMN IF NOT EXISTS isInLocalDb TINYINT(1) NOT NULL DEFAULT 1`,

// ----------------------------------
}
if !local {
// MIGRATION 005

`ALTER TABLE accounts DROP COLUMN IF EXISTS isInLocalDb`,
queries = append(queries, `ALTER TABLE accounts DROP COLUMN IF EXISTS isInLocalDb`)
}

for _, q := range queries {
_, err := tx.Exec(q)
if err != nil {
Expand Down
43 changes: 43 additions & 0 deletions db/savedata.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"encoding/gob"
"encoding/json"
"os"
"strconv"

"github.com/klauspost/compress/zstd"
"github.com/pagefaultgames/rogueserver/defs"
Expand Down Expand Up @@ -59,7 +60,49 @@ func ReadSeedCompleted(uuid []byte, seed string) (bool, error) {
return count > 0, nil
}

func isLocalInstance() bool {
isLocal, _ := strconv.ParseBool(os.Getenv("debug"))
return isLocal
}

func ReadSystemSaveData(uuid []byte) (defs.SystemSaveData, error) {
var system defs.SystemSaveData
var err error
if isLocalInstance() {
system, err = ReadSystemSaveDataLocal(uuid)
} else {
system, err = ReadSystemSaveDataS3(uuid)
}
if err != nil {
return system, err
}
return system, nil
}

func ReadSystemSaveDataLocal(uuid []byte) (defs.SystemSaveData, error) {
var system defs.SystemSaveData
_, err := isSaveInLocalDb(uuid)
if err != nil {
return system, err
}
var data []byte
err = handle.QueryRow("SELECT data FROM systemSaveData WHERE uuid = ?", uuid).Scan(&data)
if err != nil {
return system, err
}
return system, nil
}

func isSaveInLocalDb(uuid []byte) (bool, error) {
var isLocal bool
err := handle.QueryRow("SELECT isInLocalDb FROM accounts WHERE uuid = ?", uuid).Scan(&isLocal)
if err != nil {
return false, err
}
return isLocal, nil
}

func ReadSystemSaveDataS3(uuid []byte) (defs.SystemSaveData, error) {
// get and return save from S3
system, err := GetSystemSaveFromS3(uuid)
if err == nil {
Expand Down
Loading