diff --git a/frontend/src/views/SettingsView.vue b/frontend/src/views/SettingsView.vue index 2d7e33d..4d58272 100644 --- a/frontend/src/views/SettingsView.vue +++ b/frontend/src/views/SettingsView.vue @@ -89,7 +89,20 @@ async function revokeApiKey(id: number) { } async function copyApiKey() { - await navigator.clipboard.writeText(newKeyValue.value); + try { + await navigator.clipboard.writeText(newKeyValue.value); + } catch { + // Fallback for http (non-secure) contexts where clipboard API is unavailable + const ta = document.createElement('textarea'); + ta.value = newKeyValue.value; + ta.style.position = 'fixed'; + ta.style.opacity = '0'; + document.body.appendChild(ta); + ta.focus(); + ta.select(); + document.execCommand('copy'); + document.body.removeChild(ta); + } apiKeyCopied.value = true; setTimeout(() => { apiKeyCopied.value = false; }, 2000); }