Skip to main content

Folder Protection - Releases

← App details

Nextcloud 34

Folder Protection 2.4.0
Release Details
UpdatedAug. 2, 2026, 2:35 p.m.
Changelog

Fixed

  • A protected folder reserved its name across the whole server. With /files/a/b/gama protected, no user could create a folder called gama anywhere — MKCOL /files/gama returned 403. This was documented as a known limitation up to v2.1.0 and believed fixed in v2.2.0: 9363b42 removed the isAnyProtectedWithBasename heuristic from StorageWrapper and the README line was dropped. But the same heuristic had been added to ProtectionPlugin::beforeBind three months earlier, for a different purpose, and was never removed — and DAV is the path both Explorer and the web UI use, so the limitation survived in full while no longer being documented. The beforeBind block is now gone; protection is genuinely path-based again.

  • Rejecting a desktop-client move left an empty folder at the destination. This is what the server-wide name block was really guarding against: the Windows client sends MKCOL destination before MOVE, so refusing the move stripped nothing back out. beforeMove already had a deleteEmptyNode() call for it, but that code was unreachable — Sabre emits beforeUnbind for the move source before beforeMove, and a protected source aborts the request there. The cleanup now runs from beforeUnbind via cleanUpMoveSteppingStone(), which reads the Destination header when the request method is MOVE. The orphan is removed for the one folder involved, instead of every user being denied the name.

  • Deleting the parent of a protected folder broke desktop sync unrecoverably. Deleting the protected folder itself was fine — it came straight back — but deleting an ancestor left the client in a sync error that only a manual re-copy cleared.

What makes the direct case work is not a retry, it is that the client never attempts the delete: ProtectionPropertyPlugin strips D from oc:permissions, so the folder is advertised as non-deletable and the client restores it locally. That strip was keyed on isProtected() — an exact match — so an ancestor still advertised RGDNVCK. The client deleted it, hit the 403 that beforeUnbind raises for a protected descendant, and had nowhere to go. Both the property plugin and StorageWrapper::getPermissions() now strip D when hasProtectedDescendant() is true as well, so the whole ancestor chain is advertised as non-deletable and matches what the server actually enforces.

beforeUnbind additionally calls touchSubtree() in this case, giving the subtree fresh etags (bounded at 10000 entries) so a client that already removed the contents locally pulls them back rather than reading them as a deletion to propagate.

  • The "Move or copy" entry stayed visible in a protected folder's row menu. The selector looked for action id copy; Nextcloud's id is move-copy — the same one the selection bar was already matching correctly. Delete was hidden, copy was not, so the action was clickable and only failed once a destination had been picked.

  • Notifications never reached the user. The notifier was declared only through an <notifications><notifier> block in appinfo/info.xml. That element is not read by the server and does not exist in the App Store info.xsd — no core app uses it; they all call registerNotifierService(). The notifier was therefore absent from RegistrationContext::getNotifierServices(), so every "action blocked" notification was created and then discarded in Notification\Manager::prepare(). Application::register() now calls $context->registerNotifierService().

  • occ folder-protection:protect had no effect for up to 300 seconds. The command inserted the row and returned success, but never invalidated the protection cache the way AdminController::protect() does. isProtected() caches negative results for 300s, and any earlier PROPFIND or MKCOL on the path will have populated it — so a folder protected from the CLI could still be deleted or moved straight afterwards. Both Protect and Unprotect now call clearCacheForPath(). Found by testing on NC 34; it affected NC 33 identically.

Note the fix only holds where memcache.distributed is configured (Redis or similar). Falling back to APCu means the CLI and Apache have separate caches and no invalidation from a command can reach the web process — see build/README.md.

  • occ folder-protection:unprotect was unusable from a script. Its confirmation prompt resolves to its default under -n/--no-interaction, and that default is "no" — so the command printed Cancelled. and exited 0, reporting success while having done nothing. It now takes --force to confirm non-interactively, and refuses with exit code 1 rather than pretending to have run. Piping an answer (echo y | occ …) still works.

Security

  • Removed #[NoCSRFRequired] from the state-changing POST endpoints (protect, unprotect, updateReason, clearCache). The attribute disables the CSRF check for all HTTP methods, so an authenticated admin visiting a malicious page could have folders protected or unprotected cross-site. Read-only GETs keep the attribute. The frontend uses @nextcloud/axios, which sends the request token automatically.
  • Removed the #[AdminRequired] attribute and its import. No such attribute exists in Nextcloud (only NoAdminRequired and SubAdminRequired); it was silently inert. The endpoints were in fact protected, because admin-only is the default in SecurityMiddleware::checkSecurity — but the attribute suggested a guarantee it never provided, and the use statement pointed at a non-existent class.

Changed

  • hasProtectedDescendant() answers from the cached protection list instead of running a COUNT(*) with a LIKE. It is now called once per node on every PROPFIND, where a query per listed file was not affordable. The cached list is already invalidated by clearCacheForPath() on every protect/unprotect, so it is no more stale than isProtected(). Comparing in PHP also drops the LIKE wildcard escaping, where an unescaped _ in a folder name matched any character.

  • Nextcloud 34 compatibility: max-version raised to 34, min-version to 33, and the PHP requirement to 8.3 (NC 34 requires 8.3+; 8.2 is deprecated).

  • Removed the <dav><properties> and <notifications> blocks from info.xml. Neither is a valid element in the App Store schema and neither is parsed by the server; both would fail XSD validation on upload. The DAV properties are registered by DAV\ProtectionPropertyPlugin.
  • folder-protection-ui.js is now bundled by webpack from src/ and imports generateUrl from @nextcloud/router instead of using the deprecated OC.generateUrl global.
  • AdminApp.vue uses translate from @nextcloud/l10n instead of the deprecated OC.L10N.translate global.
  • Aligned package.json with its declared dependency versions (@nextcloud/l10n was pinned at 1.6.0 on disk while the manifest asked for ^3.4.1) and with the info.xml version number.
  • Reordered info.xml: its elements are an xs:sequence, and <dependencies> sat before <website> while <admin> sat after <admin-section>. Both violated the schema, so the file had never validated and the app could not have been uploaded to the App Store.
  • Added build/docker-compose.nc34.yml and build/README.md — a disposable NC 34 instance (port 8085) that verifies the declared max-version instead of assuming it. Verified there: 23/23 unit and 14/14 integration on NC 34.0.2 / PHP 8.5.8.
  • Dropped the deprecated curl_close() from the integration tests; PHP 8.5, which NC 34 ships, warns on it and it has been a no-op since 8.0.

