Content
View differences
Updated by Yauheni Suhakou 21 days ago
### Steps to reproduce
* Unclear - AppSignal report
### What is the buggy behavior?
* Unclear - AppSignal report
### What is the expected behavior?
* Unclear - AppSignal report
###
###
### **Logs**
[https://appsignal.com/openproject-gmbh/sites/681379ae55b0b20ed3735994/exceptions/incidents/1181/samples/last](https://appsignal.com/openproject-gmbh/sites/681379ae55b0b20ed3735994/exceptions/incidents/1181/samples/last)
[https://appsignal.com/openproject-gmbh/sites/67ec0573b9811010d8c9071a/exceptions/incidents/729](https://appsignal.com/openproject-gmbh/sites/67ec0573b9811010d8c9071a/exceptions/incidents/729)
```text
modules/storages/app/common/storages/adapters/providers/nextcloud/queries/file_info_query.rb:71 Hash#dig
modules/storages/app/common/storages/adapters/providers/nextcloud/queries/file_info_query.rb:71 Storages::Adapters::Providers::Nextcloud::Queries::FileInfoQuery#validate_response_object
modules/storages/app/common/storages/adapters/providers/nextcloud/queries/file_info_query.rb:43 block (2 levels) in Storages::Adapters::Providers::Nextcloud::Queries::FileInfoQuery#call
modules/storages/app/common/storages/adapters/providers/nextcloud/queries/file_info_query.rb:42 block in Storages::Adapters::Providers::Nextcloud::Queries::FileInfoQuery#call
modules/storages/app/common/storages/adapters/authentication_strategies/basic_auth.rb:43 Storages::Adapters::AuthenticationStrategies::BasicAuth#call
modules/storages/app/common/storages/adapters/providers/nextcloud/queries/file_info_query.rb:41 Storages::Adapters::Providers::Nextcloud::Queries::FileInfoQuery#call
modules/storages/app/common/storages/adapters/providers/nextcloud/base.rb:40 Storages::Adapters::Providers::Nextcloud::Base.call
modules/storages/app/common/storages/adapters/providers/nextcloud/commands/set_permissions_command.rb:51 block (3 levels) in Storages::Adapters::Providers::Nextcloud::Commands::SetPermissionsCommand#call
modules/storages/app/common/storages/adapters/providers/nextcloud/commands/set_permissions_command.rb:50 block (2 levels) in Storages::Adapters::Providers::Nextcloud::Commands::SetPermissionsCommand#call
modules/storages/app/common/storages/tagged_logging.rb:38 Storages::TaggedLogging#with_tagged_logger
modules/storages/app/common/storages/adapters/providers/nextcloud/commands/set_permissions_command.rb:48 block in Storages::Adapters::Providers::Nextcloud::Commands::SetPermissionsCommand#call
modules/storages/app/common/storages/adapters/authentication_strategies/basic_auth.rb:43 Storages::Adapters::AuthenticationStrategies::BasicAuth#call
modules/storages/app/common/storages/adapters/providers/nextcloud/commands/set_permissions_command.rb:47 Storages::Adapters::Providers::Nextcloud::Commands::SetPermissionsCommand#call
modules/storages/app/services/storages/nextcloud_managed_folder_permissions_service.rb:126 Storages::NextcloudManagedFolderPermissionsService#set_folder_permissions
modules/storages/app/services/storages/nextcloud_managed_folder_permissions_service.rb:68 block in Storages::NextcloudManagedFolderPermissionsService#apply_permissions_to_folders
modules/storages/app/services/storages/nextcloud_managed_folder_permissions_service.rb:67 Storages::NextcloudManagedFolderPermissionsService#apply_permissions_to_folders
modules/storages/app/services/storages/nextcloud_managed_folder_permissions_service.rb:56 block in Storages::NextcloudManagedFolderPermissionsService#call
modules/storages/app/common/storages/tagged_logging.rb:38 Storages::TaggedLogging#with_tagged_logger
modules/storages/app/services/storages/nextcloud_managed_folder_permissions_service.rb:55 Storages::NextcloudManagedFolderPermissionsService#call
modules/storages/app/services/storages/nextcloud_managed_folder_permissions_service.rb:41 Storages::NextcloudManagedFolderPermissionsService.call
modules/storages/app/services/storages/managed_folder_sync_service.rb:69 Storages::ManagedFolderSyncService#apply_permissions_to_folders
modules/storages/app/services/storages/managed_folder_sync_service.rb:50 block in Storages::ManagedFolderSyncService#call
modules/storages/app/common/storages/tagged_logging.rb:38 Storages::TaggedLogging#with_tagged_logger
modules/storages/app/services/storages/managed_folder_sync_service.rb:47 Storages::ManagedFolderSyncService#call
modules/storages/app/services/storages/managed_folder_sync_service.rb:37 Storages::ManagedFolderSyncService.call
modules/storages/app/workers/storages/automatically_managed_storage_sync_job.rb:60 Storages::AutomaticallyManagedStorageSyncJob#perform
app/workers/shared_job_setup.rb:59 block in SharedJobSetup#prepare_job_context
app/workers/shared_job_setup.rb:76 SharedJobSetup#with_clean_request_store
app/workers/shared_job_setup.rb:55 SharedJobSetup#prepare_job_context
vendor/plugins/openproject-multitenancy/app/extenders/workers/delayed_job_extender.rb:19 block in Multitenancy::JobWithSchemaData::ClassMethods#execute
vendor/plugins/openproject-multitenancy/app/extenders/workers/delayed_job_extender.rb:18 Multitenancy::JobWithSchemaData::ClassMethods#execute
```
<br>
### What was wrong
When OpenProject automatically synchronizes project folders with a connected Nextcloud storage, it expects Nextcloud to reply in a specific format. In some configurations — for example when the "OpenProject integration" app is turned off in Nextcloud, or when a proxy in front of Nextcloud returns an error page — Nextcloud replied in a different format. OpenProject couldn't process that reply and the sync stopped with an unclear internal error, leaving the storage in a broken state without a helpful explanation.
<br>
###
###
### What we changed
OpenProject now recognizes these unexpected replies and handles them cleanly instead of failing. Administrators see a clear message ("OpenProject could not process the response received from the Storage Provider…") and the storage's health status reflects the real problem, making it much easier to diagnose.
<br>
### Please note
The minimum supported Nextcloud version is now Nextcloud 30. If a connected Nextcloud is older, the error message now states both the required version and the version that was detected.
* Unclear - AppSignal report
### What is the buggy behavior?
* Unclear - AppSignal report
### What is the expected behavior?
* Unclear - AppSignal report
###
###
### **Logs**
[https://appsignal.com/openproject-gmbh/sites/681379ae55b0b20ed3735994/exceptions/incidents/1181/samples/last](https://appsignal.com/openproject-gmbh/sites/681379ae55b0b20ed3735994/exceptions/incidents/1181/samples/last)
[https://appsignal.com/openproject-gmbh/sites/67ec0573b9811010d8c9071a/exceptions/incidents/729](https://appsignal.com/openproject-gmbh/sites/67ec0573b9811010d8c9071a/exceptions/incidents/729)
```text
modules/storages/app/common/storages/adapters/providers/nextcloud/queries/file_info_query.rb:71 Hash#dig
modules/storages/app/common/storages/adapters/providers/nextcloud/queries/file_info_query.rb:71 Storages::Adapters::Providers::Nextcloud::Queries::FileInfoQuery#validate_response_object
modules/storages/app/common/storages/adapters/providers/nextcloud/queries/file_info_query.rb:43 block (2 levels) in Storages::Adapters::Providers::Nextcloud::Queries::FileInfoQuery#call
modules/storages/app/common/storages/adapters/providers/nextcloud/queries/file_info_query.rb:42 block in Storages::Adapters::Providers::Nextcloud::Queries::FileInfoQuery#call
modules/storages/app/common/storages/adapters/authentication_strategies/basic_auth.rb:43 Storages::Adapters::AuthenticationStrategies::BasicAuth#call
modules/storages/app/common/storages/adapters/providers/nextcloud/queries/file_info_query.rb:41 Storages::Adapters::Providers::Nextcloud::Queries::FileInfoQuery#call
modules/storages/app/common/storages/adapters/providers/nextcloud/base.rb:40 Storages::Adapters::Providers::Nextcloud::Base.call
modules/storages/app/common/storages/adapters/providers/nextcloud/commands/set_permissions_command.rb:51 block (3 levels) in Storages::Adapters::Providers::Nextcloud::Commands::SetPermissionsCommand#call
modules/storages/app/common/storages/adapters/providers/nextcloud/commands/set_permissions_command.rb:50 block (2 levels) in Storages::Adapters::Providers::Nextcloud::Commands::SetPermissionsCommand#call
modules/storages/app/common/storages/tagged_logging.rb:38 Storages::TaggedLogging#with_tagged_logger
modules/storages/app/common/storages/adapters/providers/nextcloud/commands/set_permissions_command.rb:48 block in Storages::Adapters::Providers::Nextcloud::Commands::SetPermissionsCommand#call
modules/storages/app/common/storages/adapters/authentication_strategies/basic_auth.rb:43 Storages::Adapters::AuthenticationStrategies::BasicAuth#call
modules/storages/app/common/storages/adapters/providers/nextcloud/commands/set_permissions_command.rb:47 Storages::Adapters::Providers::Nextcloud::Commands::SetPermissionsCommand#call
modules/storages/app/services/storages/nextcloud_managed_folder_permissions_service.rb:126 Storages::NextcloudManagedFolderPermissionsService#set_folder_permissions
modules/storages/app/services/storages/nextcloud_managed_folder_permissions_service.rb:68 block in Storages::NextcloudManagedFolderPermissionsService#apply_permissions_to_folders
modules/storages/app/services/storages/nextcloud_managed_folder_permissions_service.rb:67 Storages::NextcloudManagedFolderPermissionsService#apply_permissions_to_folders
modules/storages/app/services/storages/nextcloud_managed_folder_permissions_service.rb:56 block in Storages::NextcloudManagedFolderPermissionsService#call
modules/storages/app/common/storages/tagged_logging.rb:38 Storages::TaggedLogging#with_tagged_logger
modules/storages/app/services/storages/nextcloud_managed_folder_permissions_service.rb:55 Storages::NextcloudManagedFolderPermissionsService#call
modules/storages/app/services/storages/nextcloud_managed_folder_permissions_service.rb:41 Storages::NextcloudManagedFolderPermissionsService.call
modules/storages/app/services/storages/managed_folder_sync_service.rb:69 Storages::ManagedFolderSyncService#apply_permissions_to_folders
modules/storages/app/services/storages/managed_folder_sync_service.rb:50 block in Storages::ManagedFolderSyncService#call
modules/storages/app/common/storages/tagged_logging.rb:38 Storages::TaggedLogging#with_tagged_logger
modules/storages/app/services/storages/managed_folder_sync_service.rb:47 Storages::ManagedFolderSyncService#call
modules/storages/app/services/storages/managed_folder_sync_service.rb:37 Storages::ManagedFolderSyncService.call
modules/storages/app/workers/storages/automatically_managed_storage_sync_job.rb:60 Storages::AutomaticallyManagedStorageSyncJob#perform
app/workers/shared_job_setup.rb:59 block in SharedJobSetup#prepare_job_context
app/workers/shared_job_setup.rb:76 SharedJobSetup#with_clean_request_store
app/workers/shared_job_setup.rb:55 SharedJobSetup#prepare_job_context
vendor/plugins/openproject-multitenancy/app/extenders/workers/delayed_job_extender.rb:19 block in Multitenancy::JobWithSchemaData::ClassMethods#execute
vendor/plugins/openproject-multitenancy/app/extenders/workers/delayed_job_extender.rb:18 Multitenancy::JobWithSchemaData::ClassMethods#execute
```
<br>
### What was wrong
When OpenProject automatically synchronizes project folders with a connected Nextcloud storage, it expects Nextcloud to reply in a specific format. In some configurations — for example when the "OpenProject integration" app is turned off in Nextcloud, or when a proxy in front of Nextcloud returns an error page — Nextcloud replied in a different format. OpenProject couldn't process that reply and the sync stopped with an unclear internal error, leaving the storage in a broken state without a helpful explanation.
<br>
###
###
### What we changed
OpenProject now recognizes these unexpected replies and handles them cleanly instead of failing. Administrators see a clear message ("OpenProject could not process the response received from the Storage Provider…") and the storage's health status reflects the real problem, making it much easier to diagnose.
<br>
### Please note
The minimum supported Nextcloud version is now Nextcloud 30. If a connected Nextcloud is older, the error message now states both the required version and the version that was detected.