dani-garcia / vaultwarden

Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs
GNU Affero General Public License v3.0
34.78k stars 1.69k forks source link

Can't delete Organization when organization_api_key is present #4556

Closed Misterbabou closed 1 month ago

Misterbabou commented 1 month ago

Subject of the issue

Can't delete Organization when organization_api_key is present

Deployment environment

Your environment (Generated via diagnostics page)

Steps to reproduce

log:

vaultwarden   | [2024-05-15 12:45:44.310][request][INFO] DELETE /api/organizations/7a711a73-3cfc-45cd-a4b8-7d5dc5d944b3
vaultwarden    | [2024-05-15 12:45:44.646][error][ERROR] Error saving organization.
vaultwarden    | [CAUSE] DatabaseError(
vaultwarden    |     ForeignKeyViolation,
vaultwarden    |     "Cannot delete or update a parent row: a foreign key constraint fails (`vaultwarden`.`organization_api_key`, CONSTRAINT `organization_api_key_ibfk_1` FOREIGN KEY (`org_uuid`) REFERENCES `organizations` (`uuid`))",
vaultwarden    | )

OR

log

vaultwarden   | [2024-05-15 12:34:40.819][request][INFO] POST /admin/organizations/0df42829-4957-41c3-8c5b-b50396ceeb81/delete
vaultwarden    | [2024-05-15 12:34:40.846][error][ERROR] Error saving organization.
vaultwarden    | [CAUSE] DatabaseError(
vaultwarden    |     ForeignKeyViolation,
vaultwarden    |     "Cannot delete or update a parent row: a foreign key constraint fails (`vaultwarden`.`organization_api_key`, CONSTRAINT `organization_api_key_ibfk_1` FOREIGN KEY (`org_uuid`) REFERENCES `organizations` (`uuid`))",
vaultwarden    | )

Expected behaviour

Organization should be deleted

Actual behaviour

All entries linked to organization are deleted as usual but the organization_api_key is not that's why it can't be deleted.

To manually resolve this issue on Mariadb :

DELETE FROM organization_api_key where organization_api_key.org_uuid="<org_uuid>"

Then Organization Delete is possible

stefan0xC commented 1 month ago

Thanks. This is probably also the cause for #4540.

Misterbabou commented 1 month ago

Thanks for your fix ^^.

I have a question regarding events from table event on organization delete.

For now events linked to the organization are not delete on organization delete. Will it be better to also clean events linked to this organization ?

Equivalent to :

DELETE FROM event where event.org_uuid="<org_uuid>"
BlackDex commented 1 month ago

I would rather not delete events during the deletion of an organizations. The main reason is that it could hold useful information on who deleted the organization for example, and if there were some unwanted actions done.

Logs will be delete automatically if the cleanup job is enabled.