From 59e87208667f724f36989c260f548d1cf863061b Mon Sep 17 00:00:00 2001 From: zadam Date: Fri, 11 Feb 2022 22:01:45 +0100 Subject: [PATCH 1/9] fix importing unknown image types such as .DWG, closes #2628 --- src/services/image.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/services/image.js b/src/services/image.js index 9457d1aa4..c2ee26690 100644 --- a/src/services/image.js +++ b/src/services/image.js @@ -17,8 +17,7 @@ async function processImage(uploadBuffer, originalName, shrinkImageSwitch) { const compressImages = optionService.getOptionBool("compressImages"); const origImageFormat = getImageType(uploadBuffer); - if (origImageFormat && ["webp", "svg", "gif"].includes(origImageFormat.ext)) { - // JIMP does not support webp at the moment: https://github.com/oliver-moran/jimp/issues/144 + if (!origImageFormat || !["jpg", "png"].includes(origImageFormat.ext)) { shrinkImageSwitch = false; } else if (isAnimated(uploadBuffer)) { @@ -26,9 +25,18 @@ async function processImage(uploadBuffer, originalName, shrinkImageSwitch) { shrinkImageSwitch = false; } - const finalImageBuffer = (compressImages && shrinkImageSwitch) ? await shrinkImage(uploadBuffer, originalName) : uploadBuffer; + let finalImageBuffer; + let imageFormat; - const imageFormat = getImageType(finalImageBuffer); + if (compressImages && shrinkImageSwitch) { + finalImageBuffer = await shrinkImage(uploadBuffer, originalName); + imageFormat = getImageType(finalImageBuffer); + } else { + finalImageBuffer = uploadBuffer; + imageFormat = origImageFormat || { + ext: 'dat' + }; + } return { buffer: finalImageBuffer, @@ -43,7 +51,9 @@ function getImageType(buffer) { } } else { - return imageType(buffer) || "jpg"; // optimistic JPG default + return imageType(buffer) || { + ext: "jpg" + }; // optimistic JPG default } } From 23de8e881d9445e982f0bdeffb822572e9a22ffd Mon Sep 17 00:00:00 2001 From: zadam Date: Fri, 11 Feb 2022 22:05:08 +0100 Subject: [PATCH 2/9] make it clear that Dockerfile needs to be run through a script --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index ed3dead90..9edd6e3b9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,5 @@ +# !!! Don't try to build this Dockerfile directly, run it through bin/build-docker.sh script !!! + FROM node:16.13.2-alpine # Create app directory From db79b5ff531945b1318bd2a841ef3d4e197fa54a Mon Sep 17 00:00:00 2001 From: zadam Date: Mon, 14 Feb 2022 22:59:03 +0100 Subject: [PATCH 3/9] fixed blurred selection background color, closes #2652 --- src/public/stylesheets/ckeditor-theme.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/public/stylesheets/ckeditor-theme.css b/src/public/stylesheets/ckeditor-theme.css index 8ef29a790..54608015c 100644 --- a/src/public/stylesheets/ckeditor-theme.css +++ b/src/public/stylesheets/ckeditor-theme.css @@ -93,6 +93,8 @@ body { --ck-color-labeled-field-label-background: var(--accented-background-color); + --ck-color-editable-blur-selection: var(--accented-background-color); + /* todo lists */ --ck-color-todo-list-checkmark-border: var(--main-border-color); From d940590add51f433cd32477effcea9d3c06cf8cb Mon Sep 17 00:00:00 2001 From: zadam Date: Fri, 18 Feb 2022 22:00:58 +0100 Subject: [PATCH 4/9] raise line-height in share CSS to 1.5, fixes #2671 --- package-lock.json | 18 +++++++++--------- package.json | 2 +- src/public/stylesheets/share.css | 1 + 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index eb4048395..903a8bff4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "trilium", - "version": "0.50.0-beta", + "version": "0.50.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "trilium", - "version": "0.50.0-beta", + "version": "0.50.2", "license": "AGPL-3.0-only", "dependencies": { "@electron/remote": "2.0.4", @@ -70,7 +70,7 @@ }, "devDependencies": { "cross-env": "7.0.3", - "electron": "16.0.8", + "electron": "16.0.9", "electron-builder": "22.14.5", "electron-packager": "15.4.0", "electron-rebuild": "3.2.7", @@ -3704,9 +3704,9 @@ } }, "node_modules/electron": { - "version": "16.0.8", - "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.8.tgz", - "integrity": "sha512-znTVkl8LaGcPNdfc6SRr+6LYg2GtSCKXln/nW/PC+urBfAFnOYIuDock8QyGVFfzr5PuAa+g8YQQAboHV77D7g==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.9.tgz", + "integrity": "sha512-Kh2fc2g5Me0g8B1X2LMEDDtSNWsGGAmngh7adZpuJ8uI5TlR5GHDTcz37zwJid53S0BQ5d+Nz/NQ8s1DlKAAMA==", "hasInstallScript": true, "dependencies": { "@electron/get": "^1.13.0", @@ -14250,9 +14250,9 @@ } }, "electron": { - "version": "16.0.8", - "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.8.tgz", - "integrity": "sha512-znTVkl8LaGcPNdfc6SRr+6LYg2GtSCKXln/nW/PC+urBfAFnOYIuDock8QyGVFfzr5PuAa+g8YQQAboHV77D7g==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.9.tgz", + "integrity": "sha512-Kh2fc2g5Me0g8B1X2LMEDDtSNWsGGAmngh7adZpuJ8uI5TlR5GHDTcz37zwJid53S0BQ5d+Nz/NQ8s1DlKAAMA==", "requires": { "@electron/get": "^1.13.0", "@types/node": "^14.6.2", diff --git a/package.json b/package.json index 0d6dc3620..a25ac0c42 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ }, "devDependencies": { "cross-env": "7.0.3", - "electron": "16.0.8", + "electron": "16.0.9", "electron-builder": "22.14.5", "electron-packager": "15.4.0", "electron-rebuild": "3.2.7", diff --git a/src/public/stylesheets/share.css b/src/public/stylesheets/share.css index 1031eaa9f..718f8594c 100644 --- a/src/public/stylesheets/share.css +++ b/src/public/stylesheets/share.css @@ -1,5 +1,6 @@ body { font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; + line-height: 1.5; } #layout { From 9f337919229fe089de7dc6ca582247b94078024e Mon Sep 17 00:00:00 2001 From: zadam Date: Fri, 18 Feb 2022 22:34:46 +0100 Subject: [PATCH 5/9] fix uploading binary data through ETAPI, closes #2667 --- src/app.js | 1 + test-etapi/put-note-content-binary.http | 25 +++++++++++++++++++++++++ test-etapi/put-note-content.http | 2 ++ 3 files changed, 28 insertions(+) create mode 100644 test-etapi/put-note-content-binary.http diff --git a/src/app.js b/src/app.js index 6ba7c1b78..b530ca7e4 100644 --- a/src/app.js +++ b/src/app.js @@ -25,6 +25,7 @@ app.use(helmet({ app.use(express.text({limit: '500mb'})); app.use(express.json({limit: '500mb'})); +app.use(express.raw({limit: '500mb'})); app.use(express.urlencoded({extended: false})); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); diff --git a/test-etapi/put-note-content-binary.http b/test-etapi/put-note-content-binary.http new file mode 100644 index 000000000..545b3c111 --- /dev/null +++ b/test-etapi/put-note-content-binary.http @@ -0,0 +1,25 @@ +POST {{triliumHost}}/etapi/create-note +Authorization: {{authToken}} +Content-Type: application/json + +{ + "parentNoteId": "root", + "title": "Hello", + "type": "image", + "mime": "image/png", + "content": "" +} + +> {% client.global.set("createdNoteId", response.body.note.noteId); %} + +### + +PUT {{triliumHost}}/etapi/notes/{{createdNoteId}}/content +Authorization: {{authToken}} +Content-Type: application/octet-stream +Content-Transfer-Encoding: binary + +< ../images/icon-color.png + +> {% client.assert(response.status === 204); %} + diff --git a/test-etapi/put-note-content.http b/test-etapi/put-note-content.http index 10b7f1d21..66797c0dc 100644 --- a/test-etapi/put-note-content.http +++ b/test-etapi/put-note-content.http @@ -20,6 +20,8 @@ Content-Type: text/plain Changed content +> {% client.assert(response.status === 200); %} + ### GET {{triliumHost}}/etapi/notes/{{createdNoteId}}/content From ea56bb772aa8b542775e8d8063a2df75a106987d Mon Sep 17 00:00:00 2001 From: zadam Date: Sun, 20 Feb 2022 12:33:50 +0100 Subject: [PATCH 6/9] logging improvements --- src/routes/api/clipper.js | 2 +- src/services/attributes.js | 2 +- src/services/cloning.js | 3 +++ src/services/image.js | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/routes/api/clipper.js b/src/routes/api/clipper.js index db6a2068f..d6f131843 100644 --- a/src/routes/api/clipper.js +++ b/src/routes/api/clipper.js @@ -138,7 +138,7 @@ function processContent(images, note, content) { value: imageNote.noteId }).save(); - console.log(`Replacing ${imageId} with ${url}`); + log.info(`Replacing ${imageId} with ${url} in note ${note.noteId}`); rewrittenContent = utils.replaceAll(rewrittenContent, imageId, url); } diff --git a/src/services/attributes.js b/src/services/attributes.js index 5fcc121bd..3ddd41223 100644 --- a/src/services/attributes.js +++ b/src/services/attributes.js @@ -20,7 +20,7 @@ function getNotesWithLabel(name, value) { // TODO: should be in search service /** @returns {Note|null} */ -function getNoteWithLabel(name, value) { +function getNoteWithLabel(name, value = undefined) { // optimized version (~20 times faster) without using normal search, useful for e.g. finding date notes const attrs = becca.findAttributes('label', name); diff --git a/src/services/cloning.js b/src/services/cloning.js index 9fce5234c..8685d6596 100644 --- a/src/services/cloning.js +++ b/src/services/cloning.js @@ -9,6 +9,7 @@ const TaskContext = require("./task_context"); const utils = require('./utils'); const becca = require("../becca/becca"); const beccaService = require("../becca/becca_service"); +const log = require("./log"); function cloneNoteToNote(noteId, parentNoteId, prefix) { if (parentNoteId === 'share') { @@ -73,6 +74,8 @@ function ensureNoteIsPresentInParent(noteId, parentNoteId, prefix) { prefix: prefix, isExpanded: 0 }).save(); + + log.info(`Creating new branch between child '${noteId}' and parent '${parentNoteId}'`); } function ensureNoteIsAbsentFromParent(noteId, parentNoteId) { diff --git a/src/services/image.js b/src/services/image.js index c2ee26690..4c64e8ee5 100644 --- a/src/services/image.js +++ b/src/services/image.js @@ -85,7 +85,7 @@ function updateImage(noteId, uploadBuffer, originalName) { } function saveImage(parentNoteId, uploadBuffer, originalName, shrinkImageSwitch, trimFilename = false) { - log.info(`Saving image ${originalName}`); + log.info(`Saving image ${originalName} into parent ${parentNoteId}`); if (trimFilename && originalName.length > 40) { // https://github.com/zadam/trilium/issues/2307 From 316a2aee1adc0c0d200da188ef0294be37e002ea Mon Sep 17 00:00:00 2001 From: zadam Date: Sun, 20 Mar 2022 22:23:48 +0100 Subject: [PATCH 7/9] invalidate flat text cache after login to protected session, fixes #2712 --- package-lock.json | 42 +++++++++++++++++++------------------- package.json | 6 +++--- src/becca/entities/note.js | 1 + 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 903a8bff4..4525d9bdb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.50.2", "license": "AGPL-3.0-only", "dependencies": { - "@electron/remote": "2.0.4", + "@electron/remote": "2.0.8", "archiver": "5.3.0", "async-mutex": "0.3.2", "axios": "0.25.0", @@ -44,7 +44,7 @@ "jsdom": "19.0.0", "mime-types": "2.1.34", "multer": "1.4.4", - "node-abi": "3.7.0", + "node-abi": "3.8.0", "normalize-strings": "1.1.1", "open": "8.4.0", "portscanner": "2.2.0", @@ -70,7 +70,7 @@ }, "devDependencies": { "cross-env": "7.0.3", - "electron": "16.0.9", + "electron": "16.1.0", "electron-builder": "22.14.5", "electron-packager": "15.4.0", "electron-rebuild": "3.2.7", @@ -202,9 +202,9 @@ } }, "node_modules/@electron/remote": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.0.4.tgz", - "integrity": "sha512-8m2P/d2RH986PmMW5lKygbPEjEYJ7RgCe37Y8DQ1wujKMH6VjmLIB+Y+DP2SA611svCZc58TRSd8FraGvcfGZw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.0.8.tgz", + "integrity": "sha512-P10v3+iFCIvEPeYzTWWGwwHmqWnjoh8RYnbtZAb3RlQefy4guagzIwcWtfftABIfm6JJTNQf4WPSKWZOpLmHXw==", "peerDependencies": { "electron": ">= 13.0.0" } @@ -3704,9 +3704,9 @@ } }, "node_modules/electron": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.9.tgz", - "integrity": "sha512-Kh2fc2g5Me0g8B1X2LMEDDtSNWsGGAmngh7adZpuJ8uI5TlR5GHDTcz37zwJid53S0BQ5d+Nz/NQ8s1DlKAAMA==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-16.1.0.tgz", + "integrity": "sha512-G4fpHmE3sgd497e0zEier/AmZ4fyReX8ozYAl468+FaI5kb44+69igRHQwRUtmPzv+fCn/Jm4wJQPfLe60WmUQ==", "hasInstallScript": true, "dependencies": { "@electron/get": "^1.13.0", @@ -7765,9 +7765,9 @@ "dev": true }, "node_modules/node-abi": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.7.0.tgz", - "integrity": "sha512-3J+U4CvxVNEk9+lGdJkmYbN8cIN0HMTDT9R0ezX7pmp7aD6BaKsfAHwVn3IvVg6pYIRUuQ+gHW1eawrvywnSQQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.8.0.tgz", + "integrity": "sha512-tzua9qWWi7iW4I42vUPKM+SfaF0vQSLAm4yO5J83mSwB7GeoWrDKC/K+8YCnYNwqP5duwazbw2X9l4m8SC2cUw==", "dependencies": { "semver": "^7.3.5" }, @@ -11447,9 +11447,9 @@ } }, "@electron/remote": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.0.4.tgz", - "integrity": "sha512-8m2P/d2RH986PmMW5lKygbPEjEYJ7RgCe37Y8DQ1wujKMH6VjmLIB+Y+DP2SA611svCZc58TRSd8FraGvcfGZw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.0.8.tgz", + "integrity": "sha512-P10v3+iFCIvEPeYzTWWGwwHmqWnjoh8RYnbtZAb3RlQefy4guagzIwcWtfftABIfm6JJTNQf4WPSKWZOpLmHXw==", "requires": {} }, "@electron/universal": { @@ -14250,9 +14250,9 @@ } }, "electron": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.9.tgz", - "integrity": "sha512-Kh2fc2g5Me0g8B1X2LMEDDtSNWsGGAmngh7adZpuJ8uI5TlR5GHDTcz37zwJid53S0BQ5d+Nz/NQ8s1DlKAAMA==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-16.1.0.tgz", + "integrity": "sha512-G4fpHmE3sgd497e0zEier/AmZ4fyReX8ozYAl468+FaI5kb44+69igRHQwRUtmPzv+fCn/Jm4wJQPfLe60WmUQ==", "requires": { "@electron/get": "^1.13.0", "@types/node": "^14.6.2", @@ -17345,9 +17345,9 @@ "dev": true }, "node-abi": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.7.0.tgz", - "integrity": "sha512-3J+U4CvxVNEk9+lGdJkmYbN8cIN0HMTDT9R0ezX7pmp7aD6BaKsfAHwVn3IvVg6pYIRUuQ+gHW1eawrvywnSQQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.8.0.tgz", + "integrity": "sha512-tzua9qWWi7iW4I42vUPKM+SfaF0vQSLAm4yO5J83mSwB7GeoWrDKC/K+8YCnYNwqP5duwazbw2X9l4m8SC2cUw==", "requires": { "semver": "^7.3.5" } diff --git a/package.json b/package.json index a25ac0c42..682ac7f3e 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "electron-dl": "3.3.0", "electron-find": "1.0.7", "electron-window-state": "5.0.3", - "@electron/remote": "2.0.4", + "@electron/remote": "2.0.8", "express": "4.17.2", "express-partial-content": "1.0.2", "express-rate-limit": "6.2.0", @@ -59,7 +59,7 @@ "jsdom": "19.0.0", "mime-types": "2.1.34", "multer": "1.4.4", - "node-abi": "3.7.0", + "node-abi": "3.8.0", "normalize-strings": "1.1.1", "open": "8.4.0", "portscanner": "2.2.0", @@ -82,7 +82,7 @@ }, "devDependencies": { "cross-env": "7.0.3", - "electron": "16.0.9", + "electron": "16.1.0", "electron-builder": "22.14.5", "electron-packager": "15.4.0", "electron-rebuild": "3.2.7", diff --git a/src/becca/entities/note.js b/src/becca/entities/note.js index 7d0c57c72..43e1c93f1 100644 --- a/src/becca/entities/note.js +++ b/src/becca/entities/note.js @@ -1127,6 +1127,7 @@ class Note extends AbstractEntity { if (this.isProtected && !this.isDecrypted && protectedSessionService.isProtectedSessionAvailable()) { try { this.title = protectedSessionService.decryptString(this.title); + this.flatTextCache = null; this.isDecrypted = true; } From 0cd690d9807fdb7bfdc38aa5862d3ba7fe6ca2fb Mon Sep 17 00:00:00 2001 From: zadam Date: Mon, 21 Mar 2022 23:28:19 +0100 Subject: [PATCH 8/9] fix inclusion of `share.js` in builds, fixes #2738 --- bin/copy-trilium.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bin/copy-trilium.sh b/bin/copy-trilium.sh index e66026c22..7033a3d0a 100755 --- a/bin/copy-trilium.sh +++ b/bin/copy-trilium.sh @@ -44,8 +44,11 @@ find $DIR/node_modules -name demo -exec rm -rf {} \; find $DIR/libraries -name "*.map" -type f -delete +cp $DIR/src/public/app/share.js $DIR/src/public/app-dist/ + rm -rf $DIR/src/public/app sed -i -e 's/app\/desktop.js/app-dist\/desktop.js/g' $DIR/src/views/desktop.ejs sed -i -e 's/app\/mobile.js/app-dist\/mobile.js/g' $DIR/src/views/mobile.ejs sed -i -e 's/app\/setup.js/app-dist\/setup.js/g' $DIR/src/views/setup.ejs +sed -i -e 's/app\/share.js/app-dist\/share.js/g' $DIR/src/views/share/*.ejs From 2f57d55bea11a840a158fb0431d267186a32482a Mon Sep 17 00:00:00 2001 From: zadam Date: Tue, 22 Mar 2022 21:02:32 +0100 Subject: [PATCH 9/9] add allow robots.txt tag for /share --- src/public/robots.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/public/robots.txt b/src/public/robots.txt index 1f53798bb..7ea32fccc 100644 --- a/src/public/robots.txt +++ b/src/public/robots.txt @@ -1,2 +1,3 @@ User-agent: * +Allow: /share/ Disallow: /