Skip to content

Clean up DAST site tokens when site deleted

What does this MR do and why?

this merge request ensures that dast_site_tokens and dast_site_validations are removed when dast_sites are deleted. this is necessary to avoid leaving orphaned dast_site_validations.

Related Issue(s)

Failed DAST site validations remain after deleting site profiles

Screenshots

example

How to set up and validate locally

  1. start a rails console.

  2. create some records.

dast_site = DastSite.create!(project: Project.last, url: 'https://example.com')
dast_site_token = DastSiteToken.create!(project: Project.last, url: dast_site.url, token: SecureRandom.uuid)

100.times { DastSiteValidation.create!(dast_site_token: dast_site_token, validation_strategy: :text_file, url_path: '/some_path') }
  1. delete the the record and check the counts.
DastSiteValidation.count
DastSiteToken.count

dast_site.destroy!
# TRANSACTION (0.2ms)  BEGIN /*application:console,db_config_name:main,line:/lib/gitlab/database/load_balancing/connection_proxy.rb:119:in `block in write_using_load_balancer'*/
# DastSite Destroy (1.1ms)  DELETE FROM "dast_sites" WHERE "dast_sites"."id" = 32 /*application:console,db_config_name:main,line:/lib/gitlab/database/load_balancing/connection_proxy.rb:119:in `block in write_using_load_balancer'*/
# DastSiteToken Destroy (2.2ms)  DELETE FROM "dast_site_tokens" WHERE "dast_site_tokens"."project_id" = 21 AND "dast_site_tokens"."url" = 'https://example.com' /*application:console,db_config_name:main,line:/lib/gitlab/database/load_balancing/connection_proxy.rb:119:in `block in write_using_load_balancer'*/
# TRANSACTION (0.7ms)  COMMIT /*application:console,db_config_name:main,line:/lib/gitlab/database.rb:287:in `commit'*/

DastSiteValidation.count
DastSiteToken.count

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Philip Cunningham

Merge request reports