Note

  • The 2.3.0 entry below claims IResult::fetch() was "removed in NC33". That is incorrect — fetch() is @since 21.0.0 and is still present in NC 33 and 34, carrying only a @note recommending fetchAssociative()/fetchNumeric(). It is not deprecated. Conversely, fetchAssociative() is @since 33.0.0 and does not exist in NC 32 or earlier.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignatureTqL+aso/fvvwq2n9S+CzZXSPJeALEqLAvCFIZOnZNQnnVGRaE5XIkY2mDZdSEmuMX9f76QgdcwVKJZjQU21fPj1wbBu0LQqcbCRQUjxHzmDI2Fq1Az/6a/Z+migTOlFG/7I0MWe1qHHyubAmhK+Ip7aiHB3o53LxEiaE1FZDYy8YCDcfV4UeKEBkZuaWEvVq0bHW31VHvXnc+67v8ttgpKr0QsGyCTGLyGTmAYz564Mo4PYkNLY2XsxBgygtNAjv39Dbs0iXz7L1E2c16L4upXIL2XCOBr4IB0RABKKVPdNOwr1da6GYtbrKPLnY77r29yOa19hPlBuk1hhZz/aQyQ+D3m+jca2H7d+jxKHCSQhgkYcXs8VYR9UAc9MnzbzYMlF2ygrPM+XvX2uraz/KUFZNYkrswcvkB9xBrZ/Be66Vm88wd3YqsdCqA/xpdCYTtSeQOeL1VrPycCleSo5ZXfBhVDc1xhpWBCAlPPAe8r6PzDjv+GjQCuDpDgvb7PaOe0C7Y6FNeuq/vugyb9ReXCx/AxoENFrxJ8oPZJjp0llkD/MTQLzII/C1BWdRgqIwZdhKc3txBesdw3/J2YTXGvEPcV0wNaj5yWN1V5AxEBDMIP2n9qjz2dj71YWoUZ8AXbK/mxrZ6MmoXKr27l6Y9gr5U7tECBuuNyznWRE/JuY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=33.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.3.0

Nextcloud 33

Folder Protection 2.4.0
Release Details
UpdatedAug. 2, 2026, 2:35 p.m.
Changelog

Fixed

  • A protected folder reserved its name across the whole server. With /files/a/b/gama protected, no user could create a folder called gama anywhere — MKCOL /files/gama returned 403. This was documented as a known limitation up to v2.1.0 and believed fixed in v2.2.0: 9363b42 removed the isAnyProtectedWithBasename heuristic from StorageWrapper and the README line was dropped. But the same heuristic had been added to ProtectionPlugin::beforeBind three months earlier, for a different purpose, and was never removed — and DAV is the path both Explorer and the web UI use, so the limitation survived in full while no longer being documented. The beforeBind block is now gone; protection is genuinely path-based again.

  • Rejecting a desktop-client move left an empty folder at the destination. This is what the server-wide name block was really guarding against: the Windows client sends MKCOL destination before MOVE, so refusing the move stripped nothing back out. beforeMove already had a deleteEmptyNode() call for it, but that code was unreachable — Sabre emits beforeUnbind for the move source before beforeMove, and a protected source aborts the request there. The cleanup now runs from beforeUnbind via cleanUpMoveSteppingStone(), which reads the Destination header when the request method is MOVE. The orphan is removed for the one folder involved, instead of every user being denied the name.

  • Deleting the parent of a protected folder broke desktop sync unrecoverably. Deleting the protected folder itself was fine — it came straight back — but deleting an ancestor left the client in a sync error that only a manual re-copy cleared.

What makes the direct case work is not a retry, it is that the client never attempts the delete: ProtectionPropertyPlugin strips D from oc:permissions, so the folder is advertised as non-deletable and the client restores it locally. That strip was keyed on isProtected() — an exact match — so an ancestor still advertised RGDNVCK. The client deleted it, hit the 403 that beforeUnbind raises for a protected descendant, and had nowhere to go. Both the property plugin and StorageWrapper::getPermissions() now strip D when hasProtectedDescendant() is true as well, so the whole ancestor chain is advertised as non-deletable and matches what the server actually enforces.

beforeUnbind additionally calls touchSubtree() in this case, giving the subtree fresh etags (bounded at 10000 entries) so a client that already removed the contents locally pulls them back rather than reading them as a deletion to propagate.

  • The "Move or copy" entry stayed visible in a protected folder's row menu. The selector looked for action id copy; Nextcloud's id is move-copy — the same one the selection bar was already matching correctly. Delete was hidden, copy was not, so the action was clickable and only failed once a destination had been picked.

  • Notifications never reached the user. The notifier was declared only through an <notifications><notifier> block in appinfo/info.xml. That element is not read by the server and does not exist in the App Store info.xsd — no core app uses it; they all call registerNotifierService(). The notifier was therefore absent from RegistrationContext::getNotifierServices(), so every "action blocked" notification was created and then discarded in Notification\Manager::prepare(). Application::register() now calls $context->registerNotifierService().

  • occ folder-protection:protect had no effect for up to 300 seconds. The command inserted the row and returned success, but never invalidated the protection cache the way AdminController::protect() does. isProtected() caches negative results for 300s, and any earlier PROPFIND or MKCOL on the path will have populated it — so a folder protected from the CLI could still be deleted or moved straight afterwards. Both Protect and Unprotect now call clearCacheForPath(). Found by testing on NC 34; it affected NC 33 identically.

Note the fix only holds where memcache.distributed is configured (Redis or similar). Falling back to APCu means the CLI and Apache have separate caches and no invalidation from a command can reach the web process — see build/README.md.

  • occ folder-protection:unprotect was unusable from a script. Its confirmation prompt resolves to its default under -n/--no-interaction, and that default is "no" — so the command printed Cancelled. and exited 0, reporting success while having done nothing. It now takes --force to confirm non-interactively, and refuses with exit code 1 rather than pretending to have run. Piping an answer (echo y | occ …) still works.

Security

  • Removed #[NoCSRFRequired] from the state-changing POST endpoints (protect, unprotect, updateReason, clearCache). The attribute disables the CSRF check for all HTTP methods, so an authenticated admin visiting a malicious page could have folders protected or unprotected cross-site. Read-only GETs keep the attribute. The frontend uses @nextcloud/axios, which sends the request token automatically.
  • Removed the #[AdminRequired] attribute and its import. No such attribute exists in Nextcloud (only NoAdminRequired and SubAdminRequired); it was silently inert. The endpoints were in fact protected, because admin-only is the default in SecurityMiddleware::checkSecurity — but the attribute suggested a guarantee it never provided, and the use statement pointed at a non-existent class.

Changed

  • hasProtectedDescendant() answers from the cached protection list instead of running a COUNT(*) with a LIKE. It is now called once per node on every PROPFIND, where a query per listed file was not affordable. The cached list is already invalidated by clearCacheForPath() on every protect/unprotect, so it is no more stale than isProtected(). Comparing in PHP also drops the LIKE wildcard escaping, where an unescaped _ in a folder name matched any character.

  • Nextcloud 34 compatibility: max-version raised to 34, min-version to 33, and the PHP requirement to 8.3 (NC 34 requires 8.3+; 8.2 is deprecated).

  • Removed the <dav><properties> and <notifications> blocks from info.xml. Neither is a valid element in the App Store schema and neither is parsed by the server; both would fail XSD validation on upload. The DAV properties are registered by DAV\ProtectionPropertyPlugin.
  • folder-protection-ui.js is now bundled by webpack from src/ and imports generateUrl from @nextcloud/router instead of using the deprecated OC.generateUrl global.
  • AdminApp.vue uses translate from @nextcloud/l10n instead of the deprecated OC.L10N.translate global.
  • Aligned package.json with its declared dependency versions (@nextcloud/l10n was pinned at 1.6.0 on disk while the manifest asked for ^3.4.1) and with the info.xml version number.
  • Reordered info.xml: its elements are an xs:sequence, and <dependencies> sat before <website> while <admin> sat after <admin-section>. Both violated the schema, so the file had never validated and the app could not have been uploaded to the App Store.
  • Added build/docker-compose.nc34.yml and build/README.md — a disposable NC 34 instance (port 8085) that verifies the declared max-version instead of assuming it. Verified there: 23/23 unit and 14/14 integration on NC 34.0.2 / PHP 8.5.8.
  • Dropped the deprecated curl_close() from the integration tests; PHP 8.5, which NC 34 ships, warns on it and it has been a no-op since 8.0.

