Skip to content

Admins are unable to delete attachments with links #15993

@entantoencuanto

Description

@entantoencuanto

Describe the bug

The Decidim::Attachment model has:

before_validation :set_link_content_type_and_size, if: :link?

This callback is called when an admin tries to delete an attachment with a link from the admin panel and this generates an exception:

FrozenError (can't modify frozen attributes):

To Reproduce

As admin:

  1. Go to the admin panel and enter in the attachments section of a participatory space
  2. Create an attachment filling the link attribute
  3. Try to delete the attachment

Expected behavior

Admins should be able to delete attachments with links

Screenshots

No response

Stacktrace

FrozenError (can't modify frozen attributes):

activemodel (7.0.8.7) lib/active_model/attribute_set.rb:54:in `write_from_user'
activerecord (7.0.8.7) lib/active_record/attribute_methods/write.rb:42:in `_write_attribute'
activemodel (7.0.8.7) lib/active_model/attribute_methods.rb:271:in `content_type='
decidim (dcc3af067823) decidim-core/app/models/decidim/attachment.rb:119:in `set_link_content_type_and_size'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:400:in `block in make_lambda'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:180:in `block (2 levels) in halting_and_conditional'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:687:in `block (2 levels) in default_terminator'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:686:in `catch'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:686:in `block in default_terminator'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:181:in `block in halting_and_conditional'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:595:in `block in invoke_before'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:595:in `each'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:595:in `invoke_before'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:106:in `run_callbacks'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:929:in `_run_validation_callbacks'
activemodel (7.0.8.7) lib/active_model/validations/callbacks.rb:115:in `run_validations!'
activemodel (7.0.8.7) lib/active_model/validations.rb:337:in `valid?'
activerecord (7.0.8.7) lib/active_record/validations.rb:68:in `valid?'
decidim (dcc3af067823) decidim-core/app/services/decidim/traceability.rb:121:in `log'
decidim (dcc3af067823) decidim-core/app/services/decidim/traceability.rb:66:in `block (2 levels) in perform_action!'
activerecord (7.0.8.7) lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction'
activesupport (7.0.8.7) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport (7.0.8.7) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
activesupport (7.0.8.7) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport (7.0.8.7) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
activerecord (7.0.8.7) lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction'
activerecord (7.0.8.7) lib/active_record/connection_adapters/abstract/database_statements.rb:316:in `transaction'
activerecord (7.0.8.7) lib/active_record/transactions.rb:209:in `transaction'
decidim (dcc3af067823) decidim-core/app/services/decidim/traceability.rb:63:in `block in perform_action!'
paper_trail (12.3.0) lib/paper_trail/request.rb:107:in `with'
paper_trail (12.3.0) lib/paper_trail.rb:77:in `request'
decidim (dcc3af067823) decidim-core/app/services/decidim/traceability.rb:62:in `perform_action!'
decidim (dcc3af067823) decidim-admin/app/controllers/decidim/admin/concerns/has_attachments.rb:76:in `destroy'
actionpack (7.0.8.7) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (7.0.8.7) lib/abstract_controller/base.rb:215:in `process_action'
actionpack (7.0.8.7) lib/action_controller/metal/rendering.rb:165:in `process_action'
actionpack (7.0.8.7) lib/abstract_controller/callbacks.rb:234:in `block in process_action'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:118:in `block in run_callbacks'
activesupport (7.0.8.7) lib/active_support/core_ext/time/zones.rb:65:in `use_zone'
decidim (dcc3af067823) decidim-core/app/controllers/concerns/decidim/use_organization_time_zone.rb:21:in `use_organization_time_zone'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
i18n (1.14.7) lib/i18n.rb:353:in `with_locale'
decidim (dcc3af067823) decidim-core/app/controllers/concerns/decidim/locale_switcher.rb:24:in `switch_locale'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:138:in `run_callbacks'
actionpack (7.0.8.7) lib/abstract_controller/callbacks.rb:233:in `process_action'
actionpack (7.0.8.7) lib/action_controller/metal/rescue.rb:23:in `process_action'
actionpack (7.0.8.7) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'
activesupport (7.0.8.7) lib/active_support/notifications.rb:206:in `block in instrument'
activesupport (7.0.8.7) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (7.0.8.7) lib/active_support/notifications.rb:206:in `instrument'
actionpack (7.0.8.7) lib/action_controller/metal/instrumentation.rb:66:in `process_action'
actionpack (7.0.8.7) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord (7.0.8.7) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (7.0.8.7) lib/abstract_controller/base.rb:151:in `process'
actionview (7.0.8.7) lib/action_view/rendering.rb:39:in `process'
actionpack (7.0.8.7) lib/action_controller/metal.rb:188:in `dispatch'
actionpack (7.0.8.7) lib/action_controller/metal.rb:251:in `dispatch'
actionpack (7.0.8.7) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack (7.0.8.7) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (7.0.8.7) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (7.0.8.7) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (7.0.8.7) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (7.0.8.7) lib/action_dispatch/routing/route_set.rb:852:in `call'
railties (7.0.8.7) lib/rails/engine.rb:530:in `call'
railties (7.0.8.7) lib/rails/railtie.rb:226:in `public_send'
railties (7.0.8.7) lib/rails/railtie.rb:226:in `method_missing'
actionpack (7.0.8.7) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack (7.0.8.7) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (7.0.8.7) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (7.0.8.7) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (7.0.8.7) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (7.0.8.7) lib/action_dispatch/routing/route_set.rb:852:in `call'
railties (7.0.8.7) lib/rails/engine.rb:530:in `call'
railties (7.0.8.7) lib/rails/railtie.rb:226:in `public_send'
railties (7.0.8.7) lib/rails/railtie.rb:226:in `method_missing'
actionpack (7.0.8.7) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack (7.0.8.7) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (7.0.8.7) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (7.0.8.7) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (7.0.8.7) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (7.0.8.7) lib/action_dispatch/routing/route_set.rb:852:in `call'
railties (7.0.8.7) lib/rails/engine.rb:530:in `call'
railties (7.0.8.7) lib/rails/railtie.rb:226:in `public_send'
railties (7.0.8.7) lib/rails/railtie.rb:226:in `method_missing'
actionpack (7.0.8.7) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack (7.0.8.7) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (7.0.8.7) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (7.0.8.7) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (7.0.8.7) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (7.0.8.7) lib/action_dispatch/routing/route_set.rb:852:in `call'
batch-loader (1.5.0) lib/batch_loader/middleware.rb:11:in `call'
rack-attack (6.7.0) lib/rack/attack.rb:127:in `call'
omniauth (2.1.3) lib/omniauth/strategy.rb:202:in `call!'
omniauth (2.1.3) lib/omniauth/strategy.rb:169:in `call'
omniauth (2.1.3) lib/omniauth/strategy.rb:202:in `call!'
omniauth (2.1.3) lib/omniauth/strategy.rb:169:in `call'
omniauth (2.1.3) lib/omniauth/strategy.rb:202:in `call!'
omniauth (2.1.3) lib/omniauth/strategy.rb:169:in `call'
omniauth (2.1.3) lib/omniauth/builder.rb:44:in `call'
warden (1.2.9) lib/warden/manager.rb:36:in `block in call'
warden (1.2.9) lib/warden/manager.rb:34:in `catch'
warden (1.2.9) lib/warden/manager.rb:34:in `call'
decidim (dcc3af067823) decidim-core/lib/decidim/middleware/strip_x_forwarded_host.rb:12:in `call'
decidim-module-decidim_awesome (56614fa699f7) lib/decidim/decidim_awesome/middleware/current_config.rb:33:in `call'
decidim (dcc3af067823) decidim-core/lib/decidim/middleware/current_organization.rb:22:in `call'
rack (2.2.14) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.14) lib/rack/etag.rb:27:in `call'
rack (2.2.14) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.14) lib/rack/head.rb:12:in `call'
actionpack (7.0.8.7) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
actionpack (7.0.8.7) lib/action_dispatch/http/content_security_policy.rb:39:in `call'
rack (2.2.14) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.14) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (7.0.8.7) lib/action_dispatch/middleware/cookies.rb:704:in `call'
actionpack (7.0.8.7) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (7.0.8.7) lib/active_support/callbacks.rb:99:in `run_callbacks'
actionpack (7.0.8.7) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (7.0.8.7) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
actionpack (7.0.8.7) lib/action_dispatch/middleware/show_exceptions.rb:29:in `call'
railties (7.0.8.7) lib/rails/rack/logger.rb:40:in `call_app'
railties (7.0.8.7) lib/rails/rack/logger.rb:25:in `block in call'
activesupport (7.0.8.7) lib/active_support/tagged_logging.rb:99:in `block in tagged'
activesupport (7.0.8.7) lib/active_support/tagged_logging.rb:37:in `tagged'
activesupport (7.0.8.7) lib/active_support/tagged_logging.rb:99:in `tagged'
railties (7.0.8.7) lib/rails/rack/logger.rb:25:in `call'
actionpack (7.0.8.7) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
request_store (1.5.1) lib/request_store/middleware.rb:19:in `call'
actionpack (7.0.8.7) lib/action_dispatch/middleware/request_id.rb:26:in `call'
rack (2.2.14) lib/rack/method_override.rb:24:in `call'
actionpack (7.0.8.7) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.14) lib/rack/sendfile.rb:110:in `call'
actionpack (7.0.8.7) lib/action_dispatch/middleware/host_authorization.rb:131:in `call'
rack-cors (1.1.1) lib/rack/cors.rb:100:in `call'
railties (7.0.8.7) lib/rails/engine.rb:530:in `call'
/usr/lib/ruby/vendor_ruby/phusion_passenger/rack/thread_handler_extension.rb:107:in `process_request'
/usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:157:in `accept_and_process_next_request'
/usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:110:in `main_loop'
/usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler.rb:419:in `block (3 levels) in start_threads'
/usr/lib/ruby/vendor_ruby/phusion_passenger/utils.rb:113:in `block in create_thread_and_abort_on_exception'

Extra data

  • Device:
  • Device OS:
  • Browser: Chrome
  • Decidim Version: This error has been detected in a 0.29 version of Decidim, but the issue seems to remain in develop.
  • Decidim installation:

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions