Giter Site home page Giter Site logo

resaec / psfportal Goto Github PK

View Code? Open in Web Editor NEW

This project forked from psforever/psfportal

0.0 0.0 0.0 1.28 MB

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

Home Page: https://play.psforever.net

JavaScript 24.41% HTML 0.33% PLpgSQL 1.57% SCSS 2.81% Svelte 70.88%

psfportal's Introduction

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:

> [email protected] dev /home/chord/PSFPortal
> concurrently --kill-others "npm run dev-server" "npm run webpack"

[1]
[1] > [email protected] webpack /home/chord/PSFPortal
[1] > webpack-dev-server --history-api-fallback --config webpack.config.cjs --content-base public
[1]
[0]
[0] > [email protected] 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.
> [email protected] 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.

psfportal's People

Contributors

dependabot[bot] avatar geekofwires avatar jgillich avatar mazo avatar pschord avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.