|
| 1 | +import nacl from 'tweetnacl' |
| 2 | +import naclUutil from 'tweetnacl-util' |
| 3 | +import { Base64 } from 'js-base64' |
| 4 | + |
| 5 | +console.log("ass " + nacl + naclUutil + Base64) |
| 6 | +// https://stackoverflow.com/questions/51562781/service-worker-fetch-event-is-not-firing |
| 7 | +self.addEventListener('activate', function (event) { |
| 8 | + console.log('Claiming control') |
| 9 | + return self.clients.claim() |
| 10 | +}) |
| 11 | +self.addEventListener("fetch", (event) => { |
| 12 | + |
| 13 | + // Regular requests not related to Web Share Target. |
| 14 | + if (event.request.method !== "POST" || new URL(event.request.url).pathname != "/share-target/") { |
| 15 | + event.respondWith(fetch(event.request)) |
| 16 | + return |
| 17 | + } |
| 18 | + |
| 19 | + // Requests related to Web Share Target. |
| 20 | + event.respondWith( |
| 21 | + (async () => { |
| 22 | + |
| 23 | + const formData = await event.request.formData() |
| 24 | + const nonce = nacl.randomBytes(nacl.secretbox.nonceLength) |
| 25 | + const key = nacl.randomBytes(nacl.secretbox.keyLength) |
| 26 | + // encrypt note or image |
| 27 | + // send to fetch api |
| 28 | + const imgBase64 = null // todo - base64 |
| 29 | + const f = await fetch('/api/save-note', { |
| 30 | + method: 'POST', |
| 31 | + headers: { |
| 32 | + 'Content-Type': 'application/json' |
| 33 | + }, |
| 34 | + body: JSON.stringify({ |
| 35 | + encryptedText: naclUutil.encodeBase64( |
| 36 | + nacl.secretbox( |
| 37 | + naclUutil.decodeUTF8(formData.get('text')), |
| 38 | + nonce, |
| 39 | + key |
| 40 | + ) |
| 41 | + ), |
| 42 | + encryptedImg: imgBase64 != null ? naclUutil.encodeBase64( |
| 43 | + nacl.secretbox( |
| 44 | + naclUutil.decodeUTF8(imgBase64), |
| 45 | + nonce, |
| 46 | + key |
| 47 | + ) |
| 48 | + ) : null, |
| 49 | + // code is hard |
| 50 | + expiresHours: "4", |
| 51 | + expiresViews: "1" |
| 52 | + }) |
| 53 | + }) |
| 54 | + const { id } = await f.json() |
| 55 | + |
| 56 | + const hash = Base64.encode( |
| 57 | + JSON.stringify({ |
| 58 | + nonce: naclUutil.encodeBase64(nonce), |
| 59 | + key: naclUutil.encodeBase64(key) |
| 60 | + }) |
| 61 | + ) |
| 62 | + // respond with saved note page |
| 63 | + return Response.redirect(`/noteSaved?id=${id}#${hash}`, 303) |
| 64 | + })(), |
| 65 | + ) |
| 66 | +}) |
0 commit comments