Note

  • The 2.3.0 entry below claims IResult::fetch() was "removed in NC33". That is incorrect — fetch() is @since 21.0.0 and is still present in NC 33 and 34, carrying only a @note recommending fetchAssociative()/fetchNumeric(). It is not deprecated. Conversely, fetchAssociative() is @since 33.0.0 and does not exist in NC 32 or earlier.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignatureTqL+aso/fvvwq2n9S+CzZXSPJeALEqLAvCFIZOnZNQnnVGRaE5XIkY2mDZdSEmuMX9f76QgdcwVKJZjQU21fPj1wbBu0LQqcbCRQUjxHzmDI2Fq1Az/6a/Z+migTOlFG/7I0MWe1qHHyubAmhK+Ip7aiHB3o53LxEiaE1FZDYy8YCDcfV4UeKEBkZuaWEvVq0bHW31VHvXnc+67v8ttgpKr0QsGyCTGLyGTmAYz564Mo4PYkNLY2XsxBgygtNAjv39Dbs0iXz7L1E2c16L4upXIL2XCOBr4IB0RABKKVPdNOwr1da6GYtbrKPLnY77r29yOa19hPlBuk1hhZz/aQyQ+D3m+jca2H7d+jxKHCSQhgkYcXs8VYR9UAc9MnzbzYMlF2ygrPM+XvX2uraz/KUFZNYkrswcvkB9xBrZ/Be66Vm88wd3YqsdCqA/xpdCYTtSeQOeL1VrPycCleSo5ZXfBhVDc1xhpWBCAlPPAe8r6PzDjv+GjQCuDpDgvb7PaOe0C7Y6FNeuq/vugyb9ReXCx/AxoENFrxJ8oPZJjp0llkD/MTQLzII/C1BWdRgqIwZdhKc3txBesdw3/J2YTXGvEPcV0wNaj5yWN1V5AxEBDMIP2n9qjz2dj71YWoUZ8AXbK/mxrZ6MmoXKr27l6Y9gr5U7tECBuuNyznWRE/JuY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=33.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.3.0

Nextcloud 32

Folder Protection 2.2.1
Release Details
UpdatedMay 22, 2026, 11:39 p.m.
Changelog

Fixed

  • Notifier registration corrected to prevent startup warnings
  • Lock path resolution fixed for edge cases in LockPlugin
  • COPY operation now correctly blocks descendants of protected folders, not just the root
  • Removed dead code paths in protection check flow

Changed

  • Admin UI: added edit button to update the protection reason inline
  • Admin UI: lock icon overlay on folder entries, styled confirmation dialog (replaces browser native confirm), "Configurações" section label, internal ID shown as monospace chip, reason displayed with label
  • Translations: added missing strings for en/pt_PT (lock icon toggle, folder existence check, edit reason)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignatureHDZkVL7UkECqCiYCuV24a9N8R12Ld8XG8IwoR6PKB8iHRy45lAIn1w0a6iprCAVpfE+AMbFgP84GfSWHnoabm05+mIFZNqHYcm4N6TlzL8DS3dO8UNeY6QTZsifOhPb/Wo0LI2vFyucZYOFKrGy5TSPpo35GzkPHQap9MFzhwP+g8CnOYQ7cw4gxERk1iLKX4KVdq9hYDk+uA5wgYozVBy3teR2MZ0AEohUgJ/ou5y4f6rtBHnrf6jttzGDjzPe5c/NRu9nr2TEn3sQ0FNniQs46LllTwChexoJElrta3ipjywpTDqZRAI1R38/qktXldGlRUYG6CkZ+SnlRv23kzC6aRiBZnpfizhdyQsKlIFCdocwvicmcumzdHJtZQ9uqUPGxZWIb8zmlQb2Bq9rHfv9wIPfhj1YYDxnX49c7GUaRFKY8GMLABdWrI7IddGM4T7/HSWLB3/wcznByHBlAdetJZ00TV3coxUeyj+VOCok9sqp8h1OTiYchNpDvnBwkVrEszIO6N50EuyxtjIX/RrVmk7ZqjOLT4jfWQull3gwTTDNyreSoA0It/FmM5xKqtivEX/rFbG5n3qEsCkqVIO85hSzzOnwF80WwKQ80il9YKIsuwiJ/908fLkqzolZB4sYHW/1+YPw1SukL0vMaYccf9j5zfySnXLrc9QW4KB4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
Folder Protection 2.1.1
Release Details
UpdatedMarch 10, 2026, 11:15 p.m.
Changelog

Fixed

  • Fixed false positive in beforeBind() where chunked upload paths (/uploads/.../1, /2, etc.) matched protected GroupFolder IDs, blocking file uploads larger than upload_chunk_size (128 MB default)
  • Affected both web browser and desktop client uploads
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignaturelIarA0EfSUbWTL36cackS95j5ZlckI1+SGvnOnymLGvJOkD/J2JE20gj0QF0pTwnvcB4ZCJEGn7EwU3E4xYIkJYxR8WeV9obT4sjbbtJ1Wjw+yRIaIBhRLhypWkJf2dOvUzXykCO9q2Qgr5TIULl1RJiWaxqYurr0ybzrCaLe/G4P8YgNgfW6CVobcKdj19CaLURwVqhD1K4XitqEie3BJcCVFHUQCKuzCxTEux7PC6G8rrJoO7Yd1kDUb62Qj6XExrCqaBCghfSOUPiaDupT346idJnRSE00Ff+HwY0B6ZYL+ycIEQIoGfA2t/UnxMtY6wFG5y7w31MRQWwhW6fUZUjw4e68Am14WQ5rhTVTB19NM22+y2QE6dsNfpu8p8KVkl/CkxuK/XqTmBAvRYn+4JcpzkYTlE5l4zcLpwJ1oaBNILhUnJM66iHcRgNLivNvQqGLGVTYLup+t5/9O6JER0tKEA5z4kymM/4INSmGm9DhrRJ8/wsTgxgxiocpj+CNl2c0PiyE2CytlMRmryEWtMd0UvYkzPa6evA8svw12mpeRrdg3kjvQ/utvYuccp9p7m+tnIaxCVeigMxrMNb9kjdwOOGyJG8Gh0uX3+RhlZkOZKWfYbpuU+94x9Aff60Pe/2WYiAcPLpMI9IGlF+f7rYNgkF+HfYIxuDunnB5+w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
Folder Protection 2.0.0
Release Details
UpdatedMarch 3, 2026, 11:28 p.m.
Changelog

