Add Cron worker to clean up orphaned apps hourly

This commit is contained in:
Mark Felder 2024-09-04 10:59:58 -04:00
parent 7bd0750787
commit a1951f3af7
4 changed files with 41 additions and 1 deletions

View file

@ -597,7 +597,8 @@ config :pleroma, Oban,
plugins: [{Oban.Plugins.Pruner, max_age: 900}], plugins: [{Oban.Plugins.Pruner, max_age: 900}],
crontab: [ crontab: [
{"0 0 * * 0", Pleroma.Workers.Cron.DigestEmailsWorker}, {"0 0 * * 0", Pleroma.Workers.Cron.DigestEmailsWorker},
{"0 0 * * *", Pleroma.Workers.Cron.NewUsersDigestWorker} {"0 0 * * *", Pleroma.Workers.Cron.NewUsersDigestWorker},
{"0 0 * * *", Pleroma.Workers.Cron.AppCleanupWorker}
] ]
config :pleroma, Pleroma.Formatter, config :pleroma, Pleroma.Formatter,

View file

@ -165,4 +165,10 @@ defmodule Pleroma.Web.OAuth.App do
end end
def maybe_update_owner(_), do: :ok def maybe_update_owner(_), do: :ok
@spec remove_orphans() :: :ok
def remove_orphans() do
from(a in __MODULE__, where: is_nil(a.user_id))
|> Repo.delete_all()
end
end end

View file

@ -0,0 +1,21 @@
# Pleroma: A lightweight social networking server
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Workers.Cron.AppCleanupWorker do
@moduledoc """
Cleans up registered apps that were never associated with a user.
"""
use Oban.Worker, queue: "background"
alias Pleroma.Web.OAuth.App
@impl true
def perform(_job) do
App.remove_orphans()
end
@impl true
def timeout(_job), do: :timer.seconds(30)
end

View file

@ -53,4 +53,16 @@ defmodule Pleroma.Web.OAuth.AppTest do
assert Enum.sort(App.get_user_apps(user)) == Enum.sort(apps) assert Enum.sort(App.get_user_apps(user)) == Enum.sort(apps)
end end
test "removes orphaned apps" do
attrs = %{client_name: "Mastodon-Local", redirect_uris: "."}
{:ok, %App{} = app} = App.get_or_make(attrs, ["write"])
assert app.scopes == ["write"]
assert app == Pleroma.Repo.get_by(App, %{id: app.id})
App.remove_orphans()
assert nil == Pleroma.Repo.get_by(App, %{id: app.id})
end
end end