Commit graph

2111 commits

Author SHA1 Message Date
Benjamin Gaussorgues
aa797a36f1
Merge pull request #59995 from nextcloud/quota-writestream-fopen 2026-05-04 10:06:18 +02:00
Robin Appelman
9f5535d01b fix: apply quota with writeStream
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-05-02 14:04:09 +02:00
Robin Appelman
f3a5bc8c17 fix: block writing empty files with 0 quota
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-05-02 14:04:09 +02:00
Robin Appelman
6a316b23b5 fix: chunk storage ids when preload storage info
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-05-02 14:04:01 +02:00
Git'Fellow
3bbe0ee570
refactor: use strict operator
Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
2026-04-30 00:51:29 +02:00
Ferdinand Thiessen
be2ac0bd86
Merge pull request #59932 from nextcloud/carl/copySkeleton
refactor: Move copy skeleton step to a file listener
2026-04-29 23:15:38 +02:00
Josh
d32cae3e68
Merge pull request #58840 from nextcloud/jtr/fix-ObjectStore-S3-doesObjectExistV2
fix(ObjectStore/S3): switch to more reliable doesObjectExistV2
2026-04-29 08:48:53 -04:00
Ferdinand Thiessen
27c7164e86
chore: add psalm-api to for classes we need to mock in unit tests
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-04-28 23:52:43 +02:00
Ferdinand Thiessen
e0ba4d71b6
chore: add missing Override attribute to OC
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-04-28 21:29:27 +02:00
Carl Schwan
bb4c55c125
refactor: Move copy skeleton step to a file listener
Instead of having all user providers call OC_Util::copySkeleton

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-04-27 15:37:02 +02:00
Joas Schilling
aa904b255f
Merge pull request #59378 from nextcloud/carl/non-internal-api
chore: Replace MoveableMount usage with IMovableMount
2026-04-27 12:37:56 +02:00
Josh
1989ae9865
chore(s3): fully resolve conflict in S3ObjectTrait
Signed-off-by: Josh <josh.t.richards@gmail.com>
2026-04-25 11:16:56 -04:00
copilot-swe-agent[bot]
617803fc10
Merge remote-tracking branch 'origin/master' into jtr/fix-ObjectStore-S3-doesObjectExistV2
# Conflicts:
#	lib/private/Files/ObjectStore/S3ObjectTrait.php

Co-authored-by: joshtrichards <1731941+joshtrichards@users.noreply.github.com>
2026-04-25 11:48:06 +00:00
Robin Appelman
ac9da6eaa0
perf: only load possible results in UserMountCache::getMountForPath
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-24 18:17:43 +02:00
Robin Appelman
41e6124dcc
perf: only load a single mount at a time when checking for share conflicts
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-24 18:17:43 +02:00
Robin Appelman
aedc57afe7
fix: add optional user param to IUserMountCache::removeMount
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-24 18:17:41 +02:00
Robin Appelman
e5f77f004e
fix: fix moving mountpoints
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-24 18:17:39 +02:00
Robin Appelman
0da86facc5
fix: clear in-memory cached mounts for user when adding/removing mounts
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-24 14:39:52 +02:00
Robin Appelman
68448a4a42
feat: export getData for public FileInfo interface
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-24 14:39:51 +02:00
Robin Appelman
4e6975cc11
feat: add event for user home mount having being setup
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-24 14:39:48 +02:00
Robin Appelman
491fb8d483
fix: only validate mounts for new share
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-24 14:39:46 +02:00
Carl Schwan
fbf84e6473
chore: Replace MoveableMount usage with IMovableMount
The former is private API while the IMovableMount is public.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-04-24 10:14:37 +02:00
Josh
874f192472
Merge pull request #59650 from nextcloud/usermountcache-delete-hash
fix: use proper index when deleting mounts
2026-04-23 19:57:48 -04:00
Kostiantyn Miakshyn
fcb10219d1 fix: Allow num_buckets to be equal as min_bucket
Signed-off-by: Kostiantyn Miakshyn <molodchick@gmail.com>
2026-04-19 18:28:12 +02:00
Stephen Cuppett
cdaeed02b6 feat(objectstore): Add AWS SSE-KMS encryption support for S3 storage
Add support for Server-Side Encryption with AWS Key Management Service
(SSE-KMS) for S3 object storage. This allows Nextcloud to encrypt data
at rest in S3 using AWS-managed keys.

Key features:
- New config options: sse_kms_enabled and sse_kms_key_id
- Backward compatible with existing SSE-C (customer-provided keys)
- SSE-C takes precedence when both SSE-C and SSE-KMS are configured

Implementation details:
- Added getServerSideEncryptionParameters() method to centralize
  encryption parameter logic for both SSE-C and SSE-KMS
