diff --git a/browser-extension/background.js b/browser-extension/background.js index 19cdb62..7a76082 100644 --- a/browser-extension/background.js +++ b/browser-extension/background.js @@ -22,6 +22,8 @@ browser.runtime.onMessage.addListener((msg, sender) => { return listUsers(); case 'save_note': return saveNote(msg); + case 'upload_attachment': + return uploadAttachment(msg); default: return Promise.reject(new Error('Unknown message kind')); } @@ -69,3 +71,33 @@ async function saveNote(msg) { body: JSON.stringify(body), }); } + +async function uploadAttachment(msg) { + const base = await getServerUrl(); + if (!base) { + throw new Error('Server URL not set — open snotes and click "Capture" → "Apply to Extension", or set it in Options'); + } + const blob = dataUrlToBlob(msg.dataUrl); + const form = new FormData(); + form.append('file', blob, msg.filename || 'page.png'); + if (msg.username) form.append('username', msg.username); + const res = await fetch(base + '/api/attachments', { + method: 'POST', + body: form, + credentials: 'include', + }); + if (!res.ok) { + const err = await res.json().catch(() => ({})); + throw new Error(err.detail || 'HTTP ' + res.status); + } + return res.json(); +} + +function dataUrlToBlob(dataUrl) { + const [meta, b64] = dataUrl.split(','); + const mime = (meta.match(/data:(.*?);/) || [])[1] || 'image/png'; + const bin = atob(b64); + const bytes = new Uint8Array(bin.length); + for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i); + return new Blob([bytes], { type: mime }); +} diff --git a/browser-extension/manifest.json b/browser-extension/manifest.json index 1a4c62c..3d2e814 100644 --- a/browser-extension/manifest.json +++ b/browser-extension/manifest.json @@ -4,10 +4,11 @@ "version": "1.0.2", "description": "Quick-capture a note to snotes from any page, with the selected text and page link ready to use", "permissions": [ - "storage" + "storage", + "activeTab" ], "content_security_policy": { - "extension_pages": "default-src 'self'; script-src 'self'; style-src 'self'; connect-src http://* https://*" + "extension_pages": "default-src 'self'; script-src 'self'; style-src 'self'; connect-src http: https:" }, "host_permissions": [ "http://*/*", diff --git a/browser-extension/popup.html b/browser-extension/popup.html index b0c2b61..380526e 100644 --- a/browser-extension/popup.html +++ b/browser-extension/popup.html @@ -6,7 +6,7 @@