aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api
diff options
context:
space:
mode:
authorGravatar mbaruh <[email protected]>2022-03-10 20:56:47 +0200
committerGravatar mbaruh <[email protected]>2022-03-10 20:56:47 +0200
commit05e2bce1e82e422755396d1e6e489d6792ec0115 (patch)
treea5ea3989d6c1cd8ab7faa3cc9e0aba699ce60c3b /pydis_site/apps/api
parentChange ping fields names (diff)
Remove role validation
Roles can be either IDs or names, so the current validation is not relevant anymore. Furthermore the ping fields can accept user IDs or names.
Diffstat (limited to 'pydis_site/apps/api')
-rw-r--r--pydis_site/apps/api/migrations/0079_new_filter_schema.py12
-rw-r--r--pydis_site/apps/api/models/bot/filters.py32
-rw-r--r--pydis_site/apps/api/tests/test_filters.py11
3 files changed, 6 insertions, 49 deletions
diff --git a/pydis_site/apps/api/migrations/0079_new_filter_schema.py b/pydis_site/apps/api/migrations/0079_new_filter_schema.py
index b67740d2..053f9782 100644
--- a/pydis_site/apps/api/migrations/0079_new_filter_schema.py
+++ b/pydis_site/apps/api/migrations/0079_new_filter_schema.py
@@ -97,11 +97,11 @@ class Migration(migrations.Migration):
('content', models.CharField(help_text='The definition of this filter.', max_length=100)),
('description', models.CharField(help_text='Why this filter has been added.', max_length=200, null=True)),
('additional_field', django.contrib.postgres.fields.jsonb.JSONField(help_text='Implementation specific field.', null=True)),
- ('guild_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers.', size=None, validators=[pydis_site.apps.api.models.bot.filters.validate_ping_field], null=True)),
+ ('guild_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers.', size=None, null=True)),
('filter_dm', models.BooleanField(help_text='Whether DMs should be filtered.', null=True)),
- ('dm_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers on a DM.', size=None, validators=[pydis_site.apps.api.models.bot.filters.validate_ping_field], null=True)),
+ ('dm_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers on a DM.', size=None, null=True)),
('delete_messages', models.BooleanField(help_text='Whether this filter should delete messages triggering it.', null=True)),
- ('bypass_roles', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Roles and users who can bypass this filter.', size=None, validators=[pydis_site.apps.api.models.bot.filters.validate_bypass_roles_field], null=True)),
+ ('bypass_roles', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Roles and users who can bypass this filter.', size=None, null=True)),
('enabled', models.BooleanField(help_text='Whether this filter is currently enabled.', null=True)),
('dm_content', models.CharField(help_text='The DM to send to a user triggering this filter.', max_length=1000, null=True)),
('dm_embed', models.CharField(help_text='The content of the DM embed', max_length=2000, null=True)),
@@ -120,11 +120,11 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(help_text='The unique name of this list.', max_length=50)),
('list_type', models.IntegerField(choices=[(1, 'Allow'), (0, 'Deny')], help_text='Whether this list is an allowlist or denylist')),
- ('guild_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers.', size=None, validators=[pydis_site.apps.api.models.bot.filters.validate_ping_field])),
+ ('guild_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers.', size=None)),
('filter_dm', models.BooleanField(help_text='Whether DMs should be filtered.')),
- ('dm_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers on a DM.', size=None, validators=[pydis_site.apps.api.models.bot.filters.validate_ping_field])),
+ ('dm_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers on a DM.', size=None)),
('delete_messages', models.BooleanField(help_text='Whether this filter should delete messages triggering it.')),
- ('bypass_roles', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Roles and users who can bypass this filter.', size=None, validators=[pydis_site.apps.api.models.bot.filters.validate_bypass_roles_field])),
+ ('bypass_roles', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Roles and users who can bypass this filter.', size=None)),
('enabled', models.BooleanField(help_text='Whether this filter is currently enabled.')),
('dm_content', models.CharField(help_text='The DM to send to a user triggering this filter.', max_length=1000, null=True)),
('dm_embed', models.CharField(help_text='The content of the DM embed', max_length=2000, null=True)),
diff --git a/pydis_site/apps/api/models/bot/filters.py b/pydis_site/apps/api/models/bot/filters.py
index 4dbf1875..13b332d2 100644
--- a/pydis_site/apps/api/models/bot/filters.py
+++ b/pydis_site/apps/api/models/bot/filters.py
@@ -16,32 +16,6 @@ class FilterListType(models.IntegerChoices):
DENY = 0
-# Valid special values in ping related fields
-VALID_PINGS = ("everyone", "here", "moderators", "onduty", "admins")
-VALID_BYPASS_ROLES = ("staff",)
-
-
-def validate_ping_field(value_list: List[str]) -> None:
- """Validate that the values are either a special value or a UID."""
- for value in value_list:
- # Check if it is a special value
- if value in VALID_PINGS:
- continue
- # Check if it is a UID
- if value.isnumeric():
- continue
-
- raise ValidationError(f"{value!r} isn't a valid ping type.")
-
-
-def validate_bypass_roles_field(value_list: List[str]) -> None:
- """Validate that the vclues are either a special value or a Role ID."""
- for value in value_list:
- if value.isnumeric() or value in VALID_BYPASS_ROLES:
- continue
- raise ValidationError(f"{value!r} isn't a valid (bypass) role.")
-
-
class FilterSettingsMixin(models.Model):
"""Mixin for common settings of a filters and filter lists."""
@@ -86,14 +60,12 @@ class FilterList(FilterSettingsMixin):
)
guild_pings = ArrayField(
models.CharField(max_length=20),
- validators=(validate_ping_field,),
help_text="Who to ping when this filter triggers.",
null=False
)
filter_dm = models.BooleanField(help_text="Whether DMs should be filtered.", null=False)
dm_pings = ArrayField(
models.CharField(max_length=20),
- validators=(validate_ping_field,),
help_text="Who to ping when this filter triggers on a DM.",
null=False
)
@@ -104,7 +76,6 @@ class FilterList(FilterSettingsMixin):
bypass_roles = ArrayField(
models.CharField(max_length=100),
help_text="Roles and users who can bypass this filter.",
- validators=(validate_bypass_roles_field,),
null=False
)
enabled = models.BooleanField(
@@ -149,14 +120,12 @@ class Filter(FilterSettingsMixin):
)
guild_pings = ArrayField(
models.CharField(max_length=20),
- validators=(validate_ping_field,),
help_text="Who to ping when this filter triggers.",
null=True
)
filter_dm = models.BooleanField(help_text="Whether DMs should be filtered.", null=True)
dm_pings = ArrayField(
models.CharField(max_length=20),
- validators=(validate_ping_field,),
help_text="Who to ping when this filter triggers on a DM.",
null=True
)
@@ -167,7 +136,6 @@ class Filter(FilterSettingsMixin):
bypass_roles = ArrayField(
models.CharField(max_length=100),
help_text="Roles and users who can bypass this filter.",
- validators=(validate_bypass_roles_field,),
null=True
)
enabled = models.BooleanField(
diff --git a/pydis_site/apps/api/tests/test_filters.py b/pydis_site/apps/api/tests/test_filters.py
index f694053d..5f40c6f9 100644
--- a/pydis_site/apps/api/tests/test_filters.py
+++ b/pydis_site/apps/api/tests/test_filters.py
@@ -296,14 +296,3 @@ class GenericFilterTest(APISubdomainTestCase):
response = self.client.delete(f"{sequence.url()}/42")
self.assertEqual(response.status_code, 404)
-
- def test_reject_invalid_ping(self) -> None:
- url = reverse('bot:filteroverride-list', host='api')
- data = {
- "ping_type": ["invalid"]
- }
-
- response = self.client.post(url, data=data)
-
- self.assertEqual(response.status_code, 400)
- self.assertDictEqual(response.json(), {'ping_type': ["'invalid' isn't a valid ping type."]})