Fix #3: save prompt after implant build (GenerateResult.File, Regenerate fallback name, auto Save-to-disk)

This commit is contained in:
Raj Kumar Mullapudi
2026-08-06 14:53:33 -04:00
parent ba21638d1c
commit bec3315f32
2 changed files with 15 additions and 4 deletions
+6 -2
View File
@@ -1323,8 +1323,12 @@ func (a *App) RegenerateBuild(name string) TransferResult {
if resp.File == nil {
return TransferResult{Error: "no stored build for " + name}
}
defaultName := resp.File.Name
if defaultName == "" {
defaultName = name
}
savePath, err := a.safeSaveFileDialog(runtime.SaveDialogOptions{
DefaultFilename: resp.File.Name,
DefaultFilename: defaultName,
Title: "Save regenerated implant",
})
if err != nil || savePath == "" {
@@ -2086,7 +2090,7 @@ func (a *App) GenerateImplant(req GenerateRequest) GenerateResult {
// calls RegenerateBuild(name) on a user click — a dialog raised by a direct
// gesture gets focus, and the spinner is already gone.
a.audit.log("generate", genReq.Name, fmt.Sprintf("%s/%s", req.GOOS, req.GOARCH))
return GenerateResult{Name: genReq.Name}
return GenerateResult{Name: genReq.Name, File: genReq.Name}
}
// randSuffix returns 8 random hex chars, used to make auto-generated implant
+9 -2
View File
@@ -2791,8 +2791,15 @@ function openGeneratePanel() {
const r = await App().GenerateImplant(req).catch(e => ({error:String(e)}));
document.getElementById('gen-status').style.display = 'none';
const res = document.getElementById('gen-result');
res.textContent = r.error ? `[ERROR] ${r.error}` : `[OK] ${r.file}`;
res.style.color = r.error ? 'var(--accent)' : 'var(--ok)';
if (r.error) {
res.textContent = `[ERROR] ${r.error}`;
res.style.color = 'var(--accent)';
} else {
res.style.color = 'var(--ok)';
res.innerHTML = `<span>[OK] Build created: ${esc(r.name || r.file)}</span> <button class="btn small" style="margin-left:10px" onclick="buildRegen('${esc(r.name || r.file)}')">⬇ Save to disk</button>`;
// Auto-trigger the native save dialog immediately
buildRegen(r.name || r.file);
}
});
}, 0);
}