Commit graph

34 commits

Author SHA1 Message Date
igor
512824693c enforce vault note encryption at Joplin Server proxy layer
Some checks failed
Build and push Joplock image / build-and-push (push) Has been cancelled
- add app/proxy/vaultProxyGuard.js: inspects proxied note writes and
  deletes before forwarding to upstream Joplin Server
- covers single PUT /api/items/root:/<id>.md:/content, batch PUT
  /api/batch_items, single DELETE, and batch DELETE
- rejects with 403 when a vault note body lacks the encrypted marker,
  or when a vault note is deleted via the sync proxy
- bodies over 10 MB stream through without inspection (resource blobs)
- unauthenticated requests stream through (upstream handles 401)
- wire guard into createServer.js proxy entry point; replay buffered
  body via Readable.from() on allow
- 34 new unit tests, all 394 tests passing
2026-05-21 16:09:09 +12:00
igor
974979c688 polish backup actions and size display
Some checks failed
Build and push Joplock image / build-and-push (push) Failing after 2m5s
2026-05-20 23:20:35 +12:00
igor
175cf98038 add backup delete action and explicit compression modes 2026-05-20 23:13:18 +12:00
igor
d722a36895 hide view for non-previewable resources
Some checks are pending
Build and push Joplock image / build-and-push (push) Waiting to run
2026-05-20 14:56:00 +12:00
igor
0b66045326 retry admin bootstrap until Joplin Server DB is ready on fresh install 2026-05-20 13:20:13 +12:00
igor
1418cd426a show pg version in admin db compression section; hide toast compression UI on pg < 14 2026-05-20 13:12:26 +12:00
igor
2dd5e1c7bd option DB compression to lz4 2026-05-20 12:03:11 +12:00
igor
4fe91bbbf4 improve resource viewer: inline text, per-type preview, pinch-zoom on iOS
Some checks are pending
Build and push Joplock image / build-and-push (push) Waiting to run
2026-05-19 21:51:53 +12:00
igor
3af1dd581b add resource actions and refresh PWA assets
Some checks are pending
Build and push Joplock image / build-and-push (push) Waiting to run
2026-05-19 19:04:31 +12:00
igor
3e80b61e20 add rendered-mode auto hyperlinks 2026-05-19 16:18:20 +12:00
igor
aec706bffd update mobile login and iOS downloads 2026-05-19 14:13:24 +12:00
igor
7dfe368194 recovery-rlimit 2026-05-19 13:52:13 +12:00
igor
749b7041bf download button 2026-05-19 13:41:21 +12:00
igor
5e0482da01 rate-limit login 2026-05-19 12:57:19 +12:00
igor
d96ea802e9 fix note creation on proxied dev server 2026-05-18 21:50:14 +12:00
igor
1ca6f619a9 Add backup compression presets 2026-05-18 19:59:28 +12:00
igor
a36949aab5 Add recovery backups and fix theme/title edge cases 2026-05-18 19:34:06 +12:00
igor
a70efdd296 Fix rendered-mode image uploads and save state
Some checks failed
Build and push Joplock image / build-and-push (push) Has been cancelled
2026-05-15 15:27:02 +12:00
igor
0698bbd78e Unify note title sanitization
Use the shared title sanitizer for both SSR and client-side title editing
so note titles are cleaned by one function. Also sanitize note titles on
create in the fragments route and add a regression test for formatted
titles.
2026-05-01 19:38:25 +12:00
igor
1c236c9721 Replace hand-rolled markdown renderer with markdown-it; fix blank-line round-trip and editor UX
- Install markdown-it@14.1.1 as server-side renderer (renderMarkdown only)
- Preserve all Joplin extensions: underline (++..++), checkboxes,
  blank-line markers, softbreak→<br>, resource URIs, spellcheck attrs,
  hx-* strip, fence/code/image/link render overrides
- Fix blank-line round-trip: emptyDiv/emptyP Turndown rules now return
  the BL sentinel instead of '<br>' (which line 611 inflated to 4 newlines)
  or '' (which made blank-line edits never save)
- Disable CSS scroll anchoring in preview editor so images flow down
  naturally when text is typed above them
