Skip to content

Commit 2f23996

Browse files
authored
Merge pull request #866 from basedosdados/feat/1343
Feat/1343
2 parents 586277b + a609e6b commit 2f23996

File tree

1 file changed

+41
-9
lines changed

1 file changed

+41
-9
lines changed

backend/apps/account_payment/webhooks.py

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
from loguru import logger
1010
from stripe import Customer as StripeCustomer
1111
from stripe import Subscription as StripeSubscription
12+
from django.db.models import Q
13+
from django.core.exceptions import ObjectDoesNotExist
1214

1315
from backend.apps.account.models import Account, Subscription
1416
from backend.custom.client import send_discord_message as send
@@ -76,26 +78,56 @@ def add_user(email: str, group_key: str = None, role: str = "MEMBER"):
7678
logger.error(e)
7779
raise e
7880

81+
def _normalize_plus(email: str) -> str:
82+
"""Normaliza: trim, lower e remove +alias antes do @."""
83+
email = email.strip().lower()
84+
local, _, domain = email.partition("@")
85+
if "+" in local:
86+
local = local.split("+", 1)[0]
87+
return f"{local}@{domain}"
7988

8089
def remove_user(email: str, group_key: str = None) -> None:
81-
"""Remove user from google group"""
82-
if not group_key:
83-
group_key = settings.GOOGLE_DIRECTORY_GROUP_KEY
84-
if "+" in email and email.index("+") < email.index("@"):
85-
email = email.split("+")[0] + "@" + email.split("@")[1]
90+
"""Remove user from Google Group"""
91+
if not email or "@" not in email:
92+
logger.error(f"E-mail inválido fornecido: {email!r}")
93+
return
94+
95+
raw_email = email.strip().lower()
96+
base_email = _normalize_plus(raw_email)
97+
98+
try:
99+
user = Account.objects.get(
100+
Q(email__iexact=raw_email) |
101+
Q(email__iexact=base_email) |
102+
Q(gcp_email__iexact=raw_email) |
103+
Q(gcp_email__iexact=base_email)
104+
)
105+
except ObjectDoesNotExist:
106+
logger.warning(f"Usuário {raw_email} não encontrado no banco. Prosseguindo com remoção.")
107+
return
108+
109+
if user and user.is_admin:
110+
logger.warning(f"Bloqueado: {raw_email} é admin. Não removido do Google Groups.")
111+
return
112+
113+
group_key = group_key or settings.GOOGLE_DIRECTORY_GROUP_KEY
114+
86115
try:
87116
service = get_service()
88117
service.members().delete(
89118
groupKey=group_key,
90-
memberKey=email.lower(),
119+
memberKey=base_email,
91120
).execute()
92121
except HttpError as e:
93122
if e.resp.status == 404:
94-
logger.warning(f"{email} já foi removido do google groups")
123+
logger.warning(f"{base_email} já foi removido do Google Groups")
95124
else:
96-
send(f"Verifique o erro ao remover o usuário do google groups '{email}': {e}")
125+
send(f"Verifique o erro ao remover '{base_email}' do Google Groups: {e}")
97126
logger.error(e)
98-
raise e
127+
raise
128+
except Exception:
129+
logger.exception(f"Erro inesperado ao remover {base_email} do Google Groups")
130+
raise
99131

100132

101133
def list_user(group_key: str = None):

0 commit comments

Comments
 (0)