summaryrefslogtreecommitdiff
path: root/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs
blob: b63ade558c90648a7f9b4c2e1ddc3a9fcc1cce81 (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
34
35
36
37
# Pleroma: A lightweight social networking server
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

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