Added

  • Group Folder support: protect group folders by their internal ID (/__groupfolders/N) without requiring the admin to be a group member
  • Admin panel: two-tab modal ("Group Folders" and "Custom Path") for adding protections; gracefully degrades to single form when the groupfolders app is not installed
  • API endpoint GET /api/groupfolders listing all group folders with their protection status
  • API endpoint GET /api/status now emits /files/<mountPoint> aliases for group folder paths so the web UI badge system can match them by visible name
  • ProtectionPropertyPlugin: removes the D flag from oc:permissions for protected folders so the Nextcloud desktop client does not attempt deletion locally

Changed

  • Desktop sync recovery: on a blocked DELETE or MOVE, the server updates the node's ETag and mtime so the sync client detects the server state as "newer" and restores the folder instead of showing a permanent sync error
  • Database migrations consolidated from versions 1–4 into a single clean migration (Version 2); existing installations are not affected
  • App version bumped to 2.0.0
  • Admin list now shows the visible mount point name alongside internal /__groupfolders/N paths, making it easier to remember which folder is which

Fixed

  • Group folder path detection in ProtectionPlugin and ProtectionPropertyPlugin: DAV nodes backed by a group folder storage are now correctly resolved to __groupfolders/N by traversing the storage wrapper chain via getWrapperStorage() / getFolderId()
  • Lock icon badge now appears on group folders in the web file browser (path alias fix in /api/status)
  • COPY operations on group folders are now correctly blocked
<hr />
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignatureMx1M2txg9CikJSB039Gzdt1lWJuUXCQK6Fmh4AHBZ2tKAR29JJIK/PSsp9CBQlv4rEdgl1zZ6D0wygZ2p92iWCZmRZSS4zYutwyly2JdmpTmBG/p9wZknCT9oytWn+SySOFHkp7rdgacVWYZD7Jpseu4LsQJttXB3NM2CWaJJ4K5jg9hhsHV6PVwFtplKXYKfD7kvw+3OdP6B2teC8gskO5W2rL73gyaJPJBihvd2r1zg+JfWlMWL0NluN0nV+O1c90qLiUo7zkaWh4YHhkgNKrAM/1gudeOv4+5YbTPUKMDWFQoz1b5dDCE63ND1WNMrwapRngc/ntaBVfPzDh8/4J6rciNPp7VrLnSFCQoYGzMkBqeZzXPd6Y9bEY3SG1bMcuNcgYLfOPe8Jv9JmGhwRhUaYWzhGppvf/5ou32+r9Y9LJCwtzYyksFplyWiecS0wXz2dq81OmPZZ5nc3BO6qFOPizauETbptJrxkSbkxXl/GKoD8GnAlOUzcfjfvXWIyxx43cFmTNdKeHg2pLZsu7w+t4AmwsVWSr/ikuvRGs/NsQSRr7DcT9obJfW85F/sbsKl0pPWInNbVJpQ6APESrE8/8Phz0rY0DOAG9qeSqNF/NKMQy5K/9WKDjSz8KQDKv8KpwZyeAc4F9yQaYaH1JzKMti2SCk0+EZ5pXJM8E=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 31

Folder Protection 2.2.1
Release Details
UpdatedMay 22, 2026, 11:39 p.m.
Changelog

Fixed

  • Notifier registration corrected to prevent startup warnings
  • Lock path resolution fixed for edge cases in LockPlugin
  • COPY operation now correctly blocks descendants of protected folders, not just the root
  • Removed dead code paths in protection check flow

Changed

  • Admin UI: added edit button to update the protection reason inline
  • Admin UI: lock icon overlay on folder entries, styled confirmation dialog (replaces browser native confirm), "Configurações" section label, internal ID shown as monospace chip, reason displayed with label
  • Translations: added missing strings for en/pt_PT (lock icon toggle, folder existence check, edit reason)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignatureHDZkVL7UkECqCiYCuV24a9N8R12Ld8XG8IwoR6PKB8iHRy45lAIn1w0a6iprCAVpfE+AMbFgP84GfSWHnoabm05+mIFZNqHYcm4N6TlzL8DS3dO8UNeY6QTZsifOhPb/Wo0LI2vFyucZYOFKrGy5TSPpo35GzkPHQap9MFzhwP+g8CnOYQ7cw4gxERk1iLKX4KVdq9hYDk+uA5wgYozVBy3teR2MZ0AEohUgJ/ou5y4f6rtBHnrf6jttzGDjzPe5c/NRu9nr2TEn3sQ0FNniQs46LllTwChexoJElrta3ipjywpTDqZRAI1R38/qktXldGlRUYG6CkZ+SnlRv23kzC6aRiBZnpfizhdyQsKlIFCdocwvicmcumzdHJtZQ9uqUPGxZWIb8zmlQb2Bq9rHfv9wIPfhj1YYDxnX49c7GUaRFKY8GMLABdWrI7IddGM4T7/HSWLB3/wcznByHBlAdetJZ00TV3coxUeyj+VOCok9sqp8h1OTiYchNpDvnBwkVrEszIO6N50EuyxtjIX/RrVmk7ZqjOLT4jfWQull3gwTTDNyreSoA0It/FmM5xKqtivEX/rFbG5n3qEsCkqVIO85hSzzOnwF80WwKQ80il9YKIsuwiJ/908fLkqzolZB4sYHW/1+YPw1SukL0vMaYccf9j5zfySnXLrc9QW4KB4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
Folder Protection 2.1.1
Release Details
UpdatedMarch 10, 2026, 11:15 p.m.
Changelog

Fixed

  • Fixed false positive in beforeBind() where chunked upload paths (/uploads/.../1, /2, etc.) matched protected GroupFolder IDs, blocking file uploads larger than upload_chunk_size (128 MB default)
  • Affected both web browser and desktop client uploads
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignaturelIarA0EfSUbWTL36cackS95j5ZlckI1+SGvnOnymLGvJOkD/J2JE20gj0QF0pTwnvcB4ZCJEGn7EwU3E4xYIkJYxR8WeV9obT4sjbbtJ1Wjw+yRIaIBhRLhypWkJf2dOvUzXykCO9q2Qgr5TIULl1RJiWaxqYurr0ybzrCaLe/G4P8YgNgfW6CVobcKdj19CaLURwVqhD1K4XitqEie3BJcCVFHUQCKuzCxTEux7PC6G8rrJoO7Yd1kDUb62Qj6XExrCqaBCghfSOUPiaDupT346idJnRSE00Ff+HwY0B6ZYL+ycIEQIoGfA2t/UnxMtY6wFG5y7w31MRQWwhW6fUZUjw4e68Am14WQ5rhTVTB19NM22+y2QE6dsNfpu8p8KVkl/CkxuK/XqTmBAvRYn+4JcpzkYTlE5l4zcLpwJ1oaBNILhUnJM66iHcRgNLivNvQqGLGVTYLup+t5/9O6JER0tKEA5z4kymM/4INSmGm9DhrRJ8/wsTgxgxiocpj+CNl2c0PiyE2CytlMRmryEWtMd0UvYkzPa6evA8svw12mpeRrdg3kjvQ/utvYuccp9p7m+tnIaxCVeigMxrMNb9kjdwOOGyJG8Gh0uX3+RhlZkOZKWfYbpuU+94x9Aff60Pe/2WYiAcPLpMI9IGlF+f7rYNgkF+HfYIxuDunnB5+w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
Folder Protection 2.0.0
Release Details
UpdatedMarch 3, 2026, 11:28 p.m.
Changelog

