|
| 1 | +import { convertAvatarToBase64 } from '../utils.js' |
| 2 | + |
1 | 3 | /** |
2 | 4 | * Baidu Qianfan platform detection logic |
3 | 5 | * Strategy: |
4 | | - * 1. Call current user API directly |
| 6 | + * 1. Read csrftoken from bce-user-info-ct-id cookie |
| 7 | + * 2. Call current user API with csrftoken header |
5 | 8 | */ |
6 | 9 | export async function detectQianfanUser() { |
7 | 10 | try { |
| 11 | + console.log('[COSE] Qianfan Detection: Starting') |
| 12 | + |
| 13 | + // Read csrftoken from cookie |
| 14 | + const csrfCookie = await chrome.cookies.get({ url: 'https://qianfan.cloud.baidu.com', name: 'bce-user-info-ct-id' }) |
| 15 | + const csrfToken = csrfCookie?.value ? csrfCookie.value.replace(/"/g, '') : '' |
| 16 | + |
8 | 17 | const response = await fetch('https://qianfan.cloud.baidu.com/api/community/user/current', { |
9 | 18 | method: 'GET', |
10 | 19 | credentials: 'include', |
11 | | - headers: { 'Accept': 'application/json' } |
| 20 | + headers: { |
| 21 | + 'Accept': 'application/json', |
| 22 | + ...(csrfToken ? { 'csrftoken': csrfToken } : {}), |
| 23 | + } |
12 | 24 | }) |
13 | 25 | if (!response.ok) return { loggedIn: false } |
14 | 26 |
|
15 | 27 | const data = await response.json() |
16 | 28 | if (data.success && data.result) { |
17 | 29 | const username = data.result.displayName || data.result.nickname || '' |
18 | | - const avatar = data.result.avatar || '' |
| 30 | + let avatar = data.result.avatar || '' |
| 31 | + |
| 32 | + if (avatar && avatar.includes('bdimg.com')) { |
| 33 | + avatar = await convertAvatarToBase64(avatar, 'https://qianfan.cloud.baidu.com/') |
| 34 | + } |
| 35 | + |
19 | 36 | return { loggedIn: true, username, avatar } |
20 | 37 | } else { |
21 | 38 | return { loggedIn: false } |
22 | 39 | } |
23 | | - } catch (e) { return { loggedIn: false } } |
| 40 | + } catch (e) { |
| 41 | + console.error('[COSE] Qianfan Detection Error:', e) |
| 42 | + return { loggedIn: false, error: e.message } |
| 43 | + } |
24 | 44 | } |
0 commit comments