from datetime import timedelta import logging from django.core.management.base import BaseCommand from django.utils import timezone from django.conf import settings from pingcap_sso.models import SSOCookieDiscourseAuthToken from pingcap_sso.discourse.models import ( DiscourseUserAuthTokenLog, DiscourseUserAuthToken ) logger = logging.getLogger(__name__) class Command(BaseCommand): def handle(self, *args, **options): session_expires = timezone.now() - timedelta(seconds=settings.SESSION_COOKIE_AGE) sso_discourse_cookie_qs = SSOCookieDiscourseAuthToken.objects\ .filter(created_at__lte=session_expires, deleted=False) asktug_auth_token_ids = sso_discourse_cookie_qs.values_list('auth_token_id', flat=True) for auth_token_id in asktug_auth_token_ids: try: auth_token_instance = DiscourseUserAuthToken.objects.get(id=auth_token_id) DiscourseUserAuthTokenLog.objects.create( action='sso destroy (cron)', user_auth_token_id=auth_token_id, user_id=auth_token_instance.user_id, client_ip=None, user_agent='', auth_token=auth_token_instance.auth_token, path='' ) auth_token_instance.delete() except DiscourseUserAuthToken.DoesNotExist: pass sso_discourse_cookie_qs.update(deleted=True)