Skip to content

Commit 30d5459

Browse files
v2 optimise performance + security (#466)
* Update project struct * fix: modify models * fix: config & deps - data_store - memory_store - events * update twilio provider * feat: add common config + jwt provider * fix: warning * fix: setup dependency injection * chore: update all services * chore: update graphql + http handler * chore: fix remove logrus * chore: add logs for gql * chore: update encryption and make clientID & secret required * chore: fix db tests * chore: fix couchbase db test * chore: add test for memory store * chore: add test for magic link login * chore: add test for logout * chore: add test for update profile * chore: add test for verify email * chore: add test for resend verify email * chore: add test for forgot password * chore: add admin login and update user * chore: add reset password test * chore: add test for revoke gql * chore: fix http handler * chore add test for verify otp * chore: add test for resend otp * chore: add test for account deactivation * added admin integration tests * chore: add session test * chore: add profile test * chore: standardize params * chore: add test for validate session * chore: add oauth config * chore: add logs deps * chore: fix add jwk config * chore: fix context * chore: update web apps * chore: delete node_modules * chore: update gitignore * chore: fix vulnerabilities * fix docker build * chore: use db as memory store provider * chore: update the storage session provider requirement * chore: update tests * chore: fix dashboard * chore: update migration.md * chore: update migration.md --------- Co-authored-by: lemonnn-8 <pani.anand90@gmail.com>
1 parent 35c6083 commit 30d5459

539 files changed

Lines changed: 30203 additions & 27423 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/settings.local.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"Bash(go test:*)",
5+
"Bash(docker exec:*)",
6+
"Bash(go build:*)",
7+
"Bash(docker rm:*)",
8+
"Bash(docker run:*)"
9+
]
10+
}
11+
}

.dockerignore

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ ROADMAP.md
77
build
88
.env
99
data.db
10-
app/node_modules
11-
app/build
10+
web/app/node_modules
11+
web/app/build
12+
web/app/.vite
13+
web/dashboard/node_modules
14+
web/dashboard/build
15+
web/dashboard/.vite
1216
certs/
17+
*.log
18+
.DS_Store

.env.sample

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
1-
ENV=production
2-
DATABASE_URL=data.db
3-
DATABASE_TYPE=sqlite
4-
CUSTOM_ACCESS_TOKEN_SCRIPT="function(user,tokenPayload){var data = tokenPayload;data.extra = {'x-extra-id': user.id};return data;}"
5-
DISABLE_PLAYGROUND=true
1+
# Authorizer v2 - Configuration Reference
2+
#
3+
# v2 does NOT read from .env. All configuration must be passed via CLI arguments
4+
# when starting the server. This file serves as a reference for mapping env vars
5+
# to CLI flags. See MIGRATION.md for the full mapping.
6+
#
7+
# Example: ./authorizer --database-type=sqlite --database-url=data.db \
8+
# --client-id=... --client-secret=... --admin-secret=...
9+
#
10+
# v1 env var → v2 CLI flag
11+
# ----------------- → -------------------
12+
# ENV → --env
13+
# DATABASE_TYPE → --database-type
14+
# DATABASE_URL → --database-url
15+
# CLIENT_ID → --client-id (required)
16+
# CLIENT_SECRET → --client-secret (required)
17+
# ADMIN_SECRET → --admin-secret
18+
# JWT_TYPE → --jwt-type
19+
# JWT_SECRET → --jwt-secret
20+
# DISABLE_PLAYGROUND → --enable-playground=false
21+
# CUSTOM_ACCESS_TOKEN_SCRIPT → --custom-access-token-script

