Commit Graph

758 Commits

Author SHA1 Message Date
Dionisio Pozo 405721c679 Merge pull request #346 from abnvle/fix/share-password-download 2026-05-05 23:44:36 +02:00
abnvle 8527765bf2 style(share-dialog): give share button breathing room
The Share button moved into .share-options in bdb5a6c sat flush
against the section bottom border. Adds 20px bottom padding plus
margin-top:16px and margin-left:auto on the button so it aligns
right with the Close button below.
2026-05-05 21:57:15 +02:00
abnvle 3bc5c0873b fix(share): password-protected downloads via signed unlock cookie
After successful POST /api/s/{token}/verify, the server issues a
short-lived signed JWT cookie (oxi_share_unlock_<token>; HttpOnly;
SameSite=Lax; 1h TTL). Subsequent /api/s/{token} and
/api/s/{token}/download requests honour the cookie to bypass the
password gate, so password-protected file downloads work end-to-end.

- New module src/infrastructure/services/share_unlock_cookie.rs:
  issue_jwt, verify_jwt, extract_from_cookie_header, build_set_cookie
  + 10 unit tests.
- New ShareService methods issue_unlock_jwt and
  get_shared_link_with_unlock; trait method get_shared_link_by_token
  delegates to a private fetch_share_resolved with an
  allow_password_protected flag.
- access_shared_item, verify_shared_item_password, and
  download_shared_file honour the unlock cookie.

Reuses OXICLOUD_JWT_SECRET, no new env var. Auth-token JWTs and
unlock-cookie JWTs cannot be confused: auth requires
username/email/role/jti claims, unlock has only sub/exp/iat.
Cross-share replay rejected via claims.sub == requested_token check.
2026-05-05 21:56:49 +02:00
Dionisio Pozo e4ea2211ea Merge pull request #329 from EdouardVanbelle/feat/drop-to-sytem 2026-05-04 22:45:19 +02:00
Edouard Vanbelle 0cb641ab20 feat(openapi): add new entry used by drag & drop 2026-05-04 22:41:29 +02:00
Edouard Vanbelle 05037e7491 feat(ui): permit drag&drop to the operating system
a drop outside of the browser will:
  - upload the file if only 1 file selected
  - upload a .zip of the directory or multiple selection (browsers do not permit multiple upload yet)

note: I had to create a new handler because a post request to /api/batch/download is possible via JS but it will create a memory blob in the browser, during the drag action.

This may exhaust the browser's memory if heavy files
This will initiate zip creation from the server even if drop is canceled
The best approach is to add a handler supporting GET calls, this call will be triggered by the browser on drop action outside of it's window
2026-05-04 22:32:31 +02:00
Edouard Vanbelle fbd59a1f38 feat(ui): permit drag&drop to the operating system
a drop outside of the browser will:
  - upload the file if only 1 file selected
  - upload a .zip of the directory or multiple selection (browsers do not permit multiple upload yet)

note: I had to create a new handler because a post request to /api/batch/download is possible via JS but it will create a memory blob in the browser, during the drag action.

