Skip to content

merge upstream/master into oadp-dev - #30

Open
Joeavaikath wants to merge 59 commits into
migtools:oadp-devfrom
oadp-rebasebot:rebase-bot-oadp-dev
Open

merge upstream/master into oadp-dev#30
Joeavaikath wants to merge 59 commits into
migtools:oadp-devfrom
oadp-rebasebot:rebase-bot-oadp-dev

Conversation

@Joeavaikath

@Joeavaikath Joeavaikath commented Jul 21, 2026

Copy link
Copy Markdown

This is an automated rebase PR generated by RebaseBot.

Summary

  • Source: https://github.com/filebrowser/filebrowser:master
  • Destination: https://github.com/migtools/filebrowser:oadp-dev
  • 49 new upstream commits

Logs

View job log

@openshift-ci
openshift-ci Bot requested review from kaovilai and mpryc July 21, 2026 20:51
@openshift-ci

openshift-ci Bot commented Jul 21, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: Joeavaikath

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Too many files!

This PR contains 118 files, which is 18 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 8aa5a510-00c8-43c4-8a9d-b5d3bd8b9756

📥 Commits

Reviewing files that changed from the base of the PR and between e05c02e and ea684ea.

⛔ Files ignored due to path filters (11)
  • docs/static/1.jpg is excluded by !**/*.jpg
  • docs/static/2.jpg is excluded by !**/*.jpg
  • docs/static/3.jpg is excluded by !**/*.jpg
  • docs/static/4.jpg is excluded by !**/*.jpg
  • docs/static/5.jpg is excluded by !**/*.jpg
  • docs/static/6.jpg is excluded by !**/*.jpg
  • docs/static/example.gif is excluded by !**/*.gif
  • docs/static/favicon.png is excluded by !**/*.png
  • docs/static/logo.png is excluded by !**/*.png
  • frontend/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (118)
  • .claude/CLAUDE.md
  • .github/PULL_REQUEST_TEMPLATE.md
  • .github/workflows/docs.yml
  • CHANGELOG.md
  • CONTRIBUTING.md
  • README.md
  • SECURITY.md
  • Taskfile.yml
  • auth/hook.go
  • auth/hook_test.go
  • auth/proxy.go
  • auth/proxy_test.go
  • cmd/cmd_test.go
  • cmd/config.go
  • cmd/docs.go
  • cmd/root.go
  • docs/README.md
  • docs/authentication.md
  • docs/cli/filebrowser-cmds-add.md
  • docs/cli/filebrowser-cmds-ls.md
  • docs/cli/filebrowser-cmds-rm.md
  • docs/cli/filebrowser-cmds.md
  • docs/cli/filebrowser-completion-bash.md
  • docs/cli/filebrowser-completion-fish.md
  • docs/cli/filebrowser-completion-powershell.md
  • docs/cli/filebrowser-completion-zsh.md
  • docs/cli/filebrowser-completion.md
  • docs/cli/filebrowser-config-cat.md
  • docs/cli/filebrowser-config-export.md
  • docs/cli/filebrowser-config-import.md
  • docs/cli/filebrowser-config-init.md
  • docs/cli/filebrowser-config-set.md
  • docs/cli/filebrowser-config.md
  • docs/cli/filebrowser-hash.md
  • docs/cli/filebrowser-rules-add.md
  • docs/cli/filebrowser-rules-ls.md
  • docs/cli/filebrowser-rules-rm.md
  • docs/cli/filebrowser-rules.md
  • docs/cli/filebrowser-users-add.md
  • docs/cli/filebrowser-users-export.md
  • docs/cli/filebrowser-users-find.md
  • docs/cli/filebrowser-users-import.md
  • docs/cli/filebrowser-users-ls.md
  • docs/cli/filebrowser-users-rm.md
  • docs/cli/filebrowser-users-update.md
  • docs/cli/filebrowser-users.md
  • docs/cli/filebrowser-version.md
  • docs/cli/filebrowser.md
  • docs/command-execution.md
  • docs/customization.md
  • docs/deployment.md
  • docs/installation.md
  • docs/troubleshooting.md
  • files/case.go
  • files/case_test.go
  • frontend/public/index.html
  • frontend/src/App.vue
  • frontend/src/components/files/ExtendedImage.vue
  • frontend/src/components/files/ListingItem.vue
  • frontend/src/components/header/HeaderBar.vue
  • frontend/src/components/prompts/Upload.vue
  • frontend/src/css/base.css
  • frontend/src/css/mobile.css
  • frontend/src/i18n/de.json
  • frontend/src/i18n/en.json
  • frontend/src/i18n/fr.json
  • frontend/src/i18n/hr.json
  • frontend/src/i18n/ko.json
  • frontend/src/i18n/nl.json
  • frontend/src/i18n/pl.json
  • frontend/src/i18n/pt-pt.json
  • frontend/src/i18n/zh-cn.json
  • frontend/src/router/index.ts
  • frontend/src/stores/upload.ts
  • frontend/src/utils/__tests__/check-conflict.test.ts
  • frontend/src/utils/upload.ts
  • frontend/src/views/Settings.vue
  • frontend/src/views/Share.vue
  • frontend/src/views/files/FileListing.vue
  • frontend/src/views/files/__tests__/upload-conflict-resolution.test.ts
  • frontend/src/views/settings/Global.vue
  • go.mod
  • http/auth.go
  • http/auth_test.go
  • http/data.go
  • http/http.go
  • http/preview.go
  • http/public.go
  • http/raw.go
  • http/resource.go
  • http/resource_checksum_test.go
  • http/resource_recursive_test.go
  • http/rules_path_test.go
  • http/rules_recursive_test.go
  • http/static.go
  • http/tus_handlers.go
  • http/tus_multichunk_test.go
  • http/tus_upload_length_test.go
  • http/upload_cache_memory.go
  • http/upload_cache_memory_test.go
  • http/upload_cache_redis.go
  • http/utils.go
  • http/utils_test.go
  • renovate.json
  • rules/rules.go
  • rules/rules_test.go
  • settings/dir.go
  • settings/dir_test.go
  • settings/settings.go
  • storage/bolt/users.go
  • storage/bolt/users_test.go
  • users/storage.go
  • users/storage_test.go
  • www/.gitignore
  • www/Dockerfile
  • www/docs/index.md
  • www/mkdocs.yml
  • www/requirements.txt

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

📝 Walkthrough

Walkthrough

The change set updates backend path canonicalization, case-aware rule matching, user provisioning, upload enforcement, frontend accessibility and upload flows, security controls, repository documentation, and dependency update policy.

Changes

Backend security and path handling

Layer / File(s) Summary
Canonical paths and case-aware rules
files/*, http/*, rules/*, settings/*, storage/bolt/*
Virtual paths are normalized, filesystem case sensitivity is detected, and rule and scope matching support case-insensitive behavior where configured.
Provisioned user homes and scope collision protection
users/*, settings/*, auth/*, http/auth.go, storage/bolt/*
Authentication flows derive user homes through CreateUserHome, preserve explicit scopes, and serialize collision checks before saving derived scopes.
Upload length and scoped cleanup
http/tus_handlers.go, http/upload_cache_*, http/tus_upload_length_test.go
TUS PATCH writes enforce declared upload lengths, and abandoned uploads use scoped removal callbacks.
HTTP authorization and response hardening
http/resource.go, http/static.go, cmd/config.go, cmd/cmd_test.go
Checksum access requires download permission, static responses add nosniff, and the external-symlink flag is persisted.

Frontend accessibility and upload behavior

Layer / File(s) Summary
Accessible application presentation
frontend/public/index.html, frontend/src/App.vue, frontend/src/components/..., frontend/src/views/Share.vue, frontend/src/i18n/de.json
Accessible headings and image alternatives are added, viewport restrictions are relaxed, and German translations are corrected.
Navigation and encoded conflict paths
frontend/src/router/index.ts, frontend/src/utils/upload.ts, frontend/src/utils/__tests__/check-conflict.test.ts
Navigation guards use returned redirects, and upload conflict matching decodes URL-encoded path segments with fallback handling.
Upload conflict confirmation
frontend/src/views/files/FileListing.vue, frontend/src/views/files/__tests__/upload-conflict-resolution.test.ts
Conflict confirmation calls are adjusted and overwrite behavior is covered for drag-and-drop and file-input uploads.

Repository maintenance and documentation

Layer / File(s) Summary
Repository guidance and release documentation
.claude/CLAUDE.md, CHANGELOG.md, README.md, SECURITY.md, www/docs/installation.md
Repository guidance, release notes, security reporting instructions, project status wording, and the Alpine container identity reference are updated.
Dependency update policy
renovate.json, go.mod
Renovate is limited to security updates and Go dependencies are refreshed.

Estimated code review effort: 5 (Critical) | ~120 minutes

Suggested reviewers: kaovilai, mpryc

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 54.90% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately states that the pull request merges upstream/master into oadp-dev.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

hacdias and others added 24 commits July 25, 2026 07:25
… home

Proxy- and hook-authenticated users were auto-provisioned by applying the
default scope (".") and passing it straight to MakeUserDir, which normalizes
"." to "/". With CreateUserDir enabled, every provisioned user therefore
received the server root as its scope instead of a per-user home directory,
letting one user read, overwrite and delete another user's files.

The signup handler already cleared the scope before deriving the home
directory. Centralize that logic into Settings.CreateUserHome (clear the
scope when CreateUserDir is on and no explicit scope was supplied, derive the
home dir, then reject a scope already owned by another user) and use it from
signup, proxy and hook auth so the three provisioning paths cannot diverge.

Refs GHSA-j7jh-37pf-mf8h, GHSA-j2fc-28fx-hc8q
GetByScope compared scopes with a case-sensitive exact match, so on a
case-insensitive filesystem two accounts whose scopes differ only in case
(e.g. /users/CaseVictim and /users/casevictim) were treated as distinct even
though both resolve to the same physical home directory. The second account
could then read, overwrite and delete the first account's files.

Match the scope case-insensitively so the collision check performed during
signup, proxy and hook provisioning catches these aliases and rejects the
duplicate.

Refs GHSA-576v-w77m-gr84
The ?checksum= branch of the resource GET handler read the whole file to
compute its digest and returned it without checking Perm.Download, unlike the
sibling raw, preview, subtitle and X-Encoding paths. A user provisioned with
Perm.Download=false could therefore obtain md5/sha1/sha256/sha512 digests of
files they are not allowed to download, giving a file-content hash oracle, and
force a full-file read.

Return 202 Accepted before computing the checksum when the user lacks
Perm.Download, matching the other read paths. This completes the fix for
CVE-2026-35606, whose original patch gated only the content-returning paths.

Refs GHSA-7whw-q6gh-xr59
The in-memory upload cache deleted expired incomplete uploads with a raw
os.Remove on the absolute path it had stored, bypassing ScopedFs entirely.
Because the stored path is only lexically cleaned (no symlink evaluation) and
os.Remove resolves symlinked parent directories, a Create-only user could
register an upload and then, within the 3-minute TTL, swap an in-scope
ancestor directory for a symlink so the eviction deleted an arbitrary file
outside their scope.

Carry a removal callback with each cache entry and invoke it on eviction
instead of os.Remove. For TUS uploads the callback deletes via the uploading
user's scoped filesystem, whose Remove is guarded by the same within() check
that CVE-2026-55667 added, so eviction can no longer follow a symlink out of
scope. The redis backend ignores the callback (it never deleted partial files).

Refs GHSA-m9f5-2232-frp6
The TUS PATCH handler copied the whole request body to disk and used the
declared Upload-Length only to decide when the upload was complete. A client
could declare a tiny Upload-Length and then stream an arbitrarily large body
in a single PATCH, writing it all to disk, so any user with create permission
could exhaust the filesystem.

Bound each write to the bytes still expected (Upload-Length - Upload-Offset),
reject a PATCH whose offset already exceeds the declared length, and roll back
and reject a body that exceeds it. This complements the existing negative
Upload-Length handling.

Refs GHSA-ffv3-7h97-993q
…oning

Unit tests for Settings.CreateUserHome (derives a per-user home, rejects a
colliding scope, preserves an explicit scope) plus proxy and hook regression
tests asserting that with CreateUserDir enabled two provisioned users receive
distinct home directories instead of the server root.

Refs GHSA-j7jh-37pf-mf8h, GHSA-j2fc-28fx-hc8q
The check that stops two usernames normalizing to the same home directory
ran as a storage operation separate from the save, so two first-time users
provisioned concurrently could both observe a free scope and both be saved
into it, ending up sharing one home directory.

Move the check into users.Storage.SaveProvisioned, which holds a single
lock across the lookup and the save, and reduce CreateUserHome to deriving
and creating the directory. This covers all three provisioning paths:
signup, proxy auth and hook auth.

Refs GHSA-j7jh-37pf-mf8h
Two usernames that normalize to the same home directory must not both be
provisioned when their requests are handled concurrently. Also cover that
an explicit, non-derived scope may still be legitimately shared.

Refs GHSA-j7jh-37pf-mf8h
hacdias and others added 16 commits July 27, 2026 07:42
A TUS PATCH rejected before its body was read left the client still streaming
a chunk. net/http gives up draining an unread request body after 256KiB and
then closes the connection, so the status we replied with was lost and the
browser saw a bare transport error instead. The client could not tell a
conflict from a network fault, retried blindly, and the upload stalled after
the first chunk — while curl, which reads the response as it writes, still
reported the status and appeared to work. Drain what is left of a rejected
chunk so the answer arrives on a connection that stays usable. The explicit
r.Body.Close() had to go with it: it ran before the drain, and the server
closes the request body itself once the handler returns.

Pressing Upload awaited a recursive listing of the whole destination subtree
before a single byte was sent, with no sign that anything was happening. On a
large destination that reads as a dead button, and the walk kept running after
the client gave up, then reported the failed write as a 500. A flat upload can
only collide with a direct child of the destination, so walk recursively only
for folder uploads, stop the walk once the request is done, and show the action
as busy while the destination is checked.

Along the way: a failed upload was credited as fully sent, so the progress bar
reported 100% when nothing had been written; the progress timer was recreated
without clearing the previous one; and the chunk size field threw on a value
with no unit and raced its own debounce on submit, so it appeared to refuse
every change.

Fixes filebrowser#6006
Refs filebrowser#5987
@Joeavaikath

Copy link
Copy Markdown
Author

/retest

oadp-maintainers and others added 10 commits July 31, 2026 17:00
New config option:
  --branding.disableUserProfile

This option allows to disable User Profile together
with User settings.

Signed-off-by: Michal Pryc <mpryc@redhat.com>
New config option:
  --branding.defaultLoginUser "username"

This option allows to provide default Username, which will result
in hiding username field from the welcome page.

Signed-off-by: Michal Pryc <mpryc@redhat.com>
Removes Help options "Delete" and "Rename" if the
following permissions are revoked from a particular
user:

  --perm.delete=false
  --perm.rename=false

Signed-off-by: Michal Pryc <mpryc@redhat.com>
Add multi-stage Containerfile for UBI-based builds.

Signed-off-by: Michal Pryc <mpryc@redhat.com>
Adds OWNERS file.

Signed-off-by: Michal Pryc <mpryc@redhat.com>
Fix downstream changes to match upstream refactored functions.

Signed-off-by: Michal Pryc <mpryc@redhat.com>
Disable Validate Title check (semantic commit PR titles are
not used downstream). Fix Go version to 1.25 and add oadp-*
branches to CI triggers.
@openshift-ci

openshift-ci Bot commented Jul 31, 2026

Copy link
Copy Markdown

@Joeavaikath: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/images ea684ea link true /test images

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants