34 lines
863 B
Elixir
34 lines
863 B
Elixir
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
|