Skip to content

divviup/divviup-api

Repository files navigation

Divvi Up API Server and web app

Badges

  • Coverage Status
  • Rust CI
  • TypeScript CI
  • Docker Build

API Specification:

Configuring and running

System requirements

Some Rust dependencies require additional system dependencies. These can be installed with your usual package manager:

  • C compiler (GCC or Clang)
  • CMake

Local Development

This will get you up and running quickly for development purposes.

  1. Clone the repository and navigate to its root.
  2. Execute echo "http://localhost:8080" >app/public/api_url
  3. Execute docker compose watch.
  4. Navigate in your browser to http://localhost:8081/.

docker compose will automatically reload containers when you make changes. Data is persisted until you docker compose rm --volumes.

Two Janus aggregators will be created for you, but are not automatically paired to divviup-api. Their information is:

  1. Address: http://janus_1_aggregator:8080/aggregator-api, Token: 0000
  2. Address: http://janus_2_aggregator:8080/aggregator-api, Token: 0000

If you need to talk to these aggregators from outside compose's network namespace, e.g. with a testing client, they are mapped to localhost:9001 and localhost:9002, respectively.

If using the divviup CLI, consider compiling with the --features admin option. Also, set these environment variables.

# This token is intentionally blank, but you'll still need to set the variable.
export DIVVIUP_TOKEN=
export DIVVIUP_API_URL=http://localhost:8080

# Set this for any account-specific commands. Since divviup-api in dev mode will automatically
# authenticate you as an admin, it won't know which account to target.
export DIVVIUP_ACCOUNT_ID={account uuid}

PostgreSQL is exposed on port 5432 with username and password postgres.

If you need to iterate on database migrations, you may wish to disable the divviup_api_migrate service by commenting it out in compose.yaml.

Security Notes

  • We do not have CSRF protections because we only accept a custom content type for non-idempotent request methods such as POST, and have constrained CORS rules.