Thunderstore is a mod database and API for downloading Risk of Rain 2 mods.
- Copy
.env.template
to.env
and modify as you see fit - Run
docker-compose up
- Run
docker-compose exec django python manage.py migrate
in another terminal
Mod packages are .zip
files, with at least the following contents:
/icon.png
- A PNG icon for the mod, must be 256x256 resolution./README.md
- A readme file to be rendered on the mod's page./manifest.json
- A.json
file with the mod's metadata. Required filds are:name
- Name of the mod. Allowed characters:a-z A-Z 0-9 _
. No spaces.description
- A short description of the mod, shown on the mod list. Max 250 characterswebsite_url
- URL of the mod's website (e.g. GitHub repo). Can be empty, but the key must still exists (use an empty string for example).version_number
- Version number of the mod, following the semantic version formatMajor.Minor.Patch
. For example:1.3.2
.
Example manifest.json
contents:
{
"name": "TestMod",
"version_number": "1.1.0",
"website_url": "https://github.com/risk-of-thunder",
"description": "This is a description for a mod. Max length is 250 characters"
}
The REST API swagger documentation can be viewed from /api/docs/
.
At the current moment, the only relevant API is /api/v1/package/
, which lists
all the active mods in the database. A specific mod can also be fetched if
necessary with the /api/v1/package/{uuid4}/
endpoint, where {uuid4}
is
replaced with the mod's uuid4 value.
The admin site can be accessed from /djangoadmin/
. To view the admin site, you
need an admin account.
Assuming docker is being used, the admin account can be created as follows:
docker-compose exec django python manage.py createsuperuser
Do note that if you're running on Windows, you will need to use winpty for running that command.
DEBUG
: Should be either set to false or not at all for productionSECRET_KEY
: A long and random string, used to hash passwords and other data. Should remain secret, as is implied by the name.ALLOWED_HOSTS
: Comma separated list of hostnames this server can be connected with. For examplebeta.thunderstore.io
SERVER_NAME
: The public name of the server, such asbeta.thunderstore.io
PROTOCOL
: The protocol which to use to build URLs to the server. Eitherhttps://
orhttp://
.
To set up GitHub OAuth, head to settings on GitHub (either personal or
organization settings), and from under Developer Settings
select OAuth Apps
.
Create a new OAuth Application, and use {server}/auth/complete/github/
as the
Authorization callback URL, where {server}
is replaced with the protocol and
server name that is accessible. For example for local you could use
http://localhost/auth/complete/github/
, whereas for a live environment
https://beta.thunderstore.io/auth/complete/github/
After creating the OAuth application, you must also provide the following environment variables to the application:
SOCIAL_AUTH_GITHUB_KEY
: TheClient ID
value of the OAuth applicationSOCIAL_AUTH_GITHUB_SECRET
TheClient Secret
value of the OAuth application
To set up a Discord OAuth, head to the Discord developer panel, and create a new
OAuth application. Add a callback URL to {server}/auth/complete/discord/
,
where {server}
is replaced with the protocol and server name that is
accessible. For example for local you could use
http://localhost/auth/complete/discord/
, whereas for a live environment
https://beta.thunderstore.io/auth/complete/discord/
SOCIAL_AUTH_DISCORD_KEY
: TheClient ID
value of the OAuth applicationSOCIAL_AUTH_DISCORD_SECRET
TheClient Secret
value of the OAuth application
You need to set up a google cloud storage bucket and create a service account that has access to the storage bucket.
Set the following variables:
GS_BUCKET_NAME
: The name/id of the storage bucketGS_PROJECT_ID
: The ID of the project the bucket resides inGS_LOCATION
: The subfolder under which the files should be stored in the bucket. Can be left empty or undefined.GS_CREDENTIALS
: Base64 encoded (with no newlines) string of the service account credentials json file, that can be downloaded from google cloud console.
Database configuration is pretty straight forward if using a local database where no SSL is required, but remote database via SSL connections is also supported.
DATABASE_URL
: The database URL to use for a database connectionDB_CLIENT_CERT
: Base64 encoded client certificate to use for the database connection. Will be placed toclient-cert.pem
DB_CLIENT_KEY
: Base64 encoded client key to use for the database connection. Will be placed toclient-key.pem
DB_SERVER_CA
: Base64 encoded server CA to use for the database connection. Will be placed toserver-ca.pem
You can enable caching to the redis backend by supplying a redis URL
REDIS_URL
: The redis database URL to use for caching, e.g.redis://some-host:6379/0