.env.test

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,28 @@
1-
ENV=test
2-
DATABASE_URL=test.db
3-
DATABASE_TYPE=sqlite
4-
CUSTOM_ACCESS_TOKEN_SCRIPT="function(user,tokenPayload){var data = tokenPayload;data.extra = {'x-extra-id': user.id};return data;}"
5-
SMTP_HOST=smtp.mailtrap.io
6-
SMTP_PORT=2525
7-
SMTP_USERNAME=test
8-
SMTP_PASSWORD=test
9-
SENDER_EMAIL="info@authorizer.dev"
10-
TWILIO_API_KEY=test
11-
TWILIO_API_SECRET=test
12-
TWILIO_ACCOUNT_SID=ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
13-
TWILIO_SENDER=909921212112
14-
SENDER_NAME="Authorizer"
15-
AWS_REGION=ap-south-1
1+
# Authorizer v2 - Test Configuration Reference
2+
#
3+
# v2 does NOT read from .env. For integration tests, config is set in
4+
# internal/integration_tests/test_helper.go (getTestConfig()).
5+
#
6+
# This file documents typical test env values for reference when running
7+
# the server manually with test settings. Use CLI flags:
8+
#
9+
# go run main.go --database-type=sqlite --database-url=test.db \
10+
# --jwt-type=HS256 --jwt-secret=test --admin-secret=admin \
11+
# --client-id=123456 --client-secret=secret
12+
#
13+
# v1 env vars (reference only):
14+
# ENV=test
15+
# DATABASE_URL=test.db
16+
# DATABASE_TYPE=sqlite
17+
# ADMIN_SECRET=admin
18+
# SMTP_HOST=smtp.mailtrap.io
19+
# SMTP_PORT=2525
20+
# SMTP_USERNAME=test
21+
# SMTP_PASSWORD=test
22+
# SENDER_EMAIL=info@authorizer.dev
23+
# SENDER_NAME=Authorizer
24+
# TWILIO_ACCOUNT_SID=ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
25+
# TWILIO_API_KEY=test
26+
# TWILIO_API_SECRET=test
27+
# TWILIO_SENDER=909921212112
28+
# AWS_REGION=ap-south-1