This may exhaust the browser's memory if heavy files
This will initiate zip creation from the server even if drop is canceled
The best approach is to add a handler supporting GET calls, this call will be triggered by the browser on drop action outside of it's window
2026-05-04 22:31:20 +02:00
Dionisio Pozo 1cb541dca2 Merge pull request #331 from EdouardVanbelle/feat/full-openapi-coverage 2026-05-04 22:08:33 +02:00
Dionisio Pozo 162c29f283 Merge pull request #338 from EdouardVanbelle/feat/thumbnail-generation-from-client 2026-05-04 22:07:59 +02:00
Edouard Vanbelle e802cdb268 improvement(ui): thumbnail generaiton uses now mime_type (ex: for .ogg containers can be music or video)
- improve also error handling (shows reason of thumbnail generation failure)
2026-05-04 21:16:50 +02:00
Edouard Vanbelle 1d2085457e feath(ui): photo lib now using thumbnail library 2026-05-04 21:08:19 +02:00
Edouard Vanbelle 23336cc2bd fix(ui): correct input-modal, hidden by default 2026-05-04 21:04:15 +02:00
Edouard Vanbelle f6cd18e5e9 feat: generate thumbnail from client is not found on server
- supported thumbnail filetype: image, pdf, video
- add play character if video's thumbnail is loaded
2026-05-04 21:04:15 +02:00
Dionisio Pozo c6b1b14444 Merge pull request #340 from abnvle/feat/polish-translation
add polish (pl) translation
2026-05-04 20:29:13 +02:00
Dionisio Pozo add9faa8c3 Merge pull request #339 from EdouardVanbelle/style/pedantic 2026-05-04 19:30:11 +02:00
Dionisio Pozo ce1ca88fcc Merge pull request #342 from EdouardVanbelle/audit 2026-05-04 19:29:15 +02:00
Dionisio Pozo ff18a2f085 Merge pull request #341 from EdouardVanbelle/style/clippy-warning-fix
style(server): correct clippy warnings
2026-05-04 18:52:01 +02:00
Edouard Vanbelle 0f8eb6d3ab chore: audit: ignore rustls-webpki 0.101.7 issue
# rustls-webpki 0.101.7 — three advisories, all transitive via AWS SDK → rustls 0.21.12.
   # aws-sdk-s3 1.x (latest) has not yet migrated to rustls 0.23.x; no upgrade path available.
   # Severity: low — exploitation requires either a rogue CA or a MitM on AWS S3 infrastructure.
   #   RUSTSEC-2026-0104: DoS via panic in CRL parsing (only if CRLs are processed).
   #   RUSTSEC-2026-0098: URI name constraints ignored (requires CA misissuance).
   #   RUSTSEC-2026-0099: Wildcard name constraint bypass (requires CA misissuance).
   "RUSTSEC-2026-0104",
   "RUSTSEC-2026-0098",
   "RUSTSEC-2026-0099",

   # instant unmaintained — transitive via azure_core 0.21.0 (latest available).
   # No direct security impact; no upgrade path exists.
   "RUSTSEC-2024-0384",
