Commit graph

1853 commits

Author SHA1 Message Date
skjnldsv
855a6a7fce fix(config): add null coalescing fallback in getValueBool before strtolower
Followup to #59646: guard against null reaching strtolower() in both
AppConfig and UserConfig getValueBool(). Also aligns AppConfig with the
(string) cast added in UserConfig by the original PR.

Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
2026-05-26 07:32:51 +00:00
John Molakvoæ
839c9fbcdb
Merge pull request #60532 from nextcloud/backport/59646/stable32
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 (stable32, 8.1, stable32, --tags ~@large files_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, capabilities_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, collaboration_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, comments_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, dav_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, federation_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, file_conversions) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, files_reminders) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, filesdrop_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, ldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, openldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, openldap_numerical_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, remoteapi_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, routing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, setup_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, sharees_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, sharing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, theming_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, 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
[stable32] fix(UserConfig): cast getTypedValue() result to string in getValueBool()
2026-05-26 09:32:38 +02:00
Carl Schwan
f3ca2a688f
Merge pull request #60630 from nextcloud/backport/60225/stable32
Some checks failed
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 (stable32, 8.1, stable32, --tags ~@large files_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, capabilities_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, collaboration_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, comments_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, dav_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, federation_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, file_conversions) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, files_reminders) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, filesdrop_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, ldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, openldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, openldap_numerical_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, remoteapi_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, routing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, setup_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, sharees_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, sharing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, theming_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, 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) Has been cancelled
Psalm static code analysis / static-code-analysis-security (push) Has been cancelled
Psalm static code analysis / static-code-analysis-ocp (push) Has been cancelled
Psalm static code analysis / static-code-analysis-ncu (push) Has been cancelled
[stable32] perf: remove unneeded sort in getFolderContentsById
2026-05-22 12:11:16 +02:00
Robin Appelman
8ed7aeb395 test: adjust tests to unsorted folder listing
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-05-20 17:56:12 +00:00
Anna Larch
638b2c20c6 fix(theming): fix broken custom images introduced by #58224
PR #58224 introduced a raster→SVG conversion path in ImageManager::getImage()
that breaks display of custom theming images. The root cause is a three-part
bug chain:

1. getImage() attempted to convert raster images (PNG/JPEG) to SVG format,
   which Imagick cannot do meaningfully and produces broken output.
2. getMimeType() returns 'application/octet-stream' for extensionless stored
   files, so the Content-Type response header was wrong.
3. Stale .svg cache files persisted after image replacement, causing
   subsequent requests to serve the wrong format.

Fix by:
- Restricting the Imagick conversion to SVG→PNG only (not raster→SVG)
- Reading the stored MIME type from IAppConfig for extensionless files in
  ThemingController::getImage()
- Deleting .svg cache files in ImageManager::delete()
- Injecting IAppConfig into ImageManager and reading the cachebuster via
  IAppConfig::getAppValueInt() so the URL returned after upload always
  carries the freshly-incremented value (IConfig::getAppValue() can return
  a stale cached value within the same request)
- Updating the FileInputField Vue component to use a reactive cacheKey ref
  that increments on every upload, so the thumbnail refreshes even when the
  MIME type of the new image is the same as the old one
- Updating unit tests for ImageManager and ThemingController
- Updating psalm baseline for stable32

Backport of #60198

AI-Assisted-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Anna Larch <anna@nextcloud.com>
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-05-20 15:50:07 +00:00
There Is No TIme
476da53d44 fix(UserConfig): cast getTypedValue() result to string in getValueBool()
PHP 8.4 made passing non-strings to strtolower() a fatal TypeError.
getTypedValue() can return a non-string under certain conditions, causing
the strtolower() call to throw. The (string) cast guards against this.

