Resolves #1408. A rule with match "METHOD" carries a comma-separated list of HTTP methods in its value, e.g. "POST,PUT", and applies when the request method is in that list. This makes it possible to leave GET public while sending POST and PUT to auth, which rules could not express before because both share the same path. No new columns: the methods live in the existing rule value, so this needs no migration and every existing rule keeps working unchanged. The UI offers the ten registered methods. Blueprints and the API accept any method token, so extension methods such as the WebDAV verbs can be targeted too, and the UI preserves them when a rule set that way is edited later.
Database
Pangolin can use a Postgres or SQLite database to store its data.
Development
Postgres
To use Postgres, edit server/db/index.ts to export all from server/db/pg/index.ts:
export * from "./pg";
Make sure you have a valid config file with a connection string:
postgres:
connection_string: postgresql://postgres:postgres@localhost:5432
You can run an ephemeral Postgres database for local development using Docker:
docker run -d \
--name postgres \
--rm \
-p 5432:5432 \
-e POSTGRES_PASSWORD=postgres \
-v $(mktemp -d):/var/lib/postgresql/data \
postgres:17
Schema
server/db/pg/schema.ts and server/db/sqlite/schema.ts contain the database schema definitions. These need to be kept in sync with with each other.
Stick to common data types and avoid Postgres-specific features to ensure compatibility with SQLite.
SQLite
To use SQLite, edit server/db/index.ts to export all from server/db/sqlite/index.ts:
export * from "./sqlite";
No edits to the config are needed. If you keep the Postgres config, it will be ignored.
Generate and Push Migrations
Ensure drizzle-kit is installed.
Postgres
You must have a connection string in your config file, as shown above.
npm run db:generate
npm run db:push
SQLite
npm run db:generate
npm run db:push
Build Time
There is a dockerfile for each database type. The dockerfile swaps out the server/db/index.ts file to use the correct database type.