Added

  • Group Folder support: protect group folders by their internal ID (/__groupfolders/N) without requiring the admin to be a group member
  • Admin panel: two-tab modal ("Group Folders" and "Custom Path") for adding protections; gracefully degrades to single form when the groupfolders app is not installed
  • API endpoint GET /api/groupfolders listing all group folders with their protection status
  • API endpoint GET /api/status now emits /files/<mountPoint> aliases for group folder paths so the web UI badge system can match them by visible name
  • ProtectionPropertyPlugin: removes the D flag from oc:permissions for protected folders so the Nextcloud desktop client does not attempt deletion locally

Changed

  • Desktop sync recovery: on a blocked DELETE or MOVE, the server updates the node's ETag and mtime so the sync client detects the server state as "newer" and restores the folder instead of showing a permanent sync error
  • Database migrations consolidated from versions 1–4 into a single clean migration (Version 2); existing installations are not affected
  • App version bumped to 2.0.0
  • Admin list now shows the visible mount point name alongside internal /__groupfolders/N paths, making it easier to remember which folder is which

Fixed

  • Group folder path detection in ProtectionPlugin and ProtectionPropertyPlugin: DAV nodes backed by a group folder storage are now correctly resolved to __groupfolders/N by traversing the storage wrapper chain via getWrapperStorage() / getFolderId()
  • Lock icon badge now appears on group folders in the web file browser (path alias fix in /api/status)
  • COPY operations on group folders are now correctly blocked
<hr />
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignatureMx1M2txg9CikJSB039Gzdt1lWJuUXCQK6Fmh4AHBZ2tKAR29JJIK/PSsp9CBQlv4rEdgl1zZ6D0wygZ2p92iWCZmRZSS4zYutwyly2JdmpTmBG/p9wZknCT9oytWn+SySOFHkp7rdgacVWYZD7Jpseu4LsQJttXB3NM2CWaJJ4K5jg9hhsHV6PVwFtplKXYKfD7kvw+3OdP6B2teC8gskO5W2rL73gyaJPJBihvd2r1zg+JfWlMWL0NluN0nV+O1c90qLiUo7zkaWh4YHhkgNKrAM/1gudeOv4+5YbTPUKMDWFQoz1b5dDCE63ND1WNMrwapRngc/ntaBVfPzDh8/4J6rciNPp7VrLnSFCQoYGzMkBqeZzXPd6Y9bEY3SG1bMcuNcgYLfOPe8Jv9JmGhwRhUaYWzhGppvf/5ou32+r9Y9LJCwtzYyksFplyWiecS0wXz2dq81OmPZZ5nc3BO6qFOPizauETbptJrxkSbkxXl/GKoD8GnAlOUzcfjfvXWIyxx43cFmTNdKeHg2pLZsu7w+t4AmwsVWSr/ikuvRGs/NsQSRr7DcT9obJfW85F/sbsKl0pPWInNbVJpQ6APESrE8/8Phz0rY0DOAG9qeSqNF/NKMQy5K/9WKDjSz8KQDKv8KpwZyeAc4F9yQaYaH1JzKMti2SCk0+EZ5pXJM8E=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 30

Folder Protection 2.2.1
Release Details
UpdatedMay 22, 2026, 11:39 p.m.
Changelog

Fixed

  • Notifier registration corrected to prevent startup warnings
  • Lock path resolution fixed for edge cases in LockPlugin
  • COPY operation now correctly blocks descendants of protected folders, not just the root
  • Removed dead code paths in protection check flow

Changed

  • Admin UI: added edit button to update the protection reason inline
  • Admin UI: lock icon overlay on folder entries, styled confirmation dialog (replaces browser native confirm), "Configurações" section label, internal ID shown as monospace chip, reason displayed with label
  • Translations: added missing strings for en/pt_PT (lock icon toggle, folder existence check, edit reason)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignatureHDZkVL7UkECqCiYCuV24a9N8R12Ld8XG8IwoR6PKB8iHRy45lAIn1w0a6iprCAVpfE+AMbFgP84GfSWHnoabm05+mIFZNqHYcm4N6TlzL8DS3dO8UNeY6QTZsifOhPb/Wo0LI2vFyucZYOFKrGy5TSPpo35GzkPHQap9MFzhwP+g8CnOYQ7cw4gxERk1iLKX4KVdq9hYDk+uA5wgYozVBy3teR2MZ0AEohUgJ/ou5y4f6rtBHnrf6jttzGDjzPe5c/NRu9nr2TEn3sQ0FNniQs46LllTwChexoJElrta3ipjywpTDqZRAI1R38/qktXldGlRUYG6CkZ+SnlRv23kzC6aRiBZnpfizhdyQsKlIFCdocwvicmcumzdHJtZQ9uqUPGxZWIb8zmlQb2Bq9rHfv9wIPfhj1YYDxnX49c7GUaRFKY8GMLABdWrI7IddGM4T7/HSWLB3/wcznByHBlAdetJZ00TV3coxUeyj+VOCok9sqp8h1OTiYchNpDvnBwkVrEszIO6N50EuyxtjIX/RrVmk7ZqjOLT4jfWQull3gwTTDNyreSoA0It/FmM5xKqtivEX/rFbG5n3qEsCkqVIO85hSzzOnwF80WwKQ80il9YKIsuwiJ/908fLkqzolZB4sYHW/1+YPw1SukL0vMaYccf9j5zfySnXLrc9QW4KB4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
Folder Protection 2.1.1
Release Details
UpdatedMarch 10, 2026, 11:15 p.m.
Changelog

Fixed

  • Fixed false positive in beforeBind() where chunked upload paths (/uploads/.../1, /2, etc.) matched protected GroupFolder IDs, blocking file uploads larger than upload_chunk_size (128 MB default)
  • Affected both web browser and desktop client uploads
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignaturelIarA0EfSUbWTL36cackS95j5ZlckI1+SGvnOnymLGvJOkD/J2JE20gj0QF0pTwnvcB4ZCJEGn7EwU3E4xYIkJYxR8WeV9obT4sjbbtJ1Wjw+yRIaIBhRLhypWkJf2dOvUzXykCO9q2Qgr5TIULl1RJiWaxqYurr0ybzrCaLe/G4P8YgNgfW6CVobcKdj19CaLURwVqhD1K4XitqEie3BJcCVFHUQCKuzCxTEux7PC6G8rrJoO7Yd1kDUb62Qj6XExrCqaBCghfSOUPiaDupT346idJnRSE00Ff+HwY0B6ZYL+ycIEQIoGfA2t/UnxMtY6wFG5y7w31MRQWwhW6fUZUjw4e68Am14WQ5rhTVTB19NM22+y2QE6dsNfpu8p8KVkl/CkxuK/XqTmBAvRYn+4JcpzkYTlE5l4zcLpwJ1oaBNILhUnJM66iHcRgNLivNvQqGLGVTYLup+t5/9O6JER0tKEA5z4kymM/4INSmGm9DhrRJ8/wsTgxgxiocpj+CNl2c0PiyE2CytlMRmryEWtMd0UvYkzPa6evA8svw12mpeRrdg3kjvQ/utvYuccp9p7m+tnIaxCVeigMxrMNb9kjdwOOGyJG8Gh0uX3+RhlZkOZKWfYbpuU+94x9Aff60Pe/2WYiAcPLpMI9IGlF+f7rYNgkF+HfYIxuDunnB5+w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
Folder Protection 2.0.0
Release Details
UpdatedMarch 3, 2026, 11:28 p.m.
Changelog

