summaryrefslogtreecommitdiff
path: root/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs
diff options
context:
space:
mode:
Diffstat (limited to 'priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs')
-rw-r--r--priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs33
1 files changed, 33 insertions, 0 deletions
diff --git a/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs b/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs
new file mode 100644
index 000000000..14e873125
--- /dev/null
+++ b/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs
@@ -0,0 +1,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