Skip to content

Commit

Permalink
Add worker to config
Browse files Browse the repository at this point in the history
  • Loading branch information
ukutaht committed Dec 11, 2020
1 parent 00990bf commit 9811ca1
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 2 deletions.
7 changes: 5 additions & 2 deletions config/config.exs
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,9 @@ extra_cron = [
# Daily at midday
{"0 12 * * *", Plausible.Workers.SendCheckStatsEmails},
# Every 10 minutes
{"*/10 * * * *", Plausible.Workers.ProvisionSslCertificates}
{"*/10 * * * *", Plausible.Workers.ProvisionSslCertificates},
# Every day at midnight
{"0 0 * * *", Plausible.Workers.CleanEmailVerificationCodes}
]

base_queues = [rotate_salts: 1]
Expand All @@ -130,7 +132,8 @@ extra_queues = [
site_setup_emails: 1,
trial_notification_emails: 1,
schedule_email_reports: 1,
send_email_reports: 1
send_email_reports: 1,
clean_email_verification_codes: 1
]

config :plausible, Oban,
Expand Down
6 changes: 6 additions & 0 deletions lib/plausible_web/controllers/site_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,14 @@ defmodule PlausibleWeb.SiteController do
|> redirect(to: "/#{URI.encode_www_form(site.domain)}/snippet")

{:error, :site, changeset, _} ->
is_first_site = !Repo.exists?(
from sm in Plausible.Site.Membership,
where: sm.user_id == ^user.id
)

render(conn, "new.html",
changeset: changeset,
is_first_site: is_first_site,
layout: {PlausibleWeb.LayoutView, "focus.html"}
)
end
Expand Down
15 changes: 15 additions & 0 deletions lib/workers/clean_email_verification_codes.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
defmodule Plausible.Workers.CleanEmailVerificationCodes do
use Plausible.Repo
use Oban.Worker, queue: :clean_email_verification_codes

@impl Oban.Worker
def perform(_args, _job) do
Repo.update_all(
from(c in "email_verification_codes",
where: not is_nil(c.user_id),
where: c.issued_at < fragment("now() - INTERVAL '4 hours'")
),
[set: [user_id: nil]]
)
end
end
28 changes: 28 additions & 0 deletions test/workers/clean_email_verification_codes_test.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
defmodule Plausible.Workers.CleanEmailVerificationCodesTest do
use Plausible.DataCase
alias Plausible.Workers.CleanEmailVerificationCodes

defp issue_code(user, issued_at) do
code = Repo.one(from(c in "email_verification_codes", where: is_nil(c.user_id), select: c.code, limit: 1))
Repo.update_all(from(c in "email_verification_codes", where: c.code == ^code), [set: [user_id: user.id, issued_at: issued_at]])
end

test "cleans codes that are more than 4 hours old" do
user = insert(:user)
issue_code(user, Timex.now() |> Timex.shift(hours: -5))
issue_code(user, Timex.now() |> Timex.shift(days: -5))

CleanEmailVerificationCodes.perform(nil, nil)

refute Repo.exists?(from c in "email_verification_codes", where: c.user_id == ^user.id)
end

test "does not clean code from 2 hours ago" do
user = insert(:user)
issue_code(user, Timex.now() |> Timex.shift(hours: -2))

CleanEmailVerificationCodes.perform(nil, nil)

assert Repo.exists?(from c in "email_verification_codes", where: c.user_id == ^user.id)
end
end

0 comments on commit 9811ca1

Please sign in to comment.