From 977fa95ff206b55c83af1254dc8774ff3aa2ded8 Mon Sep 17 00:00:00 2001 From: Luna Date: Wed, 13 Mar 2019 05:07:10 -0300 Subject: [PATCH] admin_api.features: delete vanity invites when guild loses feature - guilds: make _vanity_inv -> vanity_invite exportable function --- litecord/blueprints/admin_api/features.py | 14 ++++++++++++++ litecord/blueprints/guilds.py | 7 ++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/litecord/blueprints/admin_api/features.py b/litecord/blueprints/admin_api/features.py index 980016a..08898a6 100644 --- a/litecord/blueprints/admin_api/features.py +++ b/litecord/blueprints/admin_api/features.py @@ -23,6 +23,7 @@ from quart import Blueprint, current_app as app, jsonify, request from litecord.auth import admin_check from litecord.errors import BadRequest from litecord.schemas import validate, FEATURES +from litecord.blueprints.guilds import vanity_invite bp = Blueprint('features_admin', __name__) @@ -39,6 +40,19 @@ async def _features(guild_id: int): async def _update_features(guild_id: int, features: list): + if 'VANITY_URL' not in features: + existing_inv = await vanity_invite(guild_id) + + await app.db.execute(""" + DELETE FROM vanity_invites + WHERE guild_id = $1 + """, guild_id) + + await app.db.execute(""" + DELETE FROM invites + WHERE code = $1 + """, existing_inv) + await app.db.execute(""" UPDATE guilds SET features = $1 diff --git a/litecord/blueprints/guilds.py b/litecord/blueprints/guilds.py index 4c94953..29a479e 100644 --- a/litecord/blueprints/guilds.py +++ b/litecord/blueprints/guilds.py @@ -376,7 +376,8 @@ async def ack_guild(guild_id): return '', 204 -async def _vanity_inv(guild_id) -> Optional[str]: +async def vanity_invite(guild_id: int) -> Optional[str]: + """Get the vanity invite for a guild.""" return await app.db.fetchval(""" SELECT code FROM vanity_invites WHERE guild_id = $1 @@ -389,7 +390,7 @@ async def get_vanity_url(guild_id: int): user_id = await token_check() await guild_perm_check(user_id, guild_id, 'manage_guild') - inv_code = await _vanity_inv(guild_id) + inv_code = await vanity_invite(guild_id) if inv_code is None: return jsonify({'code': None}) @@ -415,7 +416,7 @@ async def change_vanity_url(guild_id: int): # store old vanity in a variable to delete it from # invites table - old_vanity = await _vanity_inv(guild_id) + old_vanity = await vanity_invite(guild_id) if old_vanity == inv_code: raise BadRequest('can not change to same invite')