add license boilerplate to pleroma core
[akkoma] / lib / pleroma / captcha / captcha.ex
index df33406ee7777f0235ee34db0ffd60293d6b8848..f80946c8bb5dd27abaf075652fdcb608d1005bb5 100644 (file)
@@ -1,3 +1,7 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
 defmodule Pleroma.Captcha do
   use GenServer
 
@@ -14,6 +18,10 @@ defmodule Pleroma.Captcha do
     ets_name = Module.concat(method(), Ets)
     ^ets_name = :ets.new(Module.concat(method(), Ets), @ets_options)
 
+    # Clean up old captchas every few minutes
+    seconds_retained = Pleroma.Config.get!([__MODULE__, :seconds_retained])
+    Process.send_after(self(), :cleanup, 1000 * seconds_retained)
+
     {:ok, nil}
   end
 
@@ -47,5 +55,16 @@ defmodule Pleroma.Captcha do
     {:reply, method().validate(token, captcha), state}
   end
 
+  @doc false
+  def handle_info(:cleanup, state) do
+    :ok = method().cleanup()
+
+    seconds_retained = Pleroma.Config.get!([__MODULE__, :seconds_retained])
+    # Schedule the next clenup
+    Process.send_after(self(), :cleanup, 1000 * seconds_retained)
+
+    {:noreply, state}
+  end
+
   defp method, do: Pleroma.Config.get!([__MODULE__, :method])
 end