summaryrefslogtreecommitdiff
path: root/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs
blob: 14e873125fb950084538041b53b4f800da1d49d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
defmodule Pleroma.Repo.Migrations.AddRecipientsContainBlockedDomainsFunction do
  use Ecto.Migration
  @disable_ddl_transaction true

  def up do
    statement = """
    CREATE OR REPLACE FUNCTION recipients_contain_blocked_domains(recipients varchar[], blocked_domains varchar[]) RETURNS boolean AS $$
    DECLARE
      recipient_domain varchar;
      recipient varchar;
    BEGIN
      FOREACH recipient IN ARRAY recipients LOOP
        recipient_domain = split_part(recipient, '/', 3)::varchar;

        IF recipient_domain = ANY(blocked_domains) THEN
          RETURN TRUE;
        END IF;
      END LOOP;

      RETURN FALSE;
    END;
    $$ LANGUAGE plpgsql;
    """

    execute(statement)
  end

  def down do
    execute(
      "drop function if exists recipients_contain_blocked_domains(recipients varchar[], blocked_domains varchar[])"
    )
  end
end