40 lines
1.7 KiB
Python
40 lines
1.7 KiB
Python
"""邀请码 / 邀请链俱乐部隔离。"""
|
|
import logging
|
|
|
|
from jituan.services.club_resolver import resolve_club_id_for_wechat_request
|
|
from jituan.services.club_user import resolve_invite_party_club
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def assert_invite_same_club(request, inviter_user, invitee_user=None):
|
|
"""
|
|
校验邀请人与被邀请人属于同一俱乐部,且与请求 club 一致。
|
|
未归属俱乐部的被邀请人允许在本小程序完成首次注册。
|
|
返回 (ok, message)
|
|
"""
|
|
club_id = resolve_club_id_for_wechat_request(request)
|
|
inviter_club = resolve_invite_party_club(inviter_user, club_id)
|
|
if inviter_club is None:
|
|
# 管事未落库 ClubID/绑定时,以当前小程序为准(星之界扫码邀请常见)
|
|
inviter_club = club_id
|
|
if inviter_club != club_id:
|
|
logger.warning(
|
|
'invite_guard 管事俱乐部不符 inviter=%s inviter_club=%s req_club=%s',
|
|
getattr(inviter_user, 'UserUID', '?'), inviter_club, club_id,
|
|
)
|
|
return False, '邀请码不属于当前小程序俱乐部'
|
|
|
|
if invitee_user is not None:
|
|
invitee_club = resolve_invite_party_club(invitee_user, club_id)
|
|
if invitee_club is not None and invitee_club != club_id:
|
|
logger.warning(
|
|
'invite_guard 被邀请人俱乐部不符 invitee=%s invitee_club=%s req_club=%s',
|
|
getattr(invitee_user, 'UserUID', '?'), invitee_club, club_id,
|
|
)
|
|
return False, '您的账号归属与当前小程序不一致,请使用对应俱乐部小程序'
|
|
if invitee_club is not None and invitee_club != inviter_club:
|
|
return False, '邀请码与您的俱乐部不匹配'
|
|
|
|
return True, ''
|