diff options
| author | Adam Malczewski <[email protected]> | 2026-05-20 15:43:07 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-05-20 15:43:07 +0900 |
| commit | 971a8f775d5e89e484e56a575e8ae2706fe2b53f (patch) | |
| tree | d11f6cbbf230d73e53dee0db09e535dea9717599 /bin | |
| parent | adc8bd185b54935e7a31aae04da3175b7989927a (diff) | |
| download | dispatch-971a8f775d5e89e484e56a575e8ae2706fe2b53f.tar.gz dispatch-971a8f775d5e89e484e56a575e8ae2706fe2b53f.zip | |
fix: sidebar layout, copilot auth script, config setup
- Sidebar uses absolute inset-0 with overflow-y-auto for proper scrolling
- Border moved to inner div so it hides with sidebar
- Copilot auth script uses portable sed instead of grep -P (macOS compat)
- dispatch.toml with 3 keys, 4 models, fallback order
- .env.dispatch with key placeholders and script reference
- docker-compose loads .env.dispatch via env_file
Diffstat (limited to 'bin')
| -rwxr-xr-x | bin/copilot-auth | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/bin/copilot-auth b/bin/copilot-auth new file mode 100755 index 0000000..28d08a1 --- /dev/null +++ b/bin/copilot-auth @@ -0,0 +1,84 @@ +#!/usr/bin/env bash +set -euo pipefail + +CLIENT_ID="Ov23li8tweQw6odWQebz" +ENV_FILE="$(cd "$(dirname "$0")/.." && pwd)/.env.dispatch" + +# Parse form-encoded key=value pairs +parse() { + local key="$1" data="$2" + local val + val=$(echo "$data" | sed -n "s/.*${key}=\([^&]*\).*/\1/p") + python3 -c "import sys,urllib.parse; print(urllib.parse.unquote(sys.stdin.read().strip()))" <<< "$val" +} + +echo "=== GitHub Copilot OAuth ===" +echo "" + +# Step 1: Request device code +echo "Requesting device code..." +RESP=$(curl -s https://github.com/login/device/code \ + -d "client_id=$CLIENT_ID" \ + -d "scope=read:user") + +DEVICE_CODE=$(parse "device_code" "$RESP") + +if [ -z "$DEVICE_CODE" ]; then + echo "Failed to get device code: $RESP" + exit 1 +fi + +USER_CODE=$(parse "user_code" "$RESP") +VERIF_URI=$(parse "verification_uri" "$RESP") +INTERVAL=$(parse "interval" "$RESP") +INTERVAL=${INTERVAL:-5} + +echo "" +echo "Open this URL and enter the code:" +echo " $VERIF_URI" +echo " Code: $USER_CODE" +echo "" +echo "Waiting for you to authorize..." + +# Step 2: Poll for access token +TOKEN="" +ATTEMPTS=0 +while [ -z "$TOKEN" ] && [ $ATTEMPTS -lt 60 ]; do + sleep "$INTERVAL" + ATTEMPTS=$((ATTEMPTS + 1)) + + TOKEN_RESP=$(curl -s https://github.com/login/oauth/access_token \ + -d "client_id=$CLIENT_ID" \ + -d "device_code=$DEVICE_CODE" \ + -d "grant_type=urn:ietf:params:oauth:grant-type:device_code") + + TOKEN=$(parse "access_token" "$TOKEN_RESP" || true) + ERROR=$(parse "error" "$TOKEN_RESP" || true) + + if [ "$ERROR" = "authorization_pending" ]; then + continue + elif [ "$ERROR" = "slow_down" ]; then + INTERVAL=$((INTERVAL + 5)) + continue + elif [ -n "$ERROR" ]; then + echo "Error: $ERROR" + exit 1 + fi +done + +if [ -z "$TOKEN" ]; then + echo "Timed out waiting for authorization." + exit 1 +fi + +# Step 3: Write to .env.dispatch +mkdir -p "$(dirname "$ENV_FILE")" +if [ -f "$ENV_FILE" ] && grep -q "^COPILOT_TOKEN=" "$ENV_FILE" 2>/dev/null; then + sed -i "s/^COPILOT_TOKEN=.*/COPILOT_TOKEN=$TOKEN/" "$ENV_FILE" +else + echo "COPILOT_TOKEN=$TOKEN" >> "$ENV_FILE" +fi + +echo "" +echo "Token saved to .env.dispatch" +echo "Ready — run: docker compose up" |
