feat: Allow custom GitHub OAuth app client ID via environment variable (#145)

* feat: Allow custom GitHub OAuth app client ID via environment variable

* docs: describe how to use your own github oauth app id

* docs: update to cover backend and frontend settings

* fix: run cargo fmt

---------

Co-authored-by: Weston Platter <weston@westonplatter.com>
This commit is contained in:
Weston Platter
2025-07-15 23:11:13 -06:00
committed by GitHub
parent ea7cb76059
commit b5303b728e
2 changed files with 34 additions and 5 deletions

View File

@@ -73,3 +73,31 @@ This will start the frontend and backend with live reloading. A blank DB will be
1. Run `build-npm-package.sh` 1. Run `build-npm-package.sh`
2. In the `npx-cli` folder run `npm pack` 2. In the `npx-cli` folder run `npm pack`
3. You can run your build with `npx [GENERATED FILE].tgz` 3. You can run your build with `npx [GENERATED FILE].tgz`
### Environment Variables
The following environment variables can be configured at build time or runtime:
| Variable | Type | Default | Description |
|----------|------|---------|-------------|
| `GITHUB_CLIENT_ID` | Build-time | `Ov23li9bxz3kKfPOIsGm` | GitHub OAuth app client ID for authentication |
| `POSTHOG_API_KEY` | Build-time | Empty | PostHog analytics API key (disables analytics if empty) |
| `POSTHOG_API_ENDPOINT` | Build-time | Empty | PostHog analytics endpoint (disables analytics if empty) |
| `BACKEND_PORT` | Runtime | `0` (auto-assign) | Backend server port |
| `FRONTEND_PORT` | Runtime | `3000` | Frontend development server port |
| `DISABLE_WORKTREE_ORPHAN_CLEANUP` | Runtime | Not set | Disable git worktree cleanup (for debugging) |
**Build-time variables** must be set when running `pnpm run build`. **Runtime variables** are read when the application starts.
#### Custom GitHub OAuth App (Optional)
By default, Vibe Kanban uses Bloop AI's GitHub OAuth app for authentication. To use your own GitHub app for self-hosting or custom branding:
1. Create a GitHub OAuth App at [GitHub Developer Settings](https://github.com/settings/developers)
2. Enable "Device Flow" in the app settings
3. Set scopes to include `user:email,repo`
4. Build with your client ID:
```bash
GITHUB_CLIENT_ID=your_client_id_here pnpm run build
```

View File

@@ -36,10 +36,9 @@ struct DevicePollRequest {
/// POST /auth/github/device/start /// POST /auth/github/device/start
async fn device_start() -> ResponseJson<ApiResponse<DeviceStartResponse>> { async fn device_start() -> ResponseJson<ApiResponse<DeviceStartResponse>> {
let params = [ let client_id = option_env!("GITHUB_CLIENT_ID").unwrap_or("Ov23li9bxz3kKfPOIsGm");
("client_id", "Ov23li9bxz3kKfPOIsGm"),
("scope", "user:email,repo"), let params = [("client_id", client_id), ("scope", "user:email,repo")];
];
let client = reqwest::Client::new(); let client = reqwest::Client::new();
let res = client let res = client
.post("https://github.com/login/device/code") .post("https://github.com/login/device/code")
@@ -105,8 +104,10 @@ async fn device_poll(
State(app_state): State<AppState>, State(app_state): State<AppState>,
Json(payload): Json<DevicePollRequest>, Json(payload): Json<DevicePollRequest>,
) -> ResponseJson<ApiResponse<String>> { ) -> ResponseJson<ApiResponse<String>> {
let client_id = option_env!("GITHUB_CLIENT_ID").unwrap_or("Ov23li9bxz3kKfPOIsGm");
let params = [ let params = [
("client_id", "Ov23li9bxz3kKfPOIsGm"), ("client_id", client_id),
("device_code", payload.device_code.as_str()), ("device_code", payload.device_code.as_str()),
("grant_type", "urn:ietf:params:oauth:grant-type:device_code"), ("grant_type", "urn:ietf:params:oauth:grant-type:device_code"),
]; ];