diff options
| -rw-r--r-- | lib/pleroma/web/o_auth/app.ex | 7 | ||||
| -rw-r--r-- | test/pleroma/web/o_auth/app_test.exs | 11 | 
2 files changed, 14 insertions, 4 deletions
diff --git a/lib/pleroma/web/o_auth/app.ex b/lib/pleroma/web/o_auth/app.ex index 032011433..7661c2566 100644 --- a/lib/pleroma/web/o_auth/app.ex +++ b/lib/pleroma/web/o_auth/app.ex @@ -168,8 +168,13 @@ defmodule Pleroma.Web.OAuth.App do    @spec remove_orphans(pos_integer()) :: :ok    def remove_orphans(limit \\ 100) do +    fifteen_mins_ago = DateTime.add(DateTime.utc_now(), -900, :second) +      Repo.transaction(fn -> -      from(a in __MODULE__, where: is_nil(a.user_id), limit: ^limit) +      from(a in __MODULE__, +        where: is_nil(a.user_id) and a.inserted_at < ^fifteen_mins_ago, +        limit: ^limit +      )        |> Repo.all()        |> Enum.each(&Repo.delete(&1))      end) diff --git a/test/pleroma/web/o_auth/app_test.exs b/test/pleroma/web/o_auth/app_test.exs index 725ea3eb8..44219cf90 100644 --- a/test/pleroma/web/o_auth/app_test.exs +++ b/test/pleroma/web/o_auth/app_test.exs @@ -56,13 +56,18 @@ defmodule Pleroma.Web.OAuth.AppTest do    test "removes orphaned apps" do      attrs = %{client_name: "Mastodon-Local", redirect_uris: "."} +    {:ok, %App{} = old_app} = App.get_or_make(attrs, ["write"]) + +    attrs = %{client_name: "PleromaFE", 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}) +    # backdate the old app so it's within the threshold for being cleaned up +    {:ok, _} = +      "UPDATE apps SET inserted_at = now() - interval '1 hour' WHERE id = #{old_app.id}" +      |> Pleroma.Repo.query()      App.remove_orphans() -    assert nil == Pleroma.Repo.get_by(App, %{id: app.id}) +    assert [app] == Pleroma.Repo.all(App)    end  end  | 
