diff --git a/README.md b/README.md index 7f4acdc..9c801a0 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,71 @@ # Nexus Dashboard -**This is a WIP: For Advanced Users** -

- Sublime's custom image + DLU logo

## Features -* Analytics - * Provide reporting to Developers to help better solve issues - * Disabled by default. Set `ALLOW_ANALYTICS` to true to enable + * Account Management: + * Ban, Lock, and Mute accounts (This Mute affects all Characters) + * Email (all optional): + * Require email verification + * Reset Password via Email + * User Registration + * Invitations ( TODO: Implement this ) + * Invitation Only Registration ( TODO: Implement this ) + * Play Key Management: + * Create, Edit, and Add notes to play keys + * View accounts Tied to a play key + * Character Management: + * Rescue: Pull character to a previously visited world + * Restrict Trade: Toggle the character's ability to trade + * Restrict Mail: Toggle the character's ability to send mail + * Restrict Chat: Toggle the character's ability to send chat messages + * Inventory viewer + * View backpack contents, vault, models, and more! + * Stats Viewer + * Moderation: + * Character Names: + * Approve and mark as needs rename + * Pet Names: + * Auto-moderation of Pet names based on already moderated names + * This is a scheduled tack that runs in the background every hour + * Character Association, to see who has requested what name + * Name cleanup: remove names of deleted pets/characters + * Properties: + * Approve and Un-approve Properties + * Property/Model viewer + * Pre-built and UGC model rendering + * View Properties in full 360 in the browser! + * View in LOD0 (High), LOD1(Medium), or LOD2(Low) quality + * Download models + * Bug Reports: + * View and Resolve bug reports + * Logs: + * Command: View commands that have been run + * Activity: View character activity of entering and exiting worlds + * Audit: + * View moderation activity (characters, pets, properties) + * View GM Level changes + * View Send Mail usage + * System: View Extra logging of background activities of Nexus Dashboard + * Send Mail: + * Send Mail to characters + * Attach items to Mail + * Economy Reports: + * Reports are generated as a scheduled background task run every day at 2300 UTC + * Accounts with GM Level 3 and above are ignored + * Item reports: + * Reports numbers of items in existence + * Includes backpack and Vault items + * Currency: + * Reports how much currency that characters posses + * U-Score: + * Reports how much U-Score that characters posses + * Analytics: + * Provide reporting to Developers to help better solve issues + * Disabled by default. Set `ALLOW_ANALYTICS` to true to enable. # Deployment @@ -19,59 +74,54 @@ ```bash docker run -d \ - -e APP_SECRET_KEY='' \ - -e APP_DATABASE_URI='mysql+pymysql://:@:/' \ - # you can include other optional Environment Variables from below like this - -e REQUIRE_PLAY_KEY=True - -p 8000:8000/tcp - -v /path/to/unpacked/client:/app/luclient:rw \ - -v /path/to/cachedir:/app/cache:rw \ # optional for persistent cache for conversions - aronwk/nexus-dashboard:latest + -e APP_SECRET_KEY='' \ + -e APP_DATABASE_URI='mysql+pymysql://:@:/' \ + # you can include other optional Environment Variables from below like this + -e REQUIRE_PLAY_KEY=True + -p 8000:8000/tcp + -v /path/to/unpacked/client:/app/luclient:rw \ + -v /path/to/cachedir:/app/cache:rw \ + aronwk/nexus-dashboard:latest ``` - * /app/luclient must be mapped to the location of an unpacked client - * you only need `res/` and `locale/` from the client, but dropping the whole cleint in there won't hurt + * `/app/luclient` must be mapped to the location of an unpacked client + * you only need `res/` and `locale/` from the client, but dropping the whole client in there won't hurt * Use `fdb_to_sqlite.py` in lcdr's utilities on `res/cdclient.fdb` in the unpacked client to convert the client database to `cdclient.sqlite` - * Put the resulting `cdclient.sqlite` in the res folder: `res/cdclient.sqlite` - * unzip `res/brickdb.zip` in-place - * **Docker will do this for you** - * you should have new folders and files in the following places: + * Put the resulting `cdclient.sqlite` in the res folder: `res/cdclient.sqlite` + +### Environmental Variables + +Please Reference `app/settings.exmaple.py` to see all the variables + + * Required: + * APP_SECRET_KEY (Must be provided) + * APP_DATABASE_URI (Must be provided) + * Everything else is optional and has defaults + +## Manual + + * Copy `app/settings.exmaple.py` to `app/settings.py` and adjust the settings you would like. + * Provide `APP_SECRET_KEY` and `APP_DATABASE_URI` in `app/settings.py` + * app/luclient must contian a copy of an unpacked client + * you only need `res/` and `locale/` from the client, but dropping the whole client in there won't hurt + * Use `fdb_to_sqlite.py` in lcdr's utilities on `res/cdclient.fdb` in the unpacked client to convert the client database to `cdclient.sqlite` + * Put the resulting `cdclient.sqlite` in the res folder: `res/cdclient.sqlite` + * unzip `res/brickdb.zip` in-place + * you should have new folders and files in the following places: * `res/Assemblies/../..` with a bunch of sub folders * `res/Primitives/../..` with a bunch of sub folders * `res/info.xml` * `res/Materials.xml` - -### Environmental Variables - * Required: - * APP_SECRET_KEY (Must be provided) - * APP_DATABASE_URI (Must be provided) - * Optional - * USER_ENABLE_REGISTER (Default: True) - * USER_ENABLE_EMAIL (Default: True, Needs Mail to be configured) - * USER_ENABLE_CONFIRM_EMAIL (Default: True) - * USER_ENABLE_INVITE_USER (Default: False) - * USER_REQUIRE_INVITATION (Default: False) - * ALLOW_ANALYTICS (Default: False) - * REQUIRE_PLAY_KEY (Default: True) - * MAIL_SERVER (Default: smtp.gmail.com) - * MAIL_PORT (Default: 587) - * MAIL_USE_SSL (Default: False) - * MAIL_USE_TLS (Default: True) - * MAIL_USERNAME (Default: None) - * MAIL_PASSWORD (Default: None) - * USER_EMAIL_SENDER_NAME (Default: None) - * USER_EMAIL_SENDER_EMAIL (Default: None) - -## Manual - -Don't, use Docker /s - -TODO: Make manual deployment easier to configure - + * Run: + * `pip install -r requirements.txt` + * `pip install gunicorn` + * `flask db upgrade` + * `gunicorn -b :8000 -w 4 wsgi:app` + * Preferably, you want to setup a systemd service or something to keey this running # Development Please use [Editor Config](https://editorconfig.org/) - * `flask run` to run local dev server + * `flask run` to run local dev server diff --git a/app/__init__.py b/app/__init__.py index e8655d0..dbc4cac 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -230,14 +230,38 @@ def register_settings(app): "pool_pre_ping": True, "pool_use_lifo": True } - app.config['MAIL_SERVER'] = os.getenv('MAIL_SERVER', 'smtp.gmail.com') - app.config['MAIL_PORT'] = os.getenv('MAIL_USE_SSL', 587) - app.config['MAIL_USE_SSL'] = os.getenv('MAIL_USE_SSL', False) - app.config['MAIL_USE_TLS'] = os.getenv('MAIL_USE_TLS', True) - app.config['MAIL_USERNAME'] = os.getenv('MAIL_USERNAME', None) - app.config['MAIL_PASSWORD'] = os.getenv('MAIL_PASSWORD', None) - app.config['USER_EMAIL_SENDER_NAME'] = os.getenv('USER_EMAIL_SENDER_NAME', None) - app.config['USER_EMAIL_SENDER_EMAIL'] = os.getenv('USER_EMAIL_SENDER_EMAIL', None) + app.config['MAIL_SERVER'] = os.getenv( + 'MAIL_SERVER', + app.config['MAIL_SERVER'] + ) + app.config['MAIL_PORT'] = os.getenv( + 'MAIL_USE_SSL', + app.config['MAIL_PORT'] + ) + app.config['MAIL_USE_SSL'] = os.getenv( + 'MAIL_USE_SSL', + app.config['MAIL_USE_SSL'] + ) + app.config['MAIL_USE_TLS'] = os.getenv( + 'MAIL_USE_TLS', + app.config['MAIL_USE_TLS'] + ) + app.config['MAIL_USERNAME'] = os.getenv( + 'MAIL_USERNAME', + app.config['MAIL_USERNAME'] + ) + app.config['MAIL_PASSWORD'] = os.getenv( + 'MAIL_PASSWORD', + app.config['MAIL_PASSWORD'] + ) + app.config['USER_EMAIL_SENDER_NAME'] = os.getenv( + 'USER_EMAIL_SENDER_NAME', + app.config['USER_EMAIL_SENDER_NAME'] + ) + app.config['USER_EMAIL_SENDER_EMAIL'] = os.getenv( + 'USER_EMAIL_SENDER_EMAIL', + app.config['USER_EMAIL_SENDER_EMAIL'] + ) def gm_level(gm_level): diff --git a/app/accounts.py b/app/accounts.py index b3d5b59..e5faafc 100644 --- a/app/accounts.py +++ b/app/accounts.py @@ -61,7 +61,7 @@ def edit_gm_level(id): @gm_level(3) def lock(id): account = Account.query.filter(Account.id == id).first() - account.locked = not account.locked + account.active = account.locked = not account.locked account.save() if account.locked: log_audit(f"Locked ({account.id}){account.username}") @@ -77,7 +77,7 @@ def lock(id): @gm_level(3) def ban(id): account = Account.query.filter(Account.id == id).first() - account.banned = not account.banned + account.active = account.banned = not account.banned account.save() if account.banned: log_audit(f"Banned ({account.id}){account.username}") diff --git a/app/settings.exmaple.py b/app/settings.exmaple.py index f42a4c7..49c0688 100644 --- a/app/settings.exmaple.py +++ b/app/settings.exmaple.py @@ -5,7 +5,7 @@ APP_NAME = "Nexus Dashboard" APP_SYSTEM_ERROR_SUBJECT_LINE = APP_NAME + " system error" APP_SECRET_KEY = "" -APP_DATABASE_URI = "" +APP_DATABASE_URI = "mysql+pymysql://:@:/" # Send Analytics for Developers to better fix issues ALLOW_ANALYTICS = False @@ -20,7 +20,7 @@ WTF_CSRF_TIME_LIMIT = 86400 # Flask-User settings USER_APP_NAME = APP_NAME USER_ENABLE_CHANGE_PASSWORD = True # Allow users to change their password -USER_ENABLE_CHANGE_USERNAME = True # Allow users to change their username +USER_ENABLE_CHANGE_USERNAME = False # Allow users to change their username USER_ENABLE_REGISTER = False # Allow new users to register # Should alwyas be set to true @@ -34,6 +34,15 @@ USER_ENABLE_INVITE_USER = False # Allow users to be invited USER_REQUIRE_INVITATION = False # Only invited users may - WILL DISABLE REGISTRATION USER_ENABLE_FORGOT_PASSWORD = True # Allow users to reset their passwords +MAIL_SERVER = 'smtp.gmail.com' +MAIL_PORT = 587 +MAIL_USE_SSL = False +MAIL_USE_TLS = True +MAIL_USERNAME = None +MAIL_PASSWORD = None +USER_EMAIL_SENDER_NAME = None +USER_EMAIL_SENDER_EMAIL = None + # Require Play Key REQUIRE_PLAY_KEY = True