Skip to content

An API + webapp to manage PSForever accounts, characters, and servers.

Notifications You must be signed in to change notification settings

psforever/PSFPortal

Repository files navigation

PSFPortal

An API + webapp to manage PSForever accounts, characters, and servers.

Features

  • User registration, login, and sessions
  • Home page
  • Admin management

Upcoming Features

  • Email verification + captcha
  • Changing passwords
  • WorldServer mangement

Developing

This requires a relatively modern version of Node that supports async/await and ES6 (v13.x+). Tested using v13.3.0. Do not use LTS builds. You may still get (node:61412) ExperimentalWarning: The ESM module loader is experimental.. Ignore this as ESM is essentially stable in recent versions.

Windows users: Before continuing, run npm install --global --production windows-build-tools. Otherwise, bcrypt won't install properly.

First download and install the Node dependencies:

git clone https://github.com/psforever/PSFPortal
cd PSFPortal/
npm install

You should see no errors (warnings are okay).

Database

Next, install PostgreSQL from your package manager or the following links:

Create a database named psforever using psql or a graphical tool such as pgAdmin (highly recommended). Then create a user named psforever with a password of psforever and GRANT it access to the psforever database, public tables, and public sequences. This can be summarized with the following raw SQL commands:

CREATE USER psforever;
CREATE DATABASE psforever;
GRANT ALL PRIVILEGES ON DATABASE psforever TO psforever;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO psforever;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO psforever;
ALTER USER psforever WITH PASSWORD 'psforever';

Load the DB schema into the database using the command line:

psql psforever < db/schema.sql

Or the pgAdmin's "Query Tool" interface.

Running

Before running, you will need to create a .env file in the root of the project like this:

PGUSER=your_database_user
PGHOST=localhost
PGPASSWORD=your_database_user_password
PSADMIN="127.0.0.1:51002"
PGDATABASE=psforever
PGPORT=5432
COOKIE_SECRET=make_this_very_long_and_random

Never share/release/commit your .env file.

Now run the following command:

# Will start the backend server (:8080) and webpack
npm run dev

You should see similar output:

> psfportal@1.0.0 dev /home/chord/PSFPortal
> concurrently --kill-others "npm run dev-server" "npm run webpack"

[1]
[1] > psfportal@1.0.0 webpack /home/chord/PSFPortal
[1] > webpack-dev-server --history-api-fallback --config webpack.config.cjs --content-base public
[1]
[0]
[0] > psfportal@1.0.0 dev-server /home/chord/PSFPortal
[0] > nodemon -w api/ -w index.js
[0]
[0] [nodemon] 2.0.2
[0] [nodemon] to restart at any time, enter `rs`
[0] [nodemon] watching dir(s): api/**/* index.js
[0] [nodemon] watching extensions: js,mjs,json
[0] [nodemon] starting `node index.js`
[0] (node:16193) ExperimentalWarning: The ESM module loader is experimental.
[0] WARNING: development server simulated delay active
[0] Trusting proxy
[0] Connected to the psql database at localhost
[0] Starting PSAdmin polling for 127.0.0.1:51002
[0] [MODE development] PSFWeb now accepting requests at http://localhost:8080/
[1] ℹ 「wds」: Project is running at http://dev.psforever.net:8081/
[1] ℹ 「wds」: webpack output is served from /
[1] ℹ 「wds」: Content not from webpack is served from /home/chord/PSFPortal/public
[1] ℹ 「wds」: 404s will fallback to /index.html
[1] ℹ 「wdm」: Hash: 72b56958125b6abdf96c
[1] Version: webpack 4.41.5
[1] Time: 4493ms
[1] Built at: 05/12/2020 11:44:23 PM
[1]         Asset      Size  Chunks                   Chunk Names
[1]     bundle.js   2.1 MiB  bundle  [emitted]        bundle
[1] bundle.js.map  2.23 MiB  bundle  [emitted] [dev]  bundle
[1] Entrypoint bundle = bundle.js bundle.js.map
[1] [1] multi (webpack)-dev-server/client?http://dev.psforever.net:8081 ./app/main.js 40 bytes {bundle} [built]
[1] [./app/App.svelte] 14.5 KiB {bundle} [built]
<snip>
[1] ℹ 「wdm」: Compiled successfully.
> psfportal@1.0.0 dev-server
> nodemon -w api/ -w index.js

[nodemon] 2.0.2
[nodemon] to restart at any time, enter `rs`
[nodemon] watching dir(s): api/**/* index.js
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.js`
(node:25327) ExperimentalWarning: The ESM module loader is experimental.
WARNING: development server simulated delay active
Connected to the psql database at localhost
[MODE development] PSFWeb now accepting requests at http://localhost:8080/

Please note that Webpack (dev) will proxy all API requests (/api) to the host http://localhost:8080 (see the devServer key in webpack.config.cjs). This MUST match your backend server's (dev-server) listening port, which is by default 8080.

Finally, connect to http://localhost:8081 (webpack, not the raw express server)

Register an account to start and grant it GM privileges using UPDATE accounts SET gm=true WHERE id=your_id.

Troubleshooting

  1. Database SELECT/INSERTs are failing, but I can connect to the DB

Make sure you have granted the right permissions to your DB user.

GRANT ALL PRIVILEGES ON DATABASE user TO dbname;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO user;
  1. [HPM] Error occurred while trying to proxy request /api/stats from localhost:8080 to http://localhost:8080

Your Webpack instance is listening on 8080, when it should be listening on 8081 and proxying to the express server at 8080. Make sure to run npm run dev-server first and make sure it ran properly.

  1. Error: Cannot find package 'bcrypt'

The bcrypt package has native dependencies that must match your Node version. If you upgrade Node, they will be outdated. To fix this, you need to remove your node_modules/ directory and run npm install again to kick off another native build of this dependency.

Production Running/Building

Follow the same steps as above, but instead run npm run production at the very end.

About

An API + webapp to manage PSForever accounts, characters, and servers.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published