Signed-off-by: There Is No TIme <37583483+thereisnotime@users.noreply.github.com>
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-05-19 12:40:34 +00:00
nextcloud-command
40e94df105 fix(security): Update CA certificate bundle
Signed-off-by: GitHub <noreply@github.com>
2026-05-17 03:19:08 +00:00
Hendrik Leidinger
3184dfea44 fix: weird bug introduced by psalm
Signed-off-by: Hendrik Leidinger <hendrik.leidinger@nextcloud.com>
2026-05-12 12:11:27 +02:00
Hendrik Leidinger
33818517c8 chore: update psalm baseline
Signed-off-by: Hendrik Leidinger <hendrik.leidinger@nextcloud.com>
2026-05-12 12:11:27 +02:00
Daniel Calviño Sánchez
29f78e2cec
Merge pull request #59956 from nextcloud/fix-reenabling-system-address-book-in-stable32
[stable32] Fix reenabling system address book
2026-05-05 11:53:25 +02:00
Hamza
143fede8e3 test(integration): write integration tests for calendar delegation
Signed-off-by: Hamza <hamzamahjoubi221@gmail.com>
2026-04-28 11:50:49 +00:00
Daniel Calviño Sánchez
b26329e0d4 fix: Fix re-enabling the system address book
When "system_addressbook_exposed" is set through the administration
settings it is set as a boolean value in IAppConfig which, in the end,
stores it as "0" or "1". However, when read from IConfig in
UserAddressBooks it was strictly compared against "yes", so even if
explicitly enabled the comparison always failed and the system address
book was always seen as disabled. To solve that now the comparison is
made against a boolean value in IAppConfig, which is also consistent
with other places where the value is got (like ContactsManager).

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2026-04-28 11:14:25 +02:00
Daniel Calviño Sánchez
b3bcd49a6c refactor: Replace OC::$server->getL10N by Util::getL10N
This makes the code more consistent with stable33 and later.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2026-04-28 11:13:03 +02:00
Benjamin Gaussorgues
223815a6ee
Merge pull request #59762 from nextcloud/backport/59693/stable32 2026-04-23 17:16:36 +02:00
Ferdinand Thiessen
bfff4fbc3f fix(dav): do not list intermediate upload folders
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-04-22 15:48:45 +00:00
Robin Appelman
e901393238 test: add test for link reshares with more permissions being redacted
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-04-21 15:57:48 +00:00
Hamza
d6f4de3651 test(integration): add proper cleanup for caldav scenarios
Signed-off-by: Hamza <hamzamahjoubi221@gmail.com>
2026-04-21 07:59:28 +00:00
Hamza
2e9bf5fb43 test(integration): add tests for calendar delegation
Signed-off-by: Hamza <hamzamahjoubi221@gmail.com>
2026-04-21 07:59:28 +00:00
Joas Schilling
8f0f2e7fec test(integration): Add integration test for accept share
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-04-14 18:47:24 +00:00
Joas Schilling
05a9bedc93 test: Add integration test to confirm a user can not add themselves to another group
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-04-13 13:14:21 +00:00
Joas Schilling
e5ae38a6fc
ci(psalm): Update baseline
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-04-09 16:31:15 +02:00
Louis
09a464dfd0
Merge pull request #59084 from nextcloud/backport/59057/stable32
[stable32] fix: Move hasAnnotationOrAttribute to the reflector
2026-03-20 12:30:58 +01:00
Louis Chmn
c0787d0baa chore: Update psalm baseline
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Signed-off-by: Louis Chmn <louis@chmn.me>
2026-03-20 11:35:09 +01:00
nextcloud-command
931c0b8372 fix(security): Update CA certificate bundle
Signed-off-by: GitHub <noreply@github.com>
2026-03-20 03:07:37 +00:00
Arthur Schiwon
15cfc933e0
Merge pull request #59034 from nextcloud/backport/59025/stable32
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 (stable32, 8.1, stable32, --tags ~@large files_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, capabilities_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, collaboration_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, comments_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, dav_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, federation_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, file_conversions) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, files_reminders) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, filesdrop_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, ldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, openldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, openldap_numerical_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, remoteapi_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, routing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, setup_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, sharees_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, sharing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, theming_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable32, 8.1, stable32, 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
[stable32] fix(LDAP): use displayname from DB, before reaching out to LDAP
2026-03-18 21:20:35 +01:00
Arthur Schiwon
adc98fac7a
ci: update psalm baseline
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2026-03-18 18:23:35 +01:00
Ferdinand Thiessen
fcc7b4d21b
chore: adjust style imports of password confirmation library
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-03-18 14:39:03 +01:00
Ferdinand Thiessen
ca1cf76c0f fix(files_sharing): make legacy downloadShare endpoint compatible with legacy behavior
This needs to be able to directly download files if specified to only
download a single file and not a folder.
Also it was possible to either pass a files array json encoded or a
single file not encoded at all.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-02-20 18:21:34 +00:00
Ferdinand Thiessen
0c8b04e141 fix(cache): filter out invalid entries in OC\Files\Cache\Wrapper\CacheWrapper::getFolderContentsById
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-02-17 12:30:19 +00:00
provokateurin
5a08b835de
feat(UserPlugin): Also full match on additional email addresses
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-01-21 16:02:03 +01:00
provokateurin
ff937ae5dd
test(UserPlugin): Cover full match email with sharee enumeration limited to group
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-01-21 16:02:03 +01:00
provokateurin
7c6dbf5c84
fix(UserPlugin): Rewrite from scratch
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-01-21 16:02:02 +01:00
provokateurin
663e6f7828
test(UserPlugin): Rewrite unit tests as integration tests
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-01-21 15:58:34 +01:00
provokateurin
a72fa1e4e2
test(ShareesContext): Reset all shareapi related system configs
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-01-21 15:58:13 +01:00
Côme Chilliet
61b1a5f6b8 chore: While at it use strict array search in build/integration
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-18 18:45:07 +01:00
Daniel Calviño Sánchez
bb2ae56457 fix: Unify handling of exclude groups in contacts menu and sharing
If the current user belongs to both one or more groups excluded from
sharing and one or more groups not excluded from sharing the user is
allowed to share. However, in the contacts menu, as soon as the current
user belonged to a group excluded from sharing the user could not search
for local contacts. This has been unified now with the sharing
behaviour, so local contacts can still be searched if the user also
belongs to a group not excluded from sharing (or to no group at all,
which was also allowed before).

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2026-01-07 17:05:52 +00:00
Daniel Calviño Sánchez
dc03d54c4c test: Add integration tests for excluded groups in contacts and sharees
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2026-01-07 17:05:51 +00:00
Robin Appelman
2b1cfa5edf test: update cross-share move tests
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-06 13:24:52 +00:00
github-actions[bot]
3cdddf8730
Merge pull request #56880 from nextcloud/dependabot/composer/build/integration/stable32/phpunit/phpunit-9.6.30
[stable32] build(deps-dev): bump phpunit/phpunit from 9.6.29 to 9.6.30 in /build/integration
2025-12-22 00:03:39 +00:00
Kate
9fe7e1cb5c
Merge pull request #57085 from nextcloud/backport/56921/stable32 2025-12-18 16:45:55 +01:00
Côme Chilliet
dcdb53634e feat(log): Add script name and occ command to log details
This will help when troubleshooting issues. For web request we have
 method and url, but for cron and occ currently we have no way to know if
 it’s one or the other and which command.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2025-12-15 16:57:16 +01:00