- Updated multipart uploads to use unified encryption parameters
- Added comprehensive PHPUnit tests for SSE-KMS scenarios
- Tested with AWS bucket and KMS keys in us-east-1 region

Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Stephen Cuppett <steve@cuppett.com>
2026-04-16 13:21:53 -04:00
Robin Appelman
7a0bf1b447
fix: fix LazyUserFolder::getMountPoint
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-15 16:07:33 +02:00
Robin Appelman
8030a14382
fix: use proper index when deleting mounts
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-15 16:03:30 +02:00
Kate
5246653b51
Merge pull request #59573 from nextcloud/node-getparent-id-no-submounts 2026-04-15 08:55:08 +02:00
provokateurin
1b0410f333
fix(Wrapper): Type $storage as IStorage
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-04-14 16:09:12 +02:00
provokateurin
5d1e0a6e3a
fix(Wrapper): Always use getWrapperStorage()
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-04-14 16:08:37 +02:00
Robin Appelman
9125715c56 perf: don't fetch child mounts when getting node parent
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-11 13:23:14 +02:00
Robin Appelman
e96a89e630 feat: add permissions mask variant that only masks one directory
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-09 16:19:10 +02:00
Louis Chmn
680ddd93c2 fix(Scanner): Remove high level transaction during scans
Signed-off-by: Louis Chmn <louis@chmn.me>
2026-04-08 14:34:45 +02:00
Louis Chmn
72812b2b07 chore(Scanner): Use modern syntax and APIs
Signed-off-by: Louis Chmn <louis@chmn.me>
2026-04-08 12:26:55 +02:00
Ferdinand Thiessen
047a758a31
Merge pull request #58786 from nextcloud/fix/templates_enabled
fix(files): only disable template creation when both skeleton directories are empty
2026-04-01 00:40:25 +02:00
Salvatore Martire
bf24b24841 fix: use unjailed source path when moving jailed files
Signed-off-by: Salvatore Martire <4652631+salmart-dev@users.noreply.github.com>
2026-03-27 14:30:46 +01:00
Cristian Scheid
282e6b707a feat(file-info): encapsulate logic to get last activity in getLastActivity function
Signed-off-by: Cristian Scheid <cristianscheid@gmail.com>
2026-03-24 15:15:34 -03:00
Cristian Scheid
5bcac61c73 refactor(recent-search): use order by fields to determine extended cache join and cast config limit to number
Signed-off-by: Cristian Scheid <cristianscheid@gmail.com>
2026-03-24 15:15:34 -03:00
Cristian Scheid
8225ab726f feat(recent-files): add nc:last_activity property to allow sorting by max between upload_time and mtime
Signed-off-by: Cristian Scheid <cristianscheid@gmail.com>
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-03-24 15:15:34 -03:00
Cristian Scheid
62f3ea390e feat(recent-files): add recent_files_limit config on files settings
Signed-off-by: Cristian Scheid <cristianscheid@gmail.com>
2026-03-24 15:15:34 -03:00
Côme Chilliet
cd2d09de64
fix: Remove static vars from core classes
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-03-23 16:34:54 +01:00
Benjamin Gaussorgues
8c6d314b0e
Merge pull request #58798 from AIlkiv/fix-UserMountCache-for-postgresql 2026-03-12 12:11:29 +01:00
Carl Schwan
83956e9f04
Merge pull request #58854 from nextcloud/jtr/refactor-View-getLocalFile
Some checks are pending
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Integration sqlite / changes (push) Waiting to run
Integration sqlite / integration-sqlite (master, 8.4, main, --tags ~@large files_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, capabilities_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, collaboration_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, comments_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, dav_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, federation_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, file_conversions) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, files_reminders) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, filesdrop_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, ldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, openldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, openldap_numerical_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, remoteapi_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, routing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, setup_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, sharees_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, sharing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, theming_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, videoverification_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite-summary (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis (push) Waiting to run
Psalm static code analysis / static-code-analysis-security (push) Waiting to run
Psalm static code analysis / static-code-analysis-ocp (push) Waiting to run
Psalm static code analysis / static-code-analysis-ncu (push) Waiting to run
Psalm static code analysis / static-code-analysis-strict (push) Waiting to run
refactor(view): `getLocalFile` path handling
2026-03-12 10:05:19 +01:00
Côme Chilliet
9b54383532
Merge pull request #58835 from nextcloud/chore/fix-merge-leftover
Remove leftover useless path assignements in View
2026-03-11 16:52:55 +01:00
Josh
0a7420d0a4
chore(View): fixup for php-cs
Signed-off-by: Josh <josh.t.richards@gmail.com>
2026-03-10 21:40:44 -04:00
Josh
14e837ce11
refactor(View): add typing to getAbsolutePath and clarify contract
Signed-off-by: Josh <josh.t.richards@gmail.com>
2026-03-10 19:42:16 -04:00
Josh
af78da59bc
refactor(View): improve readability of getLocalFile and resolvePath
Signed-off-by: Josh <josh.t.richards@gmail.com>
2026-03-10 19:21:47 -04:00
Côme Chilliet
a119716a7d
Merge pull request #58826 from nextcloud/carl/code-cleaning-storage-cache
Some checks are pending
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Integration sqlite / changes (push) Waiting to run
Integration sqlite / integration-sqlite (master, 8.4, main, --tags ~@large files_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, capabilities_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, collaboration_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, comments_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, dav_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, federation_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, file_conversions) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, files_reminders) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, filesdrop_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, ldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, openldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, openldap_numerical_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, remoteapi_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, routing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, setup_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, sharees_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, sharing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, theming_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, videoverification_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite-summary (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis (push) Waiting to run
Psalm static code analysis / static-code-analysis-security (push) Waiting to run
Psalm static code analysis / static-code-analysis-ocp (push) Waiting to run
Psalm static code analysis / static-code-analysis-ncu (push) Waiting to run
Psalm static code analysis / static-code-analysis-strict (push) Waiting to run
refactor(cache-storage): Make Storage and StorageGlobal psalm strict
2026-03-10 22:01:43 +01:00
Josh
30bbb13f9a
chore: at S3Exception to S3ObjectTrait
Signed-off-by: Josh <josh.t.richards@gmail.com>
2026-03-10 11:51:47 -04:00
Josh
7bcf684f81
fix(ObjectStore/S3): switch to more reliable doesObjectExistV2
The non-v2 version is deprecated, but more importantly the V2 implementation makes fewer assumptions about ambiguous or unexpected status codes. For example, a 403 would result in a false (object does not exist) in V1, but that's not necessarily what that means. V2 returns true/false on a much more narrow set of scenarios. And it throws for all others so they can be diagnosed properly.

Signed-off-by: Josh <josh.t.richards@gmail.com>
2026-03-10 11:12:57 -04:00