Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

34 lines
863B

  1. defmodule Pleroma.Repo.Migrations.AddRecipientsContainBlockedDomainsFunction do
  2. use Ecto.Migration
  3. @disable_ddl_transaction true
  4. def up do
  5. statement = """
  6. CREATE OR REPLACE FUNCTION recipients_contain_blocked_domains(recipients varchar[], blocked_domains varchar[]) RETURNS boolean AS $$
  7. DECLARE
  8. recipient_domain varchar;
  9. recipient varchar;
  10. BEGIN
  11. FOREACH recipient IN ARRAY recipients LOOP
  12. recipient_domain = split_part(recipient, '/', 3)::varchar;
  13. IF recipient_domain = ANY(blocked_domains) THEN
  14. RETURN TRUE;
  15. END IF;
  16. END LOOP;
  17. RETURN FALSE;
  18. END;
  19. $$ LANGUAGE plpgsql;
  20. """
  21. execute(statement)
  22. end
  23. def down do
  24. execute(
  25. "drop function if exists recipients_contain_blocked_domains(recipients varchar[], blocked_domains varchar[])"
  26. )
  27. end
  28. end