Daniel Calviño Sánchez
709a74a2ac fix: Fix caching routes by users with an active session
When a user has an active session only the apps that are enabled for the
user are initially loaded. In order to cache the routes the routes for
all apps are loaded, but routes defined in routes.php are taken into
account only if the app was already loaded. Therefore, when the routes
were cached in a request by a user with an active session only the
routes for apps enabled for that user were cached, and those routes were
used by any other user, independently of which apps they had access to.
To solve that now all the enabled apps are explicitly loaded before
caching the routes.

Note that this did not affect routes defined using annotations on the
controller files; in that case the loaded routes do not depend on the
previously loaded apps, as it explicitly checks all the enabled apps.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-12-15 09:53:32 +00:00
Daniel Calviño Sánchez
0c9488b8f0 test: Fix recording app state when admin is not the current user
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-12-15 09:53:32 +00:00
SebastianKrupinski
157d64e97b fix: calendar subscription memory exhaustion
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
2025-12-11 12:32:39 -05:00
dependabot[bot]
c5e8f22494
build(deps-dev): bump phpunit/phpunit in /build/integration
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.6.29 to 9.6.30.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/9.6.30/ChangeLog-9.6.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.6.29...9.6.30)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-version: 9.6.30
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-06 02:09:55 +00:00
Salvatore Martire
7ede3044bf refactor: extract tree initialization logic
Signed-off-by: Salvatore Martire <4652631+salmart-dev@users.noreply.github.com>
2025-12-03 15:38:27 +00:00
nextcloud-command
38b7641860 fix(security): Update CA certificate bundle
Signed-off-by: GitHub <noreply@github.com>
2025-12-03 02:40:55 +00:00
Git'Fellow
4d363eea40
Merge pull request #55804 from nextcloud/backport/55800/stable32
[stable32] Fix chunked upload for file drop shares
2025-12-02 09:49:48 +01:00
skjnldsv
9674191ba6 chore(files_reminder): add integration tests
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
2025-11-26 09:49:28 +01:00
provokateurin
b737336e4d
fix(FilesDropPlugin): Ensure all request for file request have a nickname
Signed-off-by: provokateurin <kate@provokateurin.de>
2025-11-18 15:19:46 +01:00