Added

  • Group Folder support: protect group folders by their internal ID (/__groupfolders/N) without requiring the admin to be a group member
  • Admin panel: two-tab modal ("Group Folders" and "Custom Path") for adding protections; gracefully degrades to single form when the groupfolders app is not installed
  • API endpoint GET /api/groupfolders listing all group folders with their protection status
  • API endpoint GET /api/status now emits /files/<mountPoint> aliases for group folder paths so the web UI badge system can match them by visible name
  • ProtectionPropertyPlugin: removes the D flag from oc:permissions for protected folders so the Nextcloud desktop client does not attempt deletion locally

Changed

  • Desktop sync recovery: on a blocked DELETE or MOVE, the server updates the node's ETag and mtime so the sync client detects the server state as "newer" and restores the folder instead of showing a permanent sync error
  • Database migrations consolidated from versions 1–4 into a single clean migration (Version 2); existing installations are not affected
  • App version bumped to 2.0.0
  • Admin list now shows the visible mount point name alongside internal /__groupfolders/N paths, making it easier to remember which folder is which

Fixed

  • Group folder path detection in ProtectionPlugin and ProtectionPropertyPlugin: DAV nodes backed by a group folder storage are now correctly resolved to __groupfolders/N by traversing the storage wrapper chain via getWrapperStorage() / getFolderId()
  • Lock icon badge now appears on group folders in the web file browser (path alias fix in /api/status)
  • COPY operations on group folders are now correctly blocked
<hr />
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignatureMx1M2txg9CikJSB039Gzdt1lWJuUXCQK6Fmh4AHBZ2tKAR29JJIK/PSsp9CBQlv4rEdgl1zZ6D0wygZ2p92iWCZmRZSS4zYutwyly2JdmpTmBG/p9wZknCT9oytWn+SySOFHkp7rdgacVWYZD7Jpseu4LsQJttXB3NM2CWaJJ4K5jg9hhsHV6PVwFtplKXYKfD7kvw+3OdP6B2teC8gskO5W2rL73gyaJPJBihvd2r1zg+JfWlMWL0NluN0nV+O1c90qLiUo7zkaWh4YHhkgNKrAM/1gudeOv4+5YbTPUKMDWFQoz1b5dDCE63ND1WNMrwapRngc/ntaBVfPzDh8/4J6rciNPp7VrLnSFCQoYGzMkBqeZzXPd6Y9bEY3SG1bMcuNcgYLfOPe8Jv9JmGhwRhUaYWzhGppvf/5ou32+r9Y9LJCwtzYyksFplyWiecS0wXz2dq81OmPZZ5nc3BO6qFOPizauETbptJrxkSbkxXl/GKoD8GnAlOUzcfjfvXWIyxx43cFmTNdKeHg2pLZsu7w+t4AmwsVWSr/ikuvRGs/NsQSRr7DcT9obJfW85F/sbsKl0pPWInNbVJpQ6APESrE8/8Phz0rY0DOAG9qeSqNF/NKMQy5K/9WKDjSz8KQDKv8KpwZyeAc4F9yQaYaH1JzKMti2SCk0+EZ5pXJM8E=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 29

Folder Protection 2.2.1
Release Details
UpdatedMay 22, 2026, 11:39 p.m.
Changelog

Fixed

  • Notifier registration corrected to prevent startup warnings
  • Lock path resolution fixed for edge cases in LockPlugin
  • COPY operation now correctly blocks descendants of protected folders, not just the root
  • Removed dead code paths in protection check flow

Changed

  • Admin UI: added edit button to update the protection reason inline
  • Admin UI: lock icon overlay on folder entries, styled confirmation dialog (replaces browser native confirm), "Configurações" section label, internal ID shown as monospace chip, reason displayed with label
  • Translations: added missing strings for en/pt_PT (lock icon toggle, folder existence check, edit reason)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignatureHDZkVL7UkECqCiYCuV24a9N8R12Ld8XG8IwoR6PKB8iHRy45lAIn1w0a6iprCAVpfE+AMbFgP84GfSWHnoabm05+mIFZNqHYcm4N6TlzL8DS3dO8UNeY6QTZsifOhPb/Wo0LI2vFyucZYOFKrGy5TSPpo35GzkPHQap9MFzhwP+g8CnOYQ7cw4gxERk1iLKX4KVdq9hYDk+uA5wgYozVBy3teR2MZ0AEohUgJ/ou5y4f6rtBHnrf6jttzGDjzPe5c/NRu9nr2TEn3sQ0FNniQs46LllTwChexoJElrta3ipjywpTDqZRAI1R38/qktXldGlRUYG6CkZ+SnlRv23kzC6aRiBZnpfizhdyQsKlIFCdocwvicmcumzdHJtZQ9uqUPGxZWIb8zmlQb2Bq9rHfv9wIPfhj1YYDxnX49c7GUaRFKY8GMLABdWrI7IddGM4T7/HSWLB3/wcznByHBlAdetJZ00TV3coxUeyj+VOCok9sqp8h1OTiYchNpDvnBwkVrEszIO6N50EuyxtjIX/RrVmk7ZqjOLT4jfWQull3gwTTDNyreSoA0It/FmM5xKqtivEX/rFbG5n3qEsCkqVIO85hSzzOnwF80WwKQ80il9YKIsuwiJ/908fLkqzolZB4sYHW/1+YPw1SukL0vMaYccf9j5zfySnXLrc9QW4KB4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
Folder Protection 2.1.1
Release Details
UpdatedMarch 10, 2026, 11:15 p.m.
Changelog

