Files
Toolbox/public/tools/oss_browser_link/assets/ossbrowser_wrapper_main.js
yangxiangyuan 4016636153 feat(oss-browser-link): 实现一键注册+自动定位补丁功能
1. 新增oss-browser自动定位包装层脚本与注册批处理
2. 优化粘贴行为:焦点在输入框时交给浏览器默认粘贴
3. 新增一批调试与构建辅助脚本
4. 更新oss-browser下载页说明与步骤
2026-08-12 13:29:11 +08:00

102 lines
4.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Trae-Toolbox oss-browser 包装层(resources/app/main.js)
// 作用:启动时读取 exe 同目录 trae_default_oss_path.txt(第1行 oss 路径,第2行可选 region),
// 并从本机 ~/Toolbox_local_creds.env.local 读取 DOC_CLOUD_KEEPER_OSS_* 凭据(运行时读取,零硬编码),
// 注入渲染进程:写入 AuthInfo 并补丁 $rootScope.currentAuthInfo / bucketMap,
// 使 oss-browser 每次启动即以有效账号登录、地址栏自动定位到默认目录;
// 随后原样交接给官方 app.asar 内的 main.js,不改动官方包任何字节。
// 卸载:删除 resources\app 目录与 trae_default_oss_path.txt 即恢复原版。
const { app } = require('electron')
const fs = require('fs')
const os = require('os')
const path = require('path')
const readDefaultConfig = () => {
const cfg = { target: '', region: 'oss-cn-shanghai', id: '', secret: '' }
try {
const p = path.join(path.dirname(process.execPath), 'trae_default_oss_path.txt')
if (fs.existsSync(p)) {
const lines = String(fs.readFileSync(p, 'utf8')).split(/\r?\n/).map(l => l.trim()).filter(Boolean)
if (lines[0] && lines[0].indexOf('oss://') === 0) cfg.target = lines[0]
if (lines[1] && /^oss-[a-z0-9-]+$/.test(lines[1])) cfg.region = lines[1]
}
} catch (e) {}
try {
const p = path.join(os.homedir(), 'Toolbox_local_creds.env.local')
if (fs.existsSync(p)) {
const text = String(fs.readFileSync(p, 'utf8'))
for (const line of text.split(/\r?\n/)) {
const t = line.trim()
if (!t || t.startsWith('#')) continue
const eq = t.indexOf('=')
if (eq <= 0) continue
const k = t.slice(0, eq).trim()
const v = t.slice(eq + 1).trim()
if (k === 'DOC_CLOUD_KEEPER_OSS_ACCESS_KEY_ID') cfg.id = v
if (k === 'DOC_CLOUD_KEEPER_OSS_ACCESS_KEY_SECRET') cfg.secret = v
}
}
} catch (e) {}
return cfg
}
const CFG = readDefaultConfig()
if (CFG.target) {
const credPatch = (CFG.id && CFG.secret)
? { id: CFG.id, secret: CFG.secret, eptpl: 'https://{region}.aliyuncs.com' }
: null
const injection =
'(function () {' +
' var TARGET = ' + JSON.stringify(CFG.target) + ';' +
' var REGION = ' + JSON.stringify(CFG.region) + ';' +
' var CRED = ' + JSON.stringify(credPatch) + ';' +
' var BUCKET = TARGET.split("/")[2];' +
' var seeded = false;' +
' var broadcasts = 0;' +
' var tries = 0;' +
' var timer = setInterval(function () {' +
' tries++;' +
' if (tries > 80) { clearInterval(timer); return; }' +
' try {' +
' var ng = window.angular;' +
' if (!ng) return;' +
' var el = document.querySelector("[ng-app]") || document.documentElement;' +
' var inj = ng.element(el).injector();' +
' if (!inj) return;' +
' if (!seeded) {' +
' seeded = true;' +
' var patch = { osspath: TARGET, address: TARGET, region: REGION };' +
' if (CRED) { patch.id = CRED.id; patch.secret = CRED.secret; patch.eptpl = CRED.eptpl; }' +
' inj.get("AuthInfo").saveToAuthInfo(patch);' +
' var rs = inj.get("$rootScope");' +
' rs.currentAuthInfo = rs.currentAuthInfo || {};' +
' for (var k in patch) { rs.currentAuthInfo[k] = patch[k]; }' +
' rs.internalSupported = false;' +
' rs.bucketMap = rs.bucketMap || {};' +
' rs.bucketMap[BUCKET] = { region: REGION };' +
' }' +
' if (broadcasts < 8) { broadcasts++; inj.get("$rootScope").$broadcast("goToOssAddress", TARGET); }' +
' else { clearInterval(timer); }' +
' } catch (e) {}' +
' }, 500);' +
'})();'
app.on('web-contents-created', function (event, contents) {
contents.on('did-finish-load', function () {
try { contents.executeJavaScript(injection) } catch (e) {}
})
})
}
// 交接给官方 oss-browser 主进程逻辑
try {
require(path.join(__dirname, '..', 'app.asar', 'main.js'))
} catch (e) {
try {
require('electron').dialog.showErrorBox(
'oss-browser 包装层错误',
String((e && e.message) || e) + '\n如需恢复原版,请删除 resources\\app 目录。'
)
} catch (e2) {}
}