mirror of
https://github.com/doocs/cose.git
synced 2026-08-28 23:02:10 +08:00
fix: cnblogs detection logic (#190)
This commit is contained in:
@@ -91,7 +91,7 @@ export const LOGIN_CHECK_CONFIG = {
|
||||
juejin: JuejinLoginConfig,
|
||||
zhihu: ZhihuLoginConfig,
|
||||
toutiao: ToutiaoLoginConfig,
|
||||
cnblogs: CnblogsLoginConfig,
|
||||
|
||||
baijiahao: BaijiahaoLoginConfig,
|
||||
wangyihao: WangyihaoLoginConfig,
|
||||
douyin: DouyinLoginConfig,
|
||||
|
||||
@@ -23,6 +23,7 @@ import { detectSegmentFaultUser } from './platforms/segmentfault.js'
|
||||
import { detectInfoQUser } from './platforms/infoq.js'
|
||||
import { detectModelScopeUser } from './platforms/modelscope.js'
|
||||
import { detectVolcengineUser } from './platforms/volcengine.js'
|
||||
import { detectCnblogsUser } from './platforms/cnblogs.js'
|
||||
|
||||
// Platform-specific detectors map
|
||||
const PLATFORM_DETECTORS = {
|
||||
@@ -49,6 +50,7 @@ const PLATFORM_DETECTORS = {
|
||||
'infoq': detectInfoQUser,
|
||||
'modelscope': detectModelScopeUser,
|
||||
'volcengine': detectVolcengineUser,
|
||||
'cnblogs': detectCnblogsUser,
|
||||
}
|
||||
|
||||
export async function detectUser(platformId) {
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
import { convertAvatarToBase64 } from '../utils.js'
|
||||
|
||||
/**
|
||||
* Cnblogs (博客园) detection logic
|
||||
* Strategy:
|
||||
* 1. Collect cookies via chrome.cookies.getAll (MV3 service worker compatible)
|
||||
* 2. Fetch user info via account.cnblogs.com/user/userinfo with cookies attached manually
|
||||
* 3. Extract username and avatar from API response
|
||||
*/
|
||||
export async function detectCnblogsUser() {
|
||||
try {
|
||||
const cookies = await chrome.cookies.getAll({ domain: '.cnblogs.com' })
|
||||
const wwwCookies = await chrome.cookies.getAll({ url: 'https://www.cnblogs.com' })
|
||||
const accountCookies = await chrome.cookies.getAll({ url: 'https://account.cnblogs.com' })
|
||||
const allCookies = [...cookies, ...wwwCookies, ...accountCookies]
|
||||
const seen = new Set()
|
||||
const uniqueCookies = allCookies.filter(c => {
|
||||
const key = `${c.name}=${c.value}`
|
||||
if (seen.has(key)) return false
|
||||
seen.add(key)
|
||||
return true
|
||||
})
|
||||
const cookieStr = uniqueCookies.map(c => `${c.name}=${c.value}`).join('; ')
|
||||
|
||||
if (!cookieStr) return { loggedIn: false }
|
||||
|
||||
const response = await fetch('https://account.cnblogs.com/user/userinfo', {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Cookie': cookieStr,
|
||||
},
|
||||
})
|
||||
|
||||
if (!response.ok) return { loggedIn: false }
|
||||
|
||||
const data = await response.json()
|
||||
if (!data?.spaceUserId) return { loggedIn: false }
|
||||
|
||||
const username = data.displayName || ''
|
||||
let avatar = data.iconName || ''
|
||||
|
||||
if (avatar && !avatar.startsWith('http')) {
|
||||
avatar = 'https:' + avatar
|
||||
}
|
||||
if (avatar && avatar.includes('cnblogs.com')) {
|
||||
avatar = await convertAvatarToBase64(avatar, 'https://www.cnblogs.com/')
|
||||
}
|
||||
|
||||
return { loggedIn: true, username, avatar }
|
||||
} catch (e) {
|
||||
console.error('[COSE] Cnblogs Detection Error:', e)
|
||||
return { loggedIn: false, error: e.message }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user