From a8de369edf56c87ec68c15a981250d08d250a93f Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sat, 25 Jun 2022 03:44:25 +0100 Subject: [PATCH] Disallow "_game" as a package name --- app/blueprints/packages/packages.py | 4 ++++ app/models/packages.py | 2 +- migrations/versions/6e59ad5cc62a_.py | 26 ++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 migrations/versions/6e59ad5cc62a_.py diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index 990ac60..d7f1c5d 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -249,6 +249,10 @@ class PackageForm(FlaskForm): submit = SubmitField(lazy_gettext("Save")) + def validate_name(form, field): + if field.data == "_game": + raise ValidationError(lazy_gettext("_game is not an allowed name")) + def handle_create_edit(package: typing.Optional[Package], form: PackageForm, author: User): wasNew = False diff --git a/app/models/packages.py b/app/models/packages.py index 7f31734..55656e5 100644 --- a/app/models/packages.py +++ b/app/models/packages.py @@ -382,7 +382,7 @@ class Package(db.Model): created_at = db.Column(db.DateTime, nullable=False, default=datetime.datetime.utcnow) approved_at = db.Column(db.DateTime, nullable=True, default=None) - name_valid = db.CheckConstraint("name ~* '^[a-z0-9_]+$'") + name_valid = db.CheckConstraint("name ~* '^[a-z0-9_]+$' AND name != '_game'") search_vector = db.Column(TSVectorType("name", "title", "short_desc", "desc", weights={ "name": "A", "title": "B", "short_desc": "C", "desc": "D" })) diff --git a/migrations/versions/6e59ad5cc62a_.py b/migrations/versions/6e59ad5cc62a_.py new file mode 100644 index 0000000..8c1f4cc --- /dev/null +++ b/migrations/versions/6e59ad5cc62a_.py @@ -0,0 +1,26 @@ +"""empty message + +Revision ID: 6e59ad5cc62a +Revises: 8425c06b7d77 +Create Date: 2022-06-25 02:39:15.959553 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision = '6e59ad5cc62a' +down_revision = '8425c06b7d77' +branch_labels = None +depends_on = None + + +def upgrade(): + op.drop_constraint("name_valid", "package", type_="check") + op.create_check_constraint("name_valid", "package", "name ~* '^[a-z0-9_]+$' AND name != '_game'") + + +def downgrade(): + op.drop_constraint("name_valid", "package", type_="check") + op.create_check_constraint("name_valid", "package", "name ~* '^[a-z0-9_]+$'")