Skip to content

Commit 4ac0827

Browse files
fix: update device flow to match API changes
- Change device code request from POST to GET - Use snake_case field names (device_code, user_code, etc.) - Match API response format: {success: true, data: {...}} - Support both snake_case and camelCase for backward compatibility
1 parent c1356f8 commit 4ac0827

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

bootcs/auth/device_flow.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@ def start_device_flow() -> DeviceCodeResponse:
5959
DeviceFlowError: If the request fails.
6060
"""
6161
api_base = get_api_base()
62-
url = f"{api_base}/api/auth/device/code"
62+
url = f"{api_base}/api/auth/device"
6363

6464
try:
65-
response = requests.post(url, timeout=30)
65+
response = requests.get(url, timeout=30)
6666
data = response.json()
6767

6868
# Check for error response
@@ -78,10 +78,10 @@ def start_device_flow() -> DeviceCodeResponse:
7878
payload = data.get("data", data)
7979

8080
return DeviceCodeResponse(
81-
device_code=payload["deviceCode"],
82-
user_code=payload["userCode"],
83-
verification_uri=payload["verificationUri"],
84-
expires_in=payload["expiresIn"],
81+
device_code=payload["device_code"],
82+
user_code=payload["user_code"],
83+
verification_uri=payload["verification_uri"],
84+
expires_in=payload["expires_in"],
8585
interval=payload.get("interval", 5),
8686
)
8787
except requests.RequestException as e:
@@ -122,7 +122,7 @@ def poll_for_token(
122122
try:
123123
response = requests.post(
124124
url,
125-
json={"deviceCode": device_code},
125+
json={"device_code": device_code},
126126
timeout=30
127127
)
128128
data = response.json()
@@ -158,11 +158,14 @@ def poll_for_token(
158158

159159
if response.ok:
160160
# Success! API returns { success: true, data: {...} } format
161-
# Check for data.token or direct token field
161+
# Check for data.accessToken, data.access_token or token field
162162
payload = data.get("data", data)
163-
if "token" in payload:
163+
164+
# Handle both snake_case and camelCase
165+
token = payload.get("accessToken") or payload.get("access_token") or payload.get("token")
166+
if token:
164167
return TokenResponse(
165-
token=payload["token"],
168+
token=token,
166169
user=payload.get("user", {})
167170
)
168171

0 commit comments

Comments
 (0)