From 2bd6b95a0580967e3d06e685b4819c2836f12b5e Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Thu, 5 Aug 2021 20:09:49 -0400 Subject: [PATCH] Require address verification after one successful verification --- ...add_address_verification_required_field.py | 23 +++++++++++++++++++ server_list/models.py | 5 ++++ server_list/views.py | 4 +++- 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 migrations/versions/d6af394ec1ab_add_address_verification_required_field.py diff --git a/migrations/versions/d6af394ec1ab_add_address_verification_required_field.py b/migrations/versions/d6af394ec1ab_add_address_verification_required_field.py new file mode 100644 index 0000000..0d4380b --- /dev/null +++ b/migrations/versions/d6af394ec1ab_add_address_verification_required_field.py @@ -0,0 +1,23 @@ +"""Add address verification required field + +Revision ID: d6af394ec1ab +Revises: 00ac5d537063 +Create Date: 2021-07-10 +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.sql.expression import text + + +revision = 'd6af394ec1ab' +down_revision = '00ac5d537063' +branch_labels = None +depends_on = None + + +def upgrade(): + op.add_column('server', sa.Column('address_verification_required', sa.Boolean(), nullable=False, server_default=text('0'))) + + +def downgrade(): + op.drop_column('server', 'address_verification_required') diff --git a/server_list/models.py b/server_list/models.py index d55dfb4..8747ad3 100644 --- a/server_list/models.py +++ b/server_list/models.py @@ -102,6 +102,8 @@ class Server(db.Model): rollback_enabled = db.Column(db.Boolean, nullable=False) can_see_far_names = db.Column(db.Boolean, nullable=False) + address_verification_required = db.Column(db.Boolean, nullable=False, default=False) + @staticmethod def find_from_json(obj): try: @@ -194,6 +196,9 @@ class Server(db.Model): self.last_update = now + if obj["address_verified"]: + self.address_verification_required = True + def as_json(self): obj = { "address": self.address, diff --git a/server_list/views.py b/server_list/views.py index 2d38d85..5643ceb 100755 --- a/server_list/views.py +++ b/server_list/views.py @@ -92,13 +92,15 @@ def announce(): if addr_info is None: return f"Failed to resolve server address {obj['address']!r}.", 400 + valid = False if "world_uuid" not in obj: valid = verify_announce(addr_info, obj["address"], obj["ip"]) - if not valid: + if not valid and server and server.address_verification_required: return render_template("address_verification_failed.txt", announce_ip=announce_ip, valid_addresses=[data[4][0] for data in addr_info]), 400 + obj["address_verified"] = valid obj["addr_info"] = addr_info