Fixed

  • Fixed false positive in beforeBind() where chunked upload paths (/uploads/.../1, /2, etc.) matched protected GroupFolder IDs, blocking file uploads larger than upload_chunk_size (128 MB default)
  • Affected both web browser and desktop client uploads
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignaturelIarA0EfSUbWTL36cackS95j5ZlckI1+SGvnOnymLGvJOkD/J2JE20gj0QF0pTwnvcB4ZCJEGn7EwU3E4xYIkJYxR8WeV9obT4sjbbtJ1Wjw+yRIaIBhRLhypWkJf2dOvUzXykCO9q2Qgr5TIULl1RJiWaxqYurr0ybzrCaLe/G4P8YgNgfW6CVobcKdj19CaLURwVqhD1K4XitqEie3BJcCVFHUQCKuzCxTEux7PC6G8rrJoO7Yd1kDUb62Qj6XExrCqaBCghfSOUPiaDupT346idJnRSE00Ff+HwY0B6ZYL+ycIEQIoGfA2t/UnxMtY6wFG5y7w31MRQWwhW6fUZUjw4e68Am14WQ5rhTVTB19NM22+y2QE6dsNfpu8p8KVkl/CkxuK/XqTmBAvRYn+4JcpzkYTlE5l4zcLpwJ1oaBNILhUnJM66iHcRgNLivNvQqGLGVTYLup+t5/9O6JER0tKEA5z4kymM/4INSmGm9DhrRJ8/wsTgxgxiocpj+CNl2c0PiyE2CytlMRmryEWtMd0UvYkzPa6evA8svw12mpeRrdg3kjvQ/utvYuccp9p7m+tnIaxCVeigMxrMNb9kjdwOOGyJG8Gh0uX3+RhlZkOZKWfYbpuU+94x9Aff60Pe/2WYiAcPLpMI9IGlF+f7rYNgkF+HfYIxuDunnB5+w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
Folder Protection 2.0.0
Release Details
UpdatedMarch 3, 2026, 11:28 p.m.
Changelog

Added

  • Group Folder support: protect group folders by their internal ID (/__groupfolders/N) without requiring the admin to be a group member
  • Admin panel: two-tab modal ("Group Folders" and "Custom Path") for adding protections; gracefully degrades to single form when the groupfolders app is not installed
  • API endpoint GET /api/groupfolders listing all group folders with their protection status
  • API endpoint GET /api/status now emits /files/<mountPoint> aliases for group folder paths so the web UI badge system can match them by visible name
  • ProtectionPropertyPlugin: removes the D flag from oc:permissions for protected folders so the Nextcloud desktop client does not attempt deletion locally

Changed

  • Desktop sync recovery: on a blocked DELETE or MOVE, the server updates the node's ETag and mtime so the sync client detects the server state as "newer" and restores the folder instead of showing a permanent sync error
  • Database migrations consolidated from versions 1–4 into a single clean migration (Version 2); existing installations are not affected
  • App version bumped to 2.0.0
  • Admin list now shows the visible mount point name alongside internal /__groupfolders/N paths, making it easier to remember which folder is which

Fixed

  • Group folder path detection in ProtectionPlugin and ProtectionPropertyPlugin: DAV nodes backed by a group folder storage are now correctly resolved to __groupfolders/N by traversing the storage wrapper chain via getWrapperStorage() / getFolderId()
  • Lock icon badge now appears on group folders in the web file browser (path alias fix in /api/status)
  • COPY operations on group folders are now correctly blocked
<hr />
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignatureMx1M2txg9CikJSB039Gzdt1lWJuUXCQK6Fmh4AHBZ2tKAR29JJIK/PSsp9CBQlv4rEdgl1zZ6D0wygZ2p92iWCZmRZSS4zYutwyly2JdmpTmBG/p9wZknCT9oytWn+SySOFHkp7rdgacVWYZD7Jpseu4LsQJttXB3NM2CWaJJ4K5jg9hhsHV6PVwFtplKXYKfD7kvw+3OdP6B2teC8gskO5W2rL73gyaJPJBihvd2r1zg+JfWlMWL0NluN0nV+O1c90qLiUo7zkaWh4YHhkgNKrAM/1gudeOv4+5YbTPUKMDWFQoz1b5dDCE63ND1WNMrwapRngc/ntaBVfPzDh8/4J6rciNPp7VrLnSFCQoYGzMkBqeZzXPd6Y9bEY3SG1bMcuNcgYLfOPe8Jv9JmGhwRhUaYWzhGppvf/5ou32+r9Y9LJCwtzYyksFplyWiecS0wXz2dq81OmPZZ5nc3BO6qFOPizauETbptJrxkSbkxXl/GKoD8GnAlOUzcfjfvXWIyxx43cFmTNdKeHg2pLZsu7w+t4AmwsVWSr/ikuvRGs/NsQSRr7DcT9obJfW85F/sbsKl0pPWInNbVJpQ6APESrE8/8Phz0rY0DOAG9qeSqNF/NKMQy5K/9WKDjSz8KQDKv8KpwZyeAc4F9yQaYaH1JzKMti2SCk0+EZ5pXJM8E=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 28

Folder Protection 2.2.1
Release Details
UpdatedMay 22, 2026, 11:39 p.m.
Changelog

Fixed

  • Notifier registration corrected to prevent startup warnings
  • Lock path resolution fixed for edge cases in LockPlugin
  • COPY operation now correctly blocks descendants of protected folders, not just the root
  • Removed dead code paths in protection check flow

Changed

  • Admin UI: added edit button to update the protection reason inline
  • Admin UI: lock icon overlay on folder entries, styled confirmation dialog (replaces browser native confirm), "Configurações" section label, internal ID shown as monospace chip, reason displayed with label
  • Translations: added missing strings for en/pt_PT (lock icon toggle, folder existence check, edit reason)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignatureHDZkVL7UkECqCiYCuV24a9N8R12Ld8XG8IwoR6PKB8iHRy45lAIn1w0a6iprCAVpfE+AMbFgP84GfSWHnoabm05+mIFZNqHYcm4N6TlzL8DS3dO8UNeY6QTZsifOhPb/Wo0LI2vFyucZYOFKrGy5TSPpo35GzkPHQap9MFzhwP+g8CnOYQ7cw4gxERk1iLKX4KVdq9hYDk+uA5wgYozVBy3teR2MZ0AEohUgJ/ou5y4f6rtBHnrf6jttzGDjzPe5c/NRu9nr2TEn3sQ0FNniQs46LllTwChexoJElrta3ipjywpTDqZRAI1R38/qktXldGlRUYG6CkZ+SnlRv23kzC6aRiBZnpfizhdyQsKlIFCdocwvicmcumzdHJtZQ9uqUPGxZWIb8zmlQb2Bq9rHfv9wIPfhj1YYDxnX49c7GUaRFKY8GMLABdWrI7IddGM4T7/HSWLB3/wcznByHBlAdetJZ00TV3coxUeyj+VOCok9sqp8h1OTiYchNpDvnBwkVrEszIO6N50EuyxtjIX/RrVmk7ZqjOLT4jfWQull3gwTTDNyreSoA0It/FmM5xKqtivEX/rFbG5n3qEsCkqVIO85hSzzOnwF80WwKQ80il9YKIsuwiJ/908fLkqzolZB4sYHW/1+YPw1SukL0vMaYccf9j5zfySnXLrc9QW4KB4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
Folder Protection 2.1.1
Release Details
UpdatedMarch 10, 2026, 11:15 p.m.
Changelog

