diff --git a/lib/plausible_web/controllers/auth_controller.ex b/lib/plausible_web/controllers/auth_controller.ex index 1a9556bcca0b33714b44027dc5f504395bc5d03b..90ba33278ff0831dee90dacb0fe4bdf84c4803c8 100644 --- a/lib/plausible_web/controllers/auth_controller.ex +++ b/lib/plausible_web/controllers/auth_controller.ex @@ -482,11 +482,15 @@ defmodule PlausibleWeb.AuthController do def delete_me(conn, params) do user = conn.assigns[:current_user] - |> Repo.preload(:sites) + |> Repo.preload(site_memberships: :site) |> Repo.preload(:subscription) - for site <- user.sites do - Repo.delete!(site) + for membership <- user.site_memberships do + Repo.delete!(membership) + + if membership.role == :owner do + Repo.delete!(membership.site) + end end if user.subscription, do: Repo.delete!(user.subscription) diff --git a/lib/plausible_web/templates/auth/user_settings.html.eex b/lib/plausible_web/templates/auth/user_settings.html.eex index 6a9a38fea9dd14e682945a466d175fd49b2f1270..16e1c4b36fceb4ec26bc4d18559fb1c1fad66c9a 100644 --- a/lib/plausible_web/templates/auth/user_settings.html.eex +++ b/lib/plausible_web/templates/auth/user_settings.html.eex @@ -226,6 +226,6 @@ <span class="mt-6 bg-gray-300 button dark:bg-gray-800 hover:shadow-none">Delete my account</span> <p class="mt-2 text-sm text-gray-600 dark:text-gray-400">Your account cannot be deleted because you have an active subscription. If you want to delete your account, please cancel your subscription first.</p> <% else %> - <%= link("Delete my account", to: "/me", class: "inline-block mt-4 px-4 py-2 border border-gray-300 dark:border-gray-500 text-sm leading-5 font-medium rounded-md text-red-700 bg-white dark:bg-gray-800 hover:text-red-500 dark:hover:text-red-400 focus:outline-none focus:border-blue-300 focus:ring active:text-red-800 active:bg-gray-50 transition ease-in-out duration-150", method: "delete", data: [confirm: "Deleting your account cannot be reversed. Are you sure?"]) %> + <%= link("Delete my account", to: "/me", class: "inline-block mt-4 px-4 py-2 border border-gray-300 dark:border-gray-500 text-sm leading-5 font-medium rounded-md text-red-700 bg-white dark:bg-gray-800 hover:text-red-500 dark:hover:text-red-400 focus:outline-none focus:border-blue-300 focus:ring active:text-red-800 active:bg-gray-50 transition ease-in-out duration-150", method: "delete", data: [confirm: "Deleting your account will also delete all the sites that you own. This action cannot be reversed. Are you sure?"]) %> <% end %> </div> diff --git a/test/plausible_web/controllers/auth_controller_test.exs b/test/plausible_web/controllers/auth_controller_test.exs index b93ed8a19cbb622ad86583d3facb060a83190d50..cb44b32b9a9817e38510809f175fa5119fe2fa9f 100644 --- a/test/plausible_web/controllers/auth_controller_test.exs +++ b/test/plausible_web/controllers/auth_controller_test.exs @@ -368,5 +368,15 @@ defmodule PlausibleWeb.AuthControllerTest do conn = delete(conn, "/me") assert redirected_to(conn) == "/" end + + test "deletes sites that the user owns", %{conn: conn, user: user, site: owner_site} do + viewer_site = insert(:site) + insert(:site_membership, site: viewer_site, user: user, role: "viewer") + + delete(conn, "/me") + + assert Repo.get(Plausible.Site, viewer_site.id) + refute Repo.get(Plausible.Site, owner_site.id) + end end end