.github/CONTRIBUTING.md

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -32,68 +32,61 @@ Please ask as many questions as you need, either directly in the issue or on [Di
3232

3333
### Prerequisites
3434

35-
- OS: Linux or macOS or windows
36-
- Go: (Golang)(https://golang.org/dl/) >= v1.15
35+
- OS: Linux or macOS or Windows
36+
- [Go](https://golang.org/dl/) >= 1.24 (see `go.mod`)
37+
- [Node.js](https://nodejs.org/) >= 18 and npm (only if building web app or dashboard)
3738

3839
### Familiarize yourself with Authorizer
3940

4041
1. [Architecture of Authorizer](http://docs.authorizer.dev/)
4142
2. [GraphQL APIs](https://docs.authorizer.dev/core/graphql-api/)
43+
3. [Migration Guide (v1 → v2)](../MIGRATION.md) – v2 uses CLI-based configuration
4244

4345
### Project Setup for Authorizer core
4446

4547
1. Fork the [authorizer](https://github.com/authorizerdev/authorizer) repository (**Skip this step if you have access to repo**)
4648
2. Clone repo: `git clone https://github.com/authorizerdev/authorizer.git` or use the forked url from step 1
47-
3. Change directory to authorizer: `cd authorizer`
48-
4. Create Env file `cp .env.sample .env`. Check all the supported env [here](https://docs.authorizer.dev/core/env/)
49-
5. Build Dashboard `make build-dashboard`
50-
6. Build App `make build-app`
51-
7. Build Server `make clean && make`
52-
> Note: if you don't have [`make`](https://www.ibm.com/docs/en/aix/7.2?topic=concepts-make-command), you can `cd` into `server` dir and build using the `go build` command. In that case you will have to build `dashboard` & `app` manually using `npm run build` on both dirs.
53-
8. Run binary `./build/server`
49+
3. Change directory: `cd authorizer`
50+
4. Build the server: `make build` (or `go build -o build/authorizer .`)
51+
5. (Optional) Build the web app and dashboard: `make build-app` and `make build-dashboard`
52+
6. Run locally: `make dev` (uses SQLite and demo secrets for development)
53+
54+
> **v2:** The server does **not** read from `.env`. All configuration is passed via CLI arguments. See [MIGRATION.md](../MIGRATION.md).
5455
5556
### Updating GraphQL schema
5657

57-
- Modify `server/graph/schema.graphqls` file
58-
- Run `make generate-graphql` this will update the models and required methods
59-
- If a new mutation or query is added
60-
- Write the implementation for the new resolver in `server/resolvers/NEW_RESOLVER.GO`
61-
- Update `server/graph/schema.resolvers.go` with the new resolver method
58+
- Modify `internal/graph/schema.graphqls` (or other files in `internal/graph/`)
59+
- Run `make generate-graphql` to regenerate models and resolvers
60+
- If a new mutation or query is added, implement the resolver in `internal/graph/` (resolver layout follows schema)
6261

6362
### Adding support for new database
6463

6564
- Run `make generate-db-template dbname=NEW_DB_NAME`
66-
eg `make generate-db-template dbname=dynamodb`
65+
- e.g. `make generate-db-template dbname=dynamodb`
6766

68-
This command will generate a folder in server/db/providers/ with name specified in the above command.
69-
One will have to implement methods present in that folder.
67+
This generates a folder in `internal/storage/db/` with the specified name. Implement the methods in that folder.
7068

71-
> Note: Connection for database and schema changes are written in `server/db/providers/DB_NAME/provider.go` > `NewProvider` method is called for any given db based on the env variables present.
69+
> Note: Database connection and schema changes are in `internal/storage/db/DB_NAME/provider.go`; `NewProvider` is called for the configured database type.
7270
7371
### Testing
7472

75-
Make sure you test before creating PR.
76-
77-
If you want to test for all the databases that authorizer supports you will have to run `mongodb` & `arangodb` instances locally.
73+
Make sure you test before creating a PR.
7874

79-
Setup mongodb & arangodb using Docker
75+
The main `make test` target spins up Postgres, Redis, ScyllaDB, MongoDB, ArangoDB, DynamoDB, and Couchbase via Docker, runs the Go test suite, then tears down containers.
8076

81-
```
82-
docker run --name mongodb -d -p 27017:27017 mongo
77+
For local development without full DB matrix:
8378

84-
// -e ARANGO_ROOT_PASSWORD=root
85-
docker run --name arangodb -d -p 8529:8529 -e ARANGO_NO_AUTH=1 arangodb/arangodb:3.8.4
79+
```sh
80+
make dev # run server for manual testing
81+
go test -v ./... # run tests (requires Docker for full suite)
8682
```
8783

88-
> Note: If you are not making any changes in db schema / db operations, you can disable those db tests [here](https://github.com/authorizerdev/authorizer/blob/main/server/__test__/resolvers_test.go#L14)
89-
90-
If you are adding new resolver,
84+
If you are adding a new resolver:
9185

92-
1. create new resolver test file [here](https://github.com/authorizerdev/authorizer/tree/main/server/__test__)
93-
Naming convention filename: `resolver_name_test.go` function name: `resolverNameTest(t *testing.T, s TestSetup)`
94-
2. Add your tests [here](https://github.com/authorizerdev/authorizer/blob/main/server/__test__/resolvers_test.go#L38)
86+
1. Create a new test file in `internal/integration_tests/` (naming: `resolver_name_test.go`)
87+
2. Follow the existing pattern using `getTestConfig()` and `initTestSetup()`
9588

96-
**Command to run tests:**
89+
**Command to run full test suite:**
9790

9891
```sh
9992
make test

.github/workflows/release.yaml

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -22,82 +22,80 @@ jobs:
2222
name: Release Authorizer
2323
runs-on: ubuntu-latest
2424
steps:
25-
- uses: actions/checkout@v3
26-
- uses: actions/setup-node@v2
25+
- uses: actions/checkout@v4
26+
- uses: actions/setup-node@v4
2727
with:
28-
node-version: '16'
29-
- # Add support for more platforms with QEMU (optional)
30-
# https://github.com/docker/setup-qemu-action
31-
name: Set up QEMU
32-
uses: docker/setup-qemu-action@v2
28+
node-version: '20'
29+
- name: Set up QEMU
30+
uses: docker/setup-qemu-action@v3
3331
- name: Set up Docker Buildx
34-
uses: docker/setup-buildx-action@v2
32+
uses: docker/setup-buildx-action@v3
3533
with:
3634
platforms: linux/amd64,linux/arm64
37-
- uses: actions/setup-go@v2
35+
- uses: actions/setup-go@v5
3836
with:
39-
go-version: '^1.19.1'
37+
go-version: '1.24'
4038
- name: Install dependencies
4139
run: |
42-
sudo apt-get install build-essential wget zip libc6-dev-arm64-cross && \
43-
echo "/usr/bin/x86_64-w64-mingw32-gcc" >> GITHUB_PATH && \
40+
sudo apt-get install -y build-essential wget zip && \
4441
wget --no-check-certificate --progress=dot:mega https://github.com/wangyoucao577/assets-uploader/releases/download/v0.3.0/github-assets-uploader-v0.3.0-linux-amd64.tar.gz -O github-assets-uploader.tar.gz && \
4542
tar -zxf github-assets-uploader.tar.gz && \
4643
sudo mv github-assets-uploader /usr/sbin/ && \
47-
sudo rm -f github-assets-uploader.tar.gz && \
48-
github-assets-uploader -version && \
49-
make build-app && \
44+
rm -f github-assets-uploader.tar.gz && \
45+
github-assets-uploader -version
46+
- name: Build web app and dashboard
47+
run: |
48+
make build-app
5049
make build-dashboard
51-
- name: Print Go paths
52-
run: whereis go
53-
- name: Print Go Version
54-
run: go version
5550
- name: Install gox
5651
run: go install github.com/mitchellh/gox@latest
5752
- name: Set VERSION env
5853
run: echo VERSION=$(basename ${GITHUB_REF}) >> ${GITHUB_ENV}
59-
- name: Copy .env file
60-
run: mv .env.sample .env
6154
- name: Build package
6255
run: |
63-
make clean && \
64-
make build && \
65-
mkdir -p authorizer-${VERSION}-darwin-arm64/build authorizer-${VERSION}-darwin-arm64/app authorizer-${VERSION}-darwin-arm64/dashboard && cp build/darwin/arm64/server authorizer-${VERSION}-darwin-arm64/build/ && cp .env authorizer-${VERSION}-darwin-arm64/.env && cp -rf app/build authorizer-${VERSION}-darwin-arm64/app/build && cp -rf templates authorizer-${VERSION}-darwin-arm64/ && cp -rf dashboard/build authorizer-${VERSION}-darwin-arm64/dashboard/build && tar cvfz authorizer-${VERSION}-darwin-arm64.tar.gz authorizer-${VERSION}-darwin-arm64 && \
66-
mkdir -p authorizer-${VERSION}-darwin-amd64/build authorizer-${VERSION}-darwin-amd64/app authorizer-${VERSION}-darwin-amd64/dashboard && cp build/darwin/amd64/server authorizer-${VERSION}-darwin-amd64/build/ && cp .env authorizer-${VERSION}-darwin-amd64/.env && cp -rf app/build authorizer-${VERSION}-darwin-amd64/app/build && cp -rf templates authorizer-${VERSION}-darwin-amd64/ && cp -rf dashboard/build authorizer-${VERSION}-darwin-amd64/dashboard/build && tar cvfz authorizer-${VERSION}-darwin-amd64.tar.gz authorizer-${VERSION}-darwin-amd64 && \
67-
mkdir -p authorizer-${VERSION}-linux-amd64/build authorizer-${VERSION}-linux-amd64/app authorizer-${VERSION}-linux-amd64/dashboard && cp build/linux/amd64/server authorizer-${VERSION}-linux-amd64/build/ && cp .env authorizer-${VERSION}-linux-amd64/.env && cp -rf app/build authorizer-${VERSION}-linux-amd64/app/build && cp -rf templates authorizer-${VERSION}-linux-amd64/ && cp -rf dashboard/build authorizer-${VERSION}-linux-amd64/dashboard/build && tar cvfz authorizer-${VERSION}-linux-amd64.tar.gz authorizer-${VERSION}-linux-amd64 && \
68-
mkdir -p authorizer-${VERSION}-linux-arm64/build authorizer-${VERSION}-linux-arm64/app authorizer-${VERSION}-linux-arm64/dashboard && cp build/linux/arm64/server authorizer-${VERSION}-linux-arm64/build/ && cp .env authorizer-${VERSION}-linux-arm64/.env && cp -rf app/build authorizer-${VERSION}-linux-arm64/app/build && cp -rf templates authorizer-${VERSION}-linux-arm64/ && cp -rf dashboard/build authorizer-${VERSION}-linux-arm64/dashboard/build && tar cvfz authorizer-${VERSION}-linux-arm64.tar.gz authorizer-${VERSION}-linux-arm64 && \
69-
mkdir -p authorizer-${VERSION}-windows-amd64/build authorizer-${VERSION}-windows-amd64/app authorizer-${VERSION}-windows-amd64/dashboard && cp build/windows/amd64/server.exe authorizer-${VERSION}-windows-amd64/build/ && cp .env authorizer-${VERSION}-windows-amd64/.env && cp -rf app/build authorizer-${VERSION}-windows-amd64/app/build && cp -rf templates authorizer-${VERSION}-windows-amd64/ && cp -rf dashboard/build authorizer-${VERSION}-windows-amd64/dashboard/build && zip -vr authorizer-${VERSION}-windows-amd64.zip authorizer-${VERSION}-windows-amd64
56+
make clean
57+
make build
58+
for arch in darwin-arm64 darwin-amd64 linux-amd64 linux-arm64; do
59+
os=$(echo $arch | cut -d- -f1)
60+
cpu=$(echo $arch | cut -d- -f2)
61+
dir=authorizer-${VERSION}-${arch}
62+
mkdir -p $dir/web/app $dir/web/dashboard $dir/web/templates
63+
cp build/${os}/${cpu}/authorizer $dir/
64+
cp .env.sample $dir/
65+
cp -rf web/app/build $dir/web/app/
66+
cp -rf web/app/favicon_io $dir/web/app/
67+
cp -rf web/dashboard/build $dir/web/dashboard/
68+
cp -rf web/dashboard/favicon_io $dir/web/dashboard/
69+
cp -rf web/dashboard/public $dir/web/dashboard/ 2>/dev/null || true
70+
cp -rf web/templates/* $dir/web/templates/
71+
tar cvfz authorizer-${VERSION}-${arch}.tar.gz $dir
72+
done
7073
- name: Upload assets
7174
run: |
7275
github-assets-uploader -f authorizer-${VERSION}-darwin-arm64.tar.gz -mediatype application/gzip -repo authorizerdev/authorizer -token ${{secrets.RELEASE_TOKEN}} -tag ${VERSION}
7376
github-assets-uploader -f authorizer-${VERSION}-darwin-amd64.tar.gz -mediatype application/gzip -repo authorizerdev/authorizer -token ${{secrets.RELEASE_TOKEN}} -tag ${VERSION}
7477
github-assets-uploader -f authorizer-${VERSION}-linux-amd64.tar.gz -mediatype application/gzip -repo authorizerdev/authorizer -token ${{secrets.RELEASE_TOKEN}} -tag ${VERSION}
7578
github-assets-uploader -f authorizer-${VERSION}-linux-arm64.tar.gz -mediatype application/gzip -repo authorizerdev/authorizer -token ${{secrets.RELEASE_TOKEN}} -tag ${VERSION}
76-
github-assets-uploader -f authorizer-${VERSION}-windows-amd64.zip -mediatype application/zip -repo authorizerdev/authorizer -token ${{secrets.RELEASE_TOKEN}} -tag ${VERSION}
7779
- name: Log in to Docker Hub
78-
uses: docker/login-action@v1
80+
uses: docker/login-action@v3
7981
with:
8082
username: ${{ secrets.DOCKER_USERNAME }}
8183
password: ${{ secrets.DOCKER_PASSWORD }}
82-
8384
- name: Extract metadata (tags, labels) for Docker
8485
id: meta
85-
uses: docker/metadata-action@v3
86+
uses: docker/metadata-action@v5
8687
with:
87-
images: lakhansamani/authorizer
88+
images: authorizerdev/authorizer
8889
tags: |
89-
type=schedule
90-
type=ref,event=branch
9190
type=ref,event=tag
9291
type=ref,event=pr
93-
9492
- name: Build and push Docker image
95-
uses: docker/build-push-action@v2
93+
uses: docker/build-push-action@v5
9694
with:
9795
context: .
9896
push: true
9997
tags: ${{ steps.meta.outputs.tags }}
10098
labels: ${{ steps.meta.outputs.labels }}
10199
platforms: linux/amd64,linux/arm64
102100
build-args: |
103-
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
101+
VERSION=${{ env.VERSION }}

.gitignore

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
server/server
22
server/.env
33
data
4-
app/node_modules
5-
app/build
6-
dashboard/node_modules
7-
dashboard/build
4+
web/app/node_modules
5+
web/app/build
6+
web/dashboard/node_modules
7+
web/dashboard/build
88
build
99
.env
1010
data.db
@@ -20,4 +20,5 @@ certs/
2020
*-wal
2121
.idea
2222
*.iml
23-
*.code-workspace
23+
node_modules/*
24+
*.code-workspace

CHANGELOG.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Changelog
2+
3+
All notable changes to Authorizer will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [2.0.0] - 2025-02-28
9+
10+
### Added
11+
12+
- **CLI-based configuration**: All configuration is now passed at server start via CLI root arguments. No env store in cache or database.
13+
- **New security flags**:
14+
- `--disable-admin-header-auth`: When `true`, server does not accept `X-Authorizer-Admin-Secret` header; only secure admin cookie is honored. Recommended for production.
15+
- `--enable-graphql-introspection`: Controls GraphQL introspection on `/graphql` (default `true`; set `false` for hardened production).
16+
- **Metrics endpoint**: Metrics server on port 8081 (configurable via `--metrics-port`).
17+
- **Restructured project layout**:
18+
- Root-level `main.go` and `cmd/` for CLI
19+
- `internal/` for core packages (config, graph, storage, etc.)
20+
- `web/app` and `web/dashboard` for embedded UIs
21+
- `web/templates` for HTML templates
22+
- **Build outputs**: Binary named `authorizer`; output to `build/<os>/<arch>/authorizer`.
23+
- **Docker improvements**:
24+
- Multi-arch builds (linux/amd64, linux/arm64)
25+
- `ENTRYPOINT [ "./authorizer" ]` for passing CLI args at runtime
26+
- Alpine 3.23 base images
27+
- **Makefile targets**: `make dev`, `make bootstrap`, `make build-local-image`, `make build-push-image`.
28+
29+
### Changed
30+
31+
- **BREAKING**: Configuration is no longer read from `.env` or OS environment variables. Pass config via CLI flags.
32+
- **BREAKING**: `--client-id` and `--client-secret` are **required**; server exits if missing.
33+
- **BREAKING**: Deprecated mutations `_admin_signup`, `_update_env`, `_generate_jwt_keys` now return errors directing users to configure via CLI.
34+
- **BREAKING**: Dashboard cannot update server configuration. Admin secret, JWT keys, and all env must be set at startup.
35+
- **BREAKING**: Flag names use kebab-case (e.g. `--database-url` instead of `database_url`).
36+
- **BREAKING**: Some inverted boolean flags (e.g. `DISABLE_LOGIN_PAGE``--enable-login-page` with `false` to disable).
37+
- **BREAKING**: Go version requirement: >= 1.24 (see `go.mod`).
38+
- **BREAKING**: Node.js >= 18 for web app and dashboard builds.
39+
- Database provider template path: `internal/storage/db/provider_template` (was `server/db/providers/provider_template`).
40+
- GraphQL schema and resolvers moved to `internal/graph/`.
41+
- Tests moved to `internal/integration_tests/`; run with `go test -v ./...` from repo root.
42+
43+
### Deprecated
44+
45+
- `database_url`, `database_type`, `log_level`, `redis_url` flags (use kebab-case `--database-url`, etc.).
46+
- `env_file` flag (no longer supported).
47+
48+
### Fixed
49+
50+
- Corrected Makefile `generate-db-template` and DB-specific test targets to use current project structure.
51+
- Docker build and release workflow updated for v2 layout and binary name.
52+
53+
### Migration
54+
55+
See [MIGRATION.md](MIGRATION.md) for a detailed guide from v1 to v2.
56+
57+
---
58+
59+
## [1.x] - Legacy
60+
61+
Authorizer v1 used environment-based configuration stored in cache/DB and configurable via dashboard or `_update_env` mutation. For v1 documentation, see [docs.authorizer.dev](https://docs.authorizer.dev/) and the [v1 release branch](https://github.com/authorizerdev/authorizer).

0 commit comments

Comments
 (0)