token = json_resp["token"]
- true = :ets.insert(@ets, {token, json_resp["md5"], DateTime.now_utc()})
+ true =
+ :ets.insert(
+ @ets,
+ {token, json_resp["md5"], DateTime.now_utc() |> DateTime.Format.unix()}
+ )
%{type: :kocaptcha, token: token, url: endpoint <> json_resp["url"]}
end
@impl Service
def cleanup() do
seconds_retained = Pleroma.Config.get!([Pleroma.Captcha, :seconds_retained])
+ # If the time in ETS is less than current_time - seconds_retained, then the time has
+ # already passed
+ delete_after =
+ DateTime.subtract!(DateTime.now_utc(), seconds_retained) |> DateTime.Format.unix()
- # Go through captchas and remove expired ones
- :ets.tab2list(@ets)
- |> Enum.each(fn {token, _, time_inserted} ->
- # time created + expiration time = time when the captcha should be removed
- remove_time = DateTime.add!(time_inserted, seconds_retained)
- if DateTime.after?(DateTime.now_utc(), remove_time), do: :ets.delete(@ets, token)
- end)
+ :ets.select_delete(
+ @ets,
+ [
+ {
+ {:_, :_, :"$1"},
+ [{:<, :"$1", {:const, delete_after}}],
+ [true]
+ }
+ ]
+ )
:ok
end