insert try cathc method at save permissions function
This commit is contained in:
parent
800a57d28a
commit
9f2d898d82
|
|
@ -1542,25 +1542,26 @@ async function handleSavePermissions(clientWs, allowedTools) {
|
||||||
`const tools=${JSON.stringify(allowedTools)};`,
|
`const tools=${JSON.stringify(allowedTools)};`,
|
||||||
// Claude Code Format: Tool-Namen mit (*) Glob-Pattern
|
// Claude Code Format: Tool-Namen mit (*) Glob-Pattern
|
||||||
'const ccAllow=tools.map(t=>t+"(*)");',
|
'const ccAllow=tools.map(t=>t+"(*)");',
|
||||||
'for(const f of paths){',
|
'const ok=[];const fail=[];',
|
||||||
|
'for(const f of paths){try{',
|
||||||
'let s={};try{s=JSON.parse(fs.readFileSync(f,"utf8"));}catch(e){}',
|
'let s={};try{s=JSON.parse(fs.readFileSync(f,"utf8"));}catch(e){}',
|
||||||
// OpenClaw Format
|
|
||||||
's.allowedTools=tools;',
|
's.allowedTools=tools;',
|
||||||
// Claude Code Format
|
|
||||||
'if(!s.permissions)s.permissions={};',
|
'if(!s.permissions)s.permissions={};',
|
||||||
's.permissions.allow=ccAllow;',
|
's.permissions.allow=ccAllow;',
|
||||||
's.permissions.deny=[];',
|
's.permissions.deny=[];',
|
||||||
'const dir=path.dirname(f);',
|
'const dir=path.dirname(f);',
|
||||||
'try{fs.mkdirSync(dir,{recursive:true});}catch(e){}',
|
'try{fs.mkdirSync(dir,{recursive:true});}catch(e){}',
|
||||||
'fs.writeFileSync(f,JSON.stringify(s,null,2));',
|
'fs.writeFileSync(f,JSON.stringify(s,null,2));',
|
||||||
'}',
|
'ok.push(f);',
|
||||||
// Verify: alle Pfade zuruecklesen
|
'}catch(e){fail.push(f+": "+e.message);}}',
|
||||||
'const result={};',
|
// Verify: nur erfolgreiche Pfade zuruecklesen
|
||||||
'for(const f of paths){',
|
'const result={ok:[],fail:fail,verified:{}};',
|
||||||
|
'for(const f of ok){',
|
||||||
'try{const d=JSON.parse(fs.readFileSync(f,"utf8"));',
|
'try{const d=JSON.parse(fs.readFileSync(f,"utf8"));',
|
||||||
'result[f]={allowedTools:d.allowedTools||[],permsAllow:d.permissions&&d.permissions.allow||[]};}',
|
'result.verified[f]={allowedTools:d.allowedTools||[],permsAllow:(d.permissions&&d.permissions.allow)||[]};}',
|
||||||
'catch(e){result[f]={error:e.message};}',
|
'catch(e){result.fail.push(f+": verify-read "+e.message);}',
|
||||||
'}',
|
'}',
|
||||||
|
'result.ok=ok;',
|
||||||
'process.stdout.write(JSON.stringify(result));',
|
'process.stdout.write(JSON.stringify(result));',
|
||||||
].join("");
|
].join("");
|
||||||
const b64 = Buffer.from(script).toString("base64");
|
const b64 = Buffer.from(script).toString("base64");
|
||||||
|
|
@ -1572,21 +1573,20 @@ async function handleSavePermissions(clientWs, allowedTools) {
|
||||||
let verifyDetails = [];
|
let verifyDetails = [];
|
||||||
try {
|
try {
|
||||||
verifyResult = JSON.parse(verifyRaw.trim());
|
verifyResult = JSON.parse(verifyRaw.trim());
|
||||||
verified = true;
|
// Mindestens ein Pfad muss erfolgreich sein
|
||||||
for (const [fpath, data] of Object.entries(verifyResult)) {
|
verified = verifyResult.ok && verifyResult.ok.length > 0;
|
||||||
if (data.error) {
|
for (const f of (verifyResult.fail || [])) {
|
||||||
verifyDetails.push(`${fpath}: FEHLER ${data.error}`);
|
verifyDetails.push(`FEHLER: ${f}`);
|
||||||
verified = false;
|
}
|
||||||
} else {
|
for (const [fpath, data] of Object.entries(verifyResult.verified || {})) {
|
||||||
const ok = data.allowedTools.length === allowedTools.length
|
const ok = data.allowedTools.length === allowedTools.length
|
||||||
&& allowedTools.every(t => data.allowedTools.includes(t));
|
&& allowedTools.every(t => data.allowedTools.includes(t));
|
||||||
const ccOk = data.permsAllow.length === allowedTools.length;
|
const ccOk = data.permsAllow.length === allowedTools.length;
|
||||||
verifyDetails.push(`${fpath}: allowedTools=${ok?"OK":"FEHLER"} permissions.allow=${ccOk?"OK":"FEHLER"} (${data.allowedTools.length}/${data.permsAllow.length} Tools)`);
|
verifyDetails.push(`${fpath}: allowedTools=${ok?"OK":"FEHLER"} permissions.allow=${ccOk?"OK":"FEHLER"} (${data.allowedTools.length}/${data.permsAllow.length} Tools)`);
|
||||||
if (!ok) verified = false;
|
if (!ok) verified = false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
verifyDetails.push(`Parse-Fehler: ${e.message}`);
|
verifyDetails.push(`Parse-Fehler: ${e.message} — Raw: ${verifyRaw.substring(0, 200)}`);
|
||||||
}
|
}
|
||||||
log("info", "server", `Verify:\n${verifyDetails.join("\n")}`);
|
log("info", "server", `Verify:\n${verifyDetails.join("\n")}`);
|
||||||
|
|
||||||
|
|
@ -1598,12 +1598,16 @@ async function handleSavePermissions(clientWs, allowedTools) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const okCount = (verifyResult.ok || []).length;
|
||||||
|
const failCount = (verifyResult.fail || []).length;
|
||||||
|
const infoMsg = `${allowedTools.length} Tools gespeichert (${okCount} Pfade OK` + (failCount ? `, ${failCount} fehlgeschlagen` : '') + ')';
|
||||||
clientWs.send(JSON.stringify({
|
clientWs.send(JSON.stringify({
|
||||||
type: "permissions_saved", ok: true,
|
type: "permissions_saved", ok: true,
|
||||||
info: `${allowedTools.length} Tools gespeichert und verifiziert (alle ${OPENCLAW_SETTINGS_PATHS.length} Pfade)`,
|
info: infoMsg,
|
||||||
|
details: verifyDetails,
|
||||||
needsRestart: true,
|
needsRestart: true,
|
||||||
}));
|
}));
|
||||||
log("info", "server", `Berechtigungen gespeichert und verifiziert (${allowedTools.length} Tools)`);
|
log("info", "server", infoMsg);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log("error", "server", `Berechtigungen speichern fehlgeschlagen: ${err.message}`);
|
log("error", "server", `Berechtigungen speichern fehlgeschlagen: ${err.message}`);
|
||||||
clientWs.send(JSON.stringify({ type: "permissions_saved", ok: false, error: err.message }));
|
clientWs.send(JSON.stringify({ type: "permissions_saved", ok: false, error: err.message }));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue