The source code of the main nonshy.com website. https://www.nonshy.com
Go to file
Noah Petherbridge 066765d2dc Chat Moderation Rules + Shy Accounts on Chat
* Add chat moderation rules to the website, so admins can apply selective rules
  to problematic users. Available rules are:
  * redcam: user's camera is always NSFW.
  * nobroadcast: user can not broadcast their camera.
  * novideo: user can not broadcast OR watch any video.
  * noimage: user can not share OR see any shared image on chat.
* The page to manage a user's active rules is available on their admin card of
  their profile page. When the user has rules active, a yellow counter is shown
  by the link to manage their rules.
  * Only chat moderator admins have access to the page or can see the yellow
    counter to know whether rules are active.
* "Shy Accounts" are now permitted on the chat room! With some moderation rules
  automatically applied to them: novideo,noimage.
* Update the Shy Account FAQ and messaging on the chat landing page.
* Update the auto-kick from chat behavior regarding shy accounts:
  * They are kicked from chat only when an update to their profile settings will
    transition then FROM a non-shy into a shy account.
  * For example: when saving their profile settings (going private) or when
    editing or deleting a photo (if they will have no more public photos left)
2024-09-19 19:30:02 -07:00
cmd/nonshy Search By Location 2024-08-03 14:54:22 -07:00
docs Unit tests and code cleanup for cold storage 2024-05-30 16:59:21 -07:00
pkg Chat Moderation Rules + Shy Accounts on Chat 2024-09-19 19:30:02 -07:00
web Chat Moderation Rules + Shy Accounts on Chat 2024-09-19 19:30:02 -07:00
.gitignore Cold Storage with One-Way RSA Encryption 2024-05-29 23:20:24 -07:00
CONTRIBUTING.md Rename the module 2022-08-25 21:21:46 -07:00
go.mod go mod tidy 2024-07-21 02:48:36 +00:00
go.sum go mod tidy 2024-07-21 02:48:36 +00:00
LICENSE Rename the module 2022-08-25 21:21:46 -07:00
Makefile Admin Groups & Permissions 2023-08-01 20:39:48 -07:00
README.md Fix orphaned comment photo worker 2024-07-26 17:35:49 -07:00

nonshy website

This is the source code to the main nonshy.com website. It is written in Go and released under the GNU General Public License.

This website is open source and if you'd like to help work on it (fix bugs or contribute new features), you may sign up an account on the code.nonshy.com server. See the CONTRIBUTING.md file for details.

Dependencies

You may need to run the following services along with this app:

The website can also run out of a local SQLite database which is convenient for local development. The production server runs on PostgreSQL and the web app is primarily designed for that.

PostGIS Extension for PostgreSQL

For the "Who's Nearby" feature to work you will need a PostgreSQL database with the PostGIS geospatial extension installed. Usually it might be a matter of dnf install postgis and activating the extension on your nonshy database as your superuser (postgres):

create extension postgis;

If you get errors like "Type geography not found" from Postgres when running distance based searches, this is the likely culprit.

Building the App

This app is written in Go: go.dev. You can probably get it from your package manager, e.g.

  • macOS: brew install golang with homebrew: brew.sh
  • Linux: it's in your package manager, e.g. apt install golang

Use the Makefile (with GNU make or similar):

  • make setup: install Go dependencies
  • make build: builds the program to ./nonshy
  • make run: run the app from Go sources in debug mode

Or read the Makefile to see what the underlying go commands are, e.g. go run cmd/nonshy/main.go web

Configuring

On first run it will generate a settings.json file in the current working directory (which is intended to be the root of the git clone, with the ./web folder). Edit it to configure mail settings or choose a database.

For simple local development, just set "UseSQLite": true and the app will run with a SQLite database.

Usage

The nonshy binary has sub-commands to either run the web server or perform maintenance tasks such as creating admin user accounts.

Run nonshy --help for its documentation.

Run nonshy web to start the web server.

nonshy web --host 0.0.0.0 --port 8080 --debug

Create Admin User Accounts

Use the nonshy user add command like so:

$ nonshy user add --admin \
  --email name@domain.com \
  --password secret \
  --username admin

Shorthand options -e, -p and -u can work in place of the longer options --email, --password and --username respectively.

After the first admin user is created, you may promote other users thru the web app by using the admin controls on their profile page.

A Brief Tour of the Code

  • cmd/nonshy/main.go: the entry point for the Go program.
  • pkg/webserver.go: the entry point for the web server.
  • pkg/config: mostly hard-coded configuration values - all of the page sizes and business logic controls are in here, set at compile time. For ease of local development you may want to toggle SkipEmailValidation in here - the signup form will then directly allow full signup with a user and password.
  • pkg/controller: the various web endpoint controllers are here, categorized into subpackages (account, forum, inbox, photo, etc.)
  • pkg/log: the logging to terminal functions.
  • pkg/mail: functions for delivering HTML email messages.
  • pkg/markdown: functions to render GitHub Flavored Markdown.
  • pkg/middleware: HTTP middleware functions, for things such as:
    • Session cookies
    • Authentication (LoginRequired, AdminRequired)
    • CSRF protection
    • Logging HTTP requests
    • Panic recovery for unhandled server errors
  • pkg/models: the SQL database models and query functions are here.
    • pkg/models/deletion: the code to fully scrub wipe data for user deletion (GDPR/CCPA compliance).
  • pkg/photo: photo management functions: handle uploads, scale and crop, generate URLs and deletion.
  • pkg/ratelimit: rate limiter for login attempts etc.
  • pkg/redis: Redis cache functions - get/set JSON values for things like session cookie storage and temporary rate limits.
  • pkg/router: the HTTP route URLs for the controllers are here.
  • pkg/session: functions to read/write the user's session cookie (log in/out, get current user, flash messages)
  • pkg/templates: functions to handle HTTP responses - render HTML templates, issue redirects, error pages, ...
  • pkg/utility: miscellaneous useful functions for the app.

Cron workers

You can schedule the nonshy vacuum command in your crontab. This command will check and clean up the database for things such as: orphaned comment photos (where somebody uploaded a photo to post on the forum, but then didn't finish creating their post).

0 2 * * *  cd /home/nonshy/git/website && ./nonshy vacuum

License

GPLv3.