- Narrow the Notebook + button label and padding in the nav header
- Bump static asset version to 20260501a
2026-05-01 13:20:22 +12:00
igor
67afe502a0 Render fenced code blocks nested in list items
Custom regex renderer's fence extraction required column-0 anchoring,
so any fence inside a list item (or with leading whitespace) was missed
and the loose backticks were mangled by the inline-code regex. Add a
list-item-nested fence pass that outdents the body and preserves the
surrounding list structure as a placeholder, plus relax the column-0
fence regex to allow up to 3 spaces of indentation per CommonMark and
trailing whitespace on the closing fence.
2026-05-01 10:30:03 +12:00
igor
003dc817de Refactor mobile shell to state machine; enforce single-screen invariant
Some checks are pending
Build and push Joplock image / build-and-push (push) Waiting to run
Eliminates fragile ad-hoc DOM toggling that allowed two mobile screens to
render simultaneously. All transitions now go through setMobileState()
reducer; renderMobile() is the only function that writes
.mobile-screen-active. assertSingleActiveScreen() self-heals violations
and traces them. Test asserts the architectural invariant in source.

Also: DB session lookup fails closed on transient errors instead of
crashing; mobile back-save uses formHash (not UI badge); single-screen
CSS via display:none/flex (no transforms); resize debounced without
reload; aria-hidden warning fix.
2026-05-01 00:10:43 +12:00
igor
00e1172121 fix mobile shell layout and add display mode setting 2026-04-30 09:13:46 +12:00
igor
3aff615878 Add vault/notebook encryption: client-side AES-256-GCM E2EE with SVG lock icons, mobile vault support, startup resume gate, and re-entry guard
Some checks failed
Build and push Joplock image / build-and-push (push) Has been cancelled
2026-04-28 22:25:46 +12:00
igor
65b0c9c463 improve auto logoff 2026-04-27 22:51:54 +12:00
igor
22a40f5393 fix trash
Some checks are pending
Build and push Joplock image / build-and-push (push) Waiting to run
2026-04-27 20:35:02 +12:00
igor
b735224377 Refactor route rendering and harden editor session handling
Some checks are pending
Build and push Joplock image / build-and-push (push) Waiting to run
2026-04-27 00:24:23 +12:00
igor
909484b1ae Fix All Notes showing empty: normalize __all_notes__ to __all__ in folder-notes endpoint 2026-04-26 17:04:10 +12:00
igor
8e83712353 Revert resource caching to no-store for maximum security 2026-04-26 16:47:40 +12:00
igor
8adc4f2ab9 Cache resources with immutable header to eliminate repeated image fetches from DB 2026-04-26 16:43:02 +12:00
igor
01eccb973a implement phase 6: search pagination + pg_trgm trigram index
- ensureIndexes: CREATE EXTENSION pg_trgm + GIN index on extracted title+body
- searchNotes: add limit/offset params (default 50/0)
- /fragments/search: read offset param, detect hasMore, paginate
- /fragments/mobile/search: same, target #mobile-search-results
- searchResultsFragment: Load more button when hasMore (hx-swap=beforeend)
- mobileSearchFragment: Load more button when hasMore
- Tests: 137/137 passing (8 new search pagination tests)
2026-04-26 12:38:09 +12:00
igor
fd468fe3e3 implement lazy folder expansion and paginated note loading for large databases
- Add DB index on (owner_id, jop_type, jop_parent_id, jop_updated_time DESC)
- New folderNoteCountsByUserId query: GROUP BY folder, no row data fetched
- New noteHeadersByFolder query: paginated per folder (LIMIT 100)
- navData() now fetches only folders + counts (no note rows on page load)
- navigationFragment: lazy mode renders empty note lists, lazy-loaded on expand
- toggleNavFolder / initNavPanel: htmx fetch on first expand, data-loaded guard
- Add /fragments/folder-notes endpoint for lazy per-folder note pages
- Add folderNotesPageFragment with Load more button for pagination
- Mobile: folders use counts Map, notes use paginated noteHeadersByFolder
- Tests: 129/129 passing
2026-04-26 12:22:05 +12:00
igor
91fb055c75 improve mobile search and editor state
Some checks are pending
Build and push Joplock image / build-and-push (push) Waiting to run
Keep search context when opening notes and make in-note search behave consistently across desktop, mobile, markdown, and render modes.
2026-04-26 00:55:23 +12:00
igor
d606ecf60f fix mobile resume startup and editor targeting 2026-04-25 20:51:37 +12:00