From 038f014f9c7625dfbf30a12d3b23a75fa60d7549 Mon Sep 17 00:00:00 2001 From: lelo Date: Sun, 7 Sep 2025 18:53:36 +0000 Subject: [PATCH] add renew function --- templates/folder_secret_config_editor.html | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/templates/folder_secret_config_editor.html b/templates/folder_secret_config_editor.html index accbce7..2c11342 100644 --- a/templates/folder_secret_config_editor.html +++ b/templates/folder_secret_config_editor.html @@ -208,6 +208,15 @@ cloneBtn.addEventListener('click', () => cloneRec(key)); actions.appendChild(cloneBtn); + if (isEdit || expired) { + const renewBtn = document.createElement('button'); + renewBtn.className = 'btn btn-info btn-sm me-2'; + renewBtn.type = 'button'; + renewBtn.textContent = 'erneuern'; + renewBtn.addEventListener('click', () => renewRec(key)); + actions.appendChild(renewBtn); + } + if (isEdit) { const saveBtn = document.createElement('button'); saveBtn.className = 'btn btn-success btn-sm'; @@ -260,6 +269,38 @@ editing.add(rec.secret); render(); } + async function renewRec(secret) { + // find current record + const rec = data.find(r => r.secret === secret); + if (!rec) return; + + // generate a fresh unique secret + const existing = data.map(r => r.secret); + const newSecret = generateSecret(existing); + + // validity = today + 35 days, formatted as YYYY-MM-DD + const future = new Date(); + future.setDate(future.getDate() + 35); + const yyyy = future.getFullYear(); + const mm = String(future.getMonth() + 1).padStart(2, '0'); + const dd = String(future.getDate()).padStart(2, '0'); + const validity = `${yyyy}-${mm}-${dd}`; + + // keep folders unchanged + const folders = rec.folders.map(f => ({ + foldername: f.foldername, + folderpath: f.folderpath + })); + + // persist via existing endpoint + await sendAction({ + action: 'update', + oldSecret: secret, + newSecret, + validity, + folders + }); + } function addFolder(secret) { data.find(r => r.secret === secret).folders.push({foldername:'', folderpath:''}); render();