🚀 Auto-deploy: BrainKP atualizado em 25/07/2026 19:55:59
This commit is contained in:
@@ -549,6 +549,13 @@ def run_backup():
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
return jsonify({"error": str(e), "trace": traceback.format_exc()}), 500
|
return jsonify({"error": str(e), "trace": traceback.format_exc()}), 500
|
||||||
|
|
||||||
|
@app.route("/api/download/<filename>")
|
||||||
|
def download_file(filename):
|
||||||
|
path = f"/tmp/restore-temp/{filename}"
|
||||||
|
if os.path.exists(path):
|
||||||
|
return send_file(path, as_attachment=True)
|
||||||
|
return "File not found locally", 404
|
||||||
|
|
||||||
# ──────────────────────────────────────────────
|
# ──────────────────────────────────────────────
|
||||||
# STATIC & LOGS
|
# STATIC & LOGS
|
||||||
# ──────────────────────────────────────────────
|
# ──────────────────────────────────────────────
|
||||||
|
|||||||
@@ -221,6 +221,7 @@ input,button,select{font-family:inherit}
|
|||||||
</div>
|
</div>
|
||||||
<div class="modal-body" id="modal-body"></div>
|
<div class="modal-body" id="modal-body"></div>
|
||||||
<div class="modal-footer" id="modal-footer">
|
<div class="modal-footer" id="modal-footer">
|
||||||
|
<a id="modal-download" class="btn" style="display:none; text-decoration:none;" target="_blank">📥 Baixar</a>
|
||||||
<button class="btn" onclick="closeModal()">Cancelar</button>
|
<button class="btn" onclick="closeModal()">Cancelar</button>
|
||||||
<button class="btn btn-primary" id="modal-confirm" onclick="doRestore()">Restaurar</button>
|
<button class="btn btn-primary" id="modal-confirm" onclick="doRestore()">Restaurar</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -504,6 +505,7 @@ function openRestoreModal(type, filename, size) {
|
|||||||
<div class="progress-bar" id="dl-progress"><div class="fill" style="width:0%"></div></div>
|
<div class="progress-bar" id="dl-progress"><div class="fill" style="width:0%"></div></div>
|
||||||
`;
|
`;
|
||||||
document.getElementById('modal-confirm').style.display = 'inline-block';
|
document.getElementById('modal-confirm').style.display = 'inline-block';
|
||||||
|
document.getElementById('modal-download').style.display = 'none';
|
||||||
document.getElementById('restore-modal').classList.add('show');
|
document.getElementById('restore-modal').classList.add('show');
|
||||||
|
|
||||||
// Start download
|
// Start download
|
||||||
@@ -542,6 +544,8 @@ function openRestoreModal(type, filename, size) {
|
|||||||
` cp -r ${d.extracted_to}/* /var/lib/docker/volumes/yccsckck4g004gosccwc4kg4_gitea-data/_data/`;
|
` cp -r ${d.extracted_to}/* /var/lib/docker/volumes/yccsckck4g004gosccwc4kg4_gitea-data/_data/`;
|
||||||
}
|
}
|
||||||
document.getElementById('restore-instructions').value = instructions || 'Pronto para uso.';
|
document.getElementById('restore-instructions').value = instructions || 'Pronto para uso.';
|
||||||
|
document.getElementById('modal-download').href = `/api/download/${filename}`;
|
||||||
|
document.getElementById('modal-download').style.display = 'inline-block';
|
||||||
} else {
|
} else {
|
||||||
document.getElementById('restore-instructions').value = `Erro: ${d.error}`;
|
document.getElementById('restore-instructions').value = `Erro: ${d.error}`;
|
||||||
}
|
}
|
||||||
@@ -569,6 +573,7 @@ function openRestoreRepo(owner, repoName, size) {
|
|||||||
<textarea id="restore-instructions" disabled>Baixando e preparando...</textarea>
|
<textarea id="restore-instructions" disabled>Baixando e preparando...</textarea>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
document.getElementById('modal-download').style.display = 'none';
|
||||||
document.getElementById('restore-modal').classList.add('show');
|
document.getElementById('restore-modal').classList.add('show');
|
||||||
|
|
||||||
fetch(`${API}/restore/repo`, {
|
fetch(`${API}/restore/repo`, {
|
||||||
@@ -588,6 +593,9 @@ function openRestoreRepo(owner, repoName, size) {
|
|||||||
` cp -r ${d.extracted_to}/* /var/lib/docker/volumes/yccsckck4g004gosccwc4kg4_gitea-data/_data/git/repositories/${owner}/\n` +
|
` cp -r ${d.extracted_to}/* /var/lib/docker/volumes/yccsckck4g004gosccwc4kg4_gitea-data/_data/git/repositories/${owner}/\n` +
|
||||||
` # Reinicie o Gitea\n` +
|
` # Reinicie o Gitea\n` +
|
||||||
` docker start <gitea-container>`;
|
` docker start <gitea-container>`;
|
||||||
|
|
||||||
|
document.getElementById('modal-download').href = `/api/download/${repoName}`;
|
||||||
|
document.getElementById('modal-download').style.display = 'inline-block';
|
||||||
} else {
|
} else {
|
||||||
document.getElementById('restore-instructions').value = `Erro: ${d.error}`;
|
document.getElementById('restore-instructions').value = `Erro: ${d.error}`;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user