aboutsummaryrefslogtreecommitdiff
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.exs37
1 files changed, 37 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 0000000..b63ade5
--- /dev/null
+++ b/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs
@@ -0,0 +1,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