Fixed

  • Fixed false positive in beforeBind() where chunked upload paths (/uploads/.../1, /2, etc.) matched protected GroupFolder IDs, blocking file uploads larger than upload_chunk_size (128 MB default)
  • Affected both web browser and desktop client uploads
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignaturelIarA0EfSUbWTL36cackS95j5ZlckI1+SGvnOnymLGvJOkD/J2JE20gj0QF0pTwnvcB4ZCJEGn7EwU3E4xYIkJYxR8WeV9obT4sjbbtJ1Wjw+yRIaIBhRLhypWkJf2dOvUzXykCO9q2Qgr5TIULl1RJiWaxqYurr0ybzrCaLe/G4P8YgNgfW6CVobcKdj19CaLURwVqhD1K4XitqEie3BJcCVFHUQCKuzCxTEux7PC6G8rrJoO7Yd1kDUb62Qj6XExrCqaBCghfSOUPiaDupT346idJnRSE00Ff+HwY0B6ZYL+ycIEQIoGfA2t/UnxMtY6wFG5y7w31MRQWwhW6fUZUjw4e68Am14WQ5rhTVTB19NM22+y2QE6dsNfpu8p8KVkl/CkxuK/XqTmBAvRYn+4JcpzkYTlE5l4zcLpwJ1oaBNILhUnJM66iHcRgNLivNvQqGLGVTYLup+t5/9O6JER0tKEA5z4kymM/4INSmGm9DhrRJ8/wsTgxgxiocpj+CNl2c0PiyE2CytlMRmryEWtMd0UvYkzPa6evA8svw12mpeRrdg3kjvQ/utvYuccp9p7m+tnIaxCVeigMxrMNb9kjdwOOGyJG8Gh0uX3+RhlZkOZKWfYbpuU+94x9Aff60Pe/2WYiAcPLpMI9IGlF+f7rYNgkF+HfYIxuDunnB5+w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
Folder Protection 2.0.0
Release Details
UpdatedMarch 3, 2026, 11:28 p.m.
Changelog

Added

  • Group Folder support: protect group folders by their internal ID (/__groupfolders/N) without requiring the admin to be a group member
  • Admin panel: two-tab modal ("Group Folders" and "Custom Path") for adding protections; gracefully degrades to single form when the groupfolders app is not installed
  • API endpoint GET /api/groupfolders listing all group folders with their protection status
  • API endpoint GET /api/status now emits /files/<mountPoint> aliases for group folder paths so the web UI badge system can match them by visible name
  • ProtectionPropertyPlugin: removes the D flag from oc:permissions for protected folders so the Nextcloud desktop client does not attempt deletion locally

Changed

  • Desktop sync recovery: on a blocked DELETE or MOVE, the server updates the node's ETag and mtime so the sync client detects the server state as "newer" and restores the folder instead of showing a permanent sync error
  • Database migrations consolidated from versions 1–4 into a single clean migration (Version 2); existing installations are not affected
  • App version bumped to 2.0.0
  • Admin list now shows the visible mount point name alongside internal /__groupfolders/N paths, making it easier to remember which folder is which

Fixed

  • Group folder path detection in ProtectionPlugin and ProtectionPropertyPlugin: DAV nodes backed by a group folder storage are now correctly resolved to __groupfolders/N by traversing the storage wrapper chain via getWrapperStorage() / getFolderId()
  • Lock icon badge now appears on group folders in the web file browser (path alias fix in /api/status)
  • COPY operations on group folders are now correctly blocked
<hr />
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEDDCCAvQCAhMBMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzAzMDgyMzQ0WhcNMzYwNjA4MDgyMzQ0WjAcMRowGAYD
VQQDDBFmb2xkZXJfcHJvdGVjdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJUdCdjxoMEL5WHoNag/igEUX46qUXwMc5MjvYVlM+KZEyogIujfVtoW
SAfpOm3TMUuVrvUWbwsL5u8kHIt+wf5h2E0/yWVmK/RUZ3o4Z+8aoyW1oXd4Zq+n
uLpY7a4Nt5B3/+4fz9ZPGroZ85d65KAaI1QPoykFi4shGKqgSSLLZHTRwMKtTfN0
smVLTq3PoAKip3O0E+bJtz8nO1lUxEP85ylhwgyrSueonSWRIzqhzOigOgQZT7bv
aXW+24tEcASNluHr0cGgJXaG1EPYizNa/I6U/0JNQf1j9/6JGCh82xwHByT+Bqky
OExQ4zRVTTUTbYQpQAZlUjsArREWwtRIAWtmiTdIoZV67DnrqsuOqU6oLD7kJ8Uz
MdnwA+/GQi4B47CObA5TUyab+gWeIequmb8aWSK2fueLxc9zOu1o9W2I3uzi77MP
e8xGOa/1ITUm/B5X5CjeeP3yqGiS5ktaiNVYiPK1lEL+8PC6MVJ683pNJOKPkVoy
o3BzlOUF0NPAJpcOLnK72l39zsMIskVf4/U/gGyrjBx+bFjFfPn0oPk5l6rIgKhq
WeTJNKRSfG00mVRm3RKVAw76YqDR8foPy2spWQvpjeLBDfDsbLpI5BTKqQ9E5hsF
KcCNRPANhk4ca6nDrVAvFoM96h/Akj7tp4wkBRF1oAcMk70TPpc1AgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBADhN49GehzotzNbZPWXpDjcKZXpsg0wdmg8z1wzlxSI8
vtJZy78rmfKtdUxIIKbbdsDxVlZSxoocUettiatZec+/kA0BezRxsUyEnT0pkvnt
x9yLNryy1VSdPFQnk47n+m4c/dN9kk6wQAP34uPJ0plqOEEPs5XWjTdZnHXj9fUV
6+wYEgti/5/5B2oLkkQ+OtBOnkh56HjX6TrkMJWl1CmyVCByV/dqQxHdy67D5cjU
c3uP0NSign6Uxl9M2gGubVcAsMmVX65KSS+D9ky6XlDJ1o5UCxJNE++WMVAXqT8/
ECr8/iCgT/lcU6rr38hU86eTIbfatm5ajRPfBpmGZCQ=
-----END CERTIFICATE-----
SignatureMx1M2txg9CikJSB039Gzdt1lWJuUXCQK6Fmh4AHBZ2tKAR29JJIK/PSsp9CBQlv4rEdgl1zZ6D0wygZ2p92iWCZmRZSS4zYutwyly2JdmpTmBG/p9wZknCT9oytWn+SySOFHkp7rdgacVWYZD7Jpseu4LsQJttXB3NM2CWaJJ4K5jg9hhsHV6PVwFtplKXYKfD7kvw+3OdP6B2teC8gskO5W2rL73gyaJPJBihvd2r1zg+JfWlMWL0NluN0nV+O1c90qLiUo7zkaWh4YHhkgNKrAM/1gudeOv4+5YbTPUKMDWFQoz1b5dDCE63ND1WNMrwapRngc/ntaBVfPzDh8/4J6rciNPp7VrLnSFCQoYGzMkBqeZzXPd6Y9bEY3SG1bMcuNcgYLfOPe8Jv9JmGhwRhUaYWzhGppvf/5ou32+r9Y9LJCwtzYyksFplyWiecS0wXz2dq81OmPZZ5nc3BO6qFOPizauETbptJrxkSbkxXl/GKoD8GnAlOUzcfjfvXWIyxx43cFmTNdKeHg2pLZsu7w+t4AmwsVWSr/ikuvRGs/NsQSRr7DcT9obJfW85F/sbsKl0pPWInNbVJpQ6APESrE8/8Phz0rY0DOAG9qeSqNF/NKMQy5K/9WKDjSz8KQDKv8KpwZyeAc4F9yQaYaH1JzKMti2SCk0+EZ5pXJM8E=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0