feat(browser): unify site credentials with browser profiles (BR-2)
- Inject the site account Cookie (manual + auto-login session, session wins)
into the camofox profile before the first tab opens; password accounts
without a session run refresh-login first; API Key sites are skipped.
- Cookie expired after injection -> credential.status=expired; cookie
accounts go to waiting/login_required ("log in once, applies site-wide").
- Write back site-domain cookies from the browser on handover, session close,
every 10 min of activity, and from refresh-login when the stored cookie is
invalid (verified before saving). user_info.cookieOrigin records
source=browser; source shown as manual/login/browser in the origin view.
- New camofox plugin umt-cookies (GET/POST /umt/sessions/:userId/cookies
under the access key); profile dir 0700/files 0600 in the desktop image.
- Single entry: sources-identity/service/credentials.ts.
- Real check: HHClub cookie injected into a fresh profile -> home page
logged in (logout link present), 5 cookies read back.
Requires rebuilding umt-browser-desktop (docker compose build camofox &&
docker compose up -d camofox) to take effect.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
901b01d1a1
commit
28974d1e1a
58 files changed
+2843
-1112
No files matched your search
@@ -27,24 +27,6 @@ const DEFAULTS_CARD: CardSpec = {
|
||||
kind: "number",
|
||||
hint: "站点开了定时快照但没设周期时使用;5–10080",
|
||||
},
|
||||
{
|
||||
name: "sites.defaultSnapshotMaxPages",
|
||||
label: "快照页数",
|
||||
kind: "number",
|
||||
hint: "定时和手动快照最多抓几页列表;站点定义更少时按站点;1–20",
|
||||
},
|
||||
{
|
||||
name: "sites.defaultHealthCheckIntervalSec",
|
||||
label: "健康检测间隔(小时)",
|
||||
kind: "number",
|
||||
hint: "同一站点两次定时检测至少隔这么久;站点定义更长时按站点",
|
||||
},
|
||||
{
|
||||
name: "sites.defaultDetailCacheSec",
|
||||
label: "详情缓存(小时)",
|
||||
kind: "number",
|
||||
hint: "期内不重复抓同一条资源详情;0 为不缓存",
|
||||
},
|
||||
{
|
||||
name: "sites.userDataMaxSeedingPages",
|
||||
label: "做种列表页数上限",
|
||||
@@ -72,9 +54,6 @@ const DEFAULTS_CARD: CardSpec = {
|
||||
"sites.defaultRateLimit.concurrency": n(s.sites.defaultRateLimit.concurrency),
|
||||
"sites.defaultSnapshotIntervalSec": n(Math.round(s.sites.defaultSnapshotIntervalSec / 60)),
|
||||
"sites.userDataMaxSeedingPages": n(s.sites.userDataMaxSeedingPages),
|
||||
"sites.defaultSnapshotMaxPages": n(s.sites.defaultSnapshotMaxPages),
|
||||
"sites.defaultHealthCheckIntervalSec": n(s.sites.defaultHealthCheckIntervalSec / 3600),
|
||||
"sites.defaultDetailCacheSec": n(s.sites.defaultDetailCacheSec / 3600),
|
||||
"sites.userAgent": s.sites.userAgent,
|
||||
"sites.proxyUrl": s.sites.proxyUrl ?? "",
|
||||
}),
|
||||
@@ -82,8 +61,6 @@ const DEFAULTS_CARD: CardSpec = {
|
||||
const min = num(v["sites.defaultSnapshotIntervalSec"]);
|
||||
const rpm = num(v["sites.defaultRateLimit.requestsPerMinute"]);
|
||||
const concurrency = num(v["sites.defaultRateLimit.concurrency"]);
|
||||
const healthH = num(v["sites.defaultHealthCheckIntervalSec"]);
|
||||
const detailH = num(v["sites.defaultDetailCacheSec"]);
|
||||
return {
|
||||
sites: {
|
||||
defaultRateLimit: {
|
||||
@@ -93,9 +70,6 @@ const DEFAULTS_CARD: CardSpec = {
|
||||
},
|
||||
defaultSnapshotIntervalSec: min === undefined ? undefined : Math.round(min * 60),
|
||||
userDataMaxSeedingPages: num(v["sites.userDataMaxSeedingPages"]),
|
||||
defaultSnapshotMaxPages: num(v["sites.defaultSnapshotMaxPages"]),
|
||||
defaultHealthCheckIntervalSec: healthH === undefined ? undefined : Math.round(healthH * 3600),
|
||||
defaultDetailCacheSec: detailH === undefined ? undefined : Math.round(detailH * 3600),
|
||||
userAgent: str(v["sites.userAgent"]) || undefined,
|
||||
proxyUrl: str(v["sites.proxyUrl"]) || null,
|
||||
},
|
||||
|
||||
Reference in new issue
Block a user