2026-05-04 14:25:45 +02:00
Edouard Vanbelle 46e823ffda chore: move specific CI audit rules into global .cargo/audit.toml 2026-05-04 14:23:01 +02:00
Edouard Vanbelle b6eec61677 chore: update Cargo dependencies to reduce security audit issues 2026-05-04 14:01:00 +02:00
Edouard Vanbelle fde8d9d69f chore: add audit in justfile 2026-05-04 14:01:00 +02:00
Edouard Vanbelle 6e1c435098 style(server): correct clippy warnings 2026-05-04 12:58:30 +02:00
Edouard Vanbelle d0c6bd6a73 feat(openapi): upgrade code to gnerate openapi on all path 2026-05-04 12:02:33 +02:00
abnvle e0a3578ee2 add polish (pl) translation 2026-05-04 00:20:41 +02:00
Edouard Vanbelle 3050556dc0 style(ui): request that all types defined
- check in more restrictive mode = request types
- define main types in static/js/core/types.js
2026-05-03 23:04:27 +02:00
Dionisio Pozo 97ea87efc2 Merge pull request #337 from gidsi/fix/carddav-bugs 2026-05-01 09:43:45 +02:00
DeepRot c041dfece4 fix(carddav): resolve PROPFIND 404 and MKCOL 500 bugs 2026-05-01 09:10:23 +02:00
Dionisio Pozo af44d67ff8 Merge pull request #336 from gidsi/fix/caldav-username-prefix-routing 2026-04-30 23:39:20 +02:00
Timm d0086bb433 fix(dav): handle username prefix in all CalDAV and CardDAV route handlers
The PROPFIND handlers (added in #153) handle the /caldav/{username}/ and
/carddav/{username}/ prefixes returned by discovery, but do so via an
expensive database call to distinguish usernames from UUIDs. The remaining
handlers (PUT, GET, DELETE, REPORT, PROPPATCH) don't handle the prefix
at all, causing 500 errors when standard clients (DAVx5, Apple Calendar,
Thunderbird) follow the discovery URLs.

This commit:
1. Adds a strip_username_prefix() helper that uses a UUID parse check
   to distinguish collection IDs from usernames (no DB call needed).
2. Applies it to PUT, GET, DELETE, REPORT, and PROPPATCH handlers in
   both caldav_handler.rs and carddav_handler.rs.
3. Refactors PROPFIND in both files to use the same UUID heuristic for
   consistency, avoiding unnecessary database queries.

Includes 7 unit tests for the helper function.
2026-04-30 14:14:14 +02:00
Dionisio Pozo 05d3b2abaa Merge pull request #327 from EdouardVanbelle/style/claude-please-please-please-no-more-duplicate
style(claude): minimize code duplicate...
2026-04-27 22:02:02 +02:00
Edouard Vanbelle 444d242e63 style(claude): minimize code duplicate... 2026-04-27 21:41:38 +02:00
Dionisio Pozo 84b5f1da4e Merge pull request #325 from EdouardVanbelle/fix/rust-linter 2026-04-27 20:32:54 +02:00
Edouard Vanbelle 3a315ae75d chore(rust): use same params for clippy as the CI + correct clippy warnings 2026-04-27 20:25:33 +02:00
DioCrafts 30fd3cc488 Fix thumbnail generation for CDC blob storage 2026-04-26 11:55:05 +02:00
Dionisio Pozo 8c2598c555 Merge pull request #321 from onthebed/clawoss/docs/316-wopi-public-base-url 2026-04-26 09:19:26 +02:00
Dionisio Pozo f22987e7b2 Merge pull request #319 from EdouardVanbelle/refactor/fix-css-direct-colors 2026-04-26 09:17:49 +02:00
Dionisio Pozo c669b72a4e Merge pull request #317 from EdouardVanbelle/refactor/i18n 2026-04-26 09:17:06 +02:00
onthebed 0629177278 docs(wopi): document public and callback base URLs
Clarify how OXICLOUD_WOPI_PUBLIC_BASE_URL and OXICLOUD_WOPI_BASE_URL
should be set when the office editor runs on a different hostname.
2026-04-26 13:16:04 +08:00
Edouard Vanbelle f5dade1551 refactor(ui): css: use of variables colors only 2026-04-26 01:16:40 +02:00
Edouard Vanbelle 08cbf3a423 style(ui): apply biome recos 2026-04-26 00:22:49 +02:00
Edouard Vanbelle ae15d5adc5 chore(ui): bump cache name to ensure refresh 2026-04-26 00:13:50 +02:00
Edouard Vanbelle 3d8bd2d618 refactor(ui): i18n: apply translation (made by Claude) 2026-04-26 00:13:46 +02:00
Edouard Vanbelle 5c19564102 refactor(ui): i18n: add missing + correct keys 2026-04-26 00:13:39 +02:00
Edouard Vanbelle 75d3984b8f refactor(ui): i18n: remove unnecessary wrappers 2026-04-26 00:13:12 +02:00
Edouard Vanbelle 4e2029969e refactor(ui): remove unnecessary checks (i18n is always defined) 2026-04-26 00:12:44 +02:00
Dionisio Pozo 156f3bc7ba Merge pull request #309 from EdouardVanbelle/refactor/keep-badge-order 2026-04-25 21:20:58 +02:00
Edouard Vanbelle 7b56b518d8 notification: remove dead code (notification class always present) 2026-04-25 21:10:04 +02:00
Edouard Vanbelle e148a92f5d refactor(ui): use hidden class for upload + menu 2026-04-25 21:10:04 +02:00
Edouard Vanbelle 35fc9a0619 improve(ui): share-dialog: click outside of dialog closes the window 2026-04-25 21:10:04 +02:00
Edouard Vanbelle fc8e529e7d refactor(ui): modal: use hidden class 2026-04-25 21:10:04 +02:00