mirror of
https://github.com/pagefaultgames/rogueserver.git
synced 2025-03-31 02:02:54 +08:00
Merge 923e63e98aa4e966ba286e9f36fba1ba63bc1526 into 4d6de1e2a80edfea95783fa9b09aaedf74dfe2c7
This commit is contained in:
commit
1f67b544f0
75
README.md
75
README.md
@ -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:
|
||||
### 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
|
||||
```
|
||||
go build .
|
||||
```
|
||||
- Then run the command
|
||||
```
|
||||
docker build ./ -t rogueserver
|
||||
```
|
||||
- Finally, run the command with the Docker file you just configured!
|
||||
```
|
||||
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
|
||||
|
||||
### 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:
|
||||
```
|
||||
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:
|
||||
```
|
||||
powershell -ep bypass
|
||||
cd C:\server\location\
|
||||
npm install
|
||||
npm run start
|
||||
```
|
||||
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:
|
||||
```
|
||||
cd /api/server/location/
|
||||
go build .
|
||||
./rogueserver --debug --dbuser yourusername --dbpass yourpassword &
|
||||
|
||||
cd /server/location/
|
||||
npm run start
|
||||
```
|
||||
|
||||
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:
|
||||
```
|
||||
@ -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
|
||||
|
||||
|
||||
|
@ -40,8 +40,9 @@ import (
|
||||
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 {
|
||||
@ -90,7 +91,7 @@ func Init() error {
|
||||
|
||||
scheduler.Start()
|
||||
|
||||
if os.Getenv("AWS_ENDPOINT_URL_S3") != "" {
|
||||
if os.Getenv("AWS_ENDPOINT_URL_S3") != "" && !db.isLocalInstance() {
|
||||
go func() {
|
||||
for {
|
||||
err = S3SaveMigration()
|
||||
@ -138,7 +139,7 @@ func S3SaveMigration() error {
|
||||
}
|
||||
|
||||
for _, user := range accounts {
|
||||
data, err := db.ReadSystemSaveData(user)
|
||||
data, err := db.ReadSystemSaveDataS3(user)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
@ -158,6 +159,7 @@ func S3SaveMigration() error {
|
||||
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
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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")
|
||||
|
1
beta.env
1
beta.env
@ -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
|
||||
|
18
db/db.go
18
db/db.go
@ -21,6 +21,8 @@ import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
@ -44,8 +46,8 @@ func Init(username, password, protocol, address, database string) error {
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
err = setupDb(tx)
|
||||
local, _ := strconv.ParseBool(os.Getenv("debug"))
|
||||
err = setupDb(tx, local)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
log.Fatal(err)
|
||||
@ -59,7 +61,7 @@ func Init(username, password, protocol, address, database string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func setupDb(tx *sql.Tx) error {
|
||||
func setupDb(tx *sql.Tx, local bool) error {
|
||||
queries := []string{
|
||||
// MIGRATION 000
|
||||
|
||||
@ -108,13 +110,11 @@ func setupDb(tx *sql.Tx) error {
|
||||
// MIGRATION 004
|
||||
|
||||
`ALTER TABLE accounts ADD COLUMN IF NOT EXISTS isInLocalDb TINYINT(1) NOT NULL DEFAULT 1`,
|
||||
|
||||
// ----------------------------------
|
||||
// MIGRATION 005
|
||||
|
||||
`ALTER TABLE accounts DROP COLUMN IF EXISTS isInLocalDb`,
|
||||
}
|
||||
|
||||
if !local {
|
||||
// MIGRATION 005
|
||||
queries = append(queries, `ALTER TABLE accounts DROP COLUMN IF EXISTS isInLocalDb`)
|
||||
}
|
||||
for _, q := range queries {
|
||||
_, err := tx.Exec(q)
|
||||
if err != nil {
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"encoding/gob"
|
||||
"encoding/json"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"github.com/klauspost/compress/zstd"
|
||||
"github.com/pagefaultgames/rogueserver/defs"
|
||||
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user