mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 03:53:50 +00:00 
			
		
		
		
	sessions: Move session deletion code to sessions.py.
This new organization feels more thematically appropriate, and of course shrinks the amount of stuff unnecessarily in actions.py
This commit is contained in:
		| @@ -9,7 +9,6 @@ from django.utils.html import escape | ||||
| from django.utils.translation import ugettext as _ | ||||
| from django.conf import settings | ||||
| from django.core import validators | ||||
| from django.contrib.sessions.models import Session | ||||
| from analytics.lib.counts import COUNT_STATS, do_increment_logging_stat | ||||
| from zerver.lib.bugdown import ( | ||||
|     BugdownRenderingException, | ||||
| @@ -47,7 +46,6 @@ from django.db import transaction, IntegrityError, connection | ||||
| from django.db.models import F, Q | ||||
| from django.db.models.query import QuerySet | ||||
| from django.core.exceptions import ValidationError | ||||
| from importlib import import_module | ||||
| from django.core.mail import EmailMessage | ||||
| from django.utils import timezone | ||||
|  | ||||
| @@ -58,8 +56,6 @@ from six.moves import map | ||||
| from six.moves import range | ||||
| from six import unichr | ||||
|  | ||||
| session_engine = import_module(settings.SESSION_ENGINE) | ||||
|  | ||||
| from zerver.lib.create_user import random_api_key | ||||
| from zerver.lib.timestamp import timestamp_to_datetime, datetime_to_timestamp | ||||
| from zerver.lib.queue import queue_json_publish | ||||
| @@ -76,7 +72,7 @@ from zerver.lib.alert_words import user_alert_words, add_user_alert_words, \ | ||||
| from zerver.lib.notifications import clear_followup_emails_queue | ||||
| from zerver.lib.narrow import check_supported_events_narrow_filter | ||||
| from zerver.lib.request import JsonableError | ||||
| from zerver.lib.sessions import get_session_user | ||||
| from zerver.lib.sessions import delete_user_sessions | ||||
| from zerver.lib.upload import attachment_url_re, attachment_url_to_path_id, \ | ||||
|     claim_attachment, delete_message_image | ||||
| from zerver.lib.str_utils import NonBinaryStr, force_str | ||||
| @@ -430,45 +426,6 @@ def do_create_user(email, password, realm, full_name, short_name, | ||||
|                                newsletter_data=newsletter_data) | ||||
|     return user_profile | ||||
|  | ||||
| def user_sessions(user_profile): | ||||
|     # type: (UserProfile) -> List[Session] | ||||
|     return [s for s in Session.objects.all() | ||||
|             if get_session_user(s) == user_profile.id] | ||||
|  | ||||
| def delete_session(session): | ||||
|     # type: (Session) -> None | ||||
|     session_engine.SessionStore(session.session_key).delete() # type: ignore # import_module | ||||
|  | ||||
| def delete_user_sessions(user_profile): | ||||
|     # type: (UserProfile) -> None | ||||
|     for session in Session.objects.all(): | ||||
|         if get_session_user(session) == user_profile.id: | ||||
|             delete_session(session) | ||||
|  | ||||
| def delete_realm_user_sessions(realm): | ||||
|     # type: (Realm) -> None | ||||
|     realm_user_ids = [user_profile.id for user_profile in | ||||
|                       UserProfile.objects.filter(realm=realm)] | ||||
|     for session in Session.objects.filter(expire_date__gte=timezone.now()): | ||||
|         if get_session_user(session) in realm_user_ids: | ||||
|             delete_session(session) | ||||
|  | ||||
| def delete_all_user_sessions(): | ||||
|     # type: () -> None | ||||
|     for session in Session.objects.all(): | ||||
|         delete_session(session) | ||||
|  | ||||
| def delete_all_deactivated_user_sessions(): | ||||
|     # type: () -> None | ||||
|     for session in Session.objects.all(): | ||||
|         user_profile_id = get_session_user(session) | ||||
|         if user_profile_id is None: | ||||
|             continue | ||||
|         user_profile = get_user_profile_by_id(user_profile_id) | ||||
|         if not user_profile.is_active or user_profile.realm.deactivated: | ||||
|             logging.info("Deactivating session for deactivated user %s" % (user_profile.email,)) | ||||
|             delete_session(session) | ||||
|  | ||||
| def active_humans_in_realm(realm): | ||||
|     # type: (Realm) -> Sequence[UserProfile] | ||||
|     return UserProfile.objects.filter(realm=realm, is_active=True, is_bot=False) | ||||
|   | ||||
| @@ -1,10 +1,17 @@ | ||||
| from __future__ import absolute_import | ||||
|  | ||||
| import logging | ||||
|  | ||||
| from django.conf import settings | ||||
| from django.contrib.auth import SESSION_KEY, get_user_model | ||||
| from django.contrib.sessions.models import Session | ||||
|  | ||||
| from django.utils import timezone | ||||
| from importlib import import_module | ||||
| from typing import Mapping, Optional, Text | ||||
|  | ||||
| from zerver.models import UserProfile, get_user_profile_by_id | ||||
|  | ||||
| session_engine = import_module(settings.SESSION_ENGINE) | ||||
|  | ||||
| def get_session_dict_user(session_dict): | ||||
|     # type: (Mapping[Text, int]) -> Optional[int] | ||||
| @@ -17,3 +24,42 @@ def get_session_dict_user(session_dict): | ||||
| def get_session_user(session): | ||||
|     # type: (Session) -> int | ||||
|     return get_session_dict_user(session.get_decoded()) | ||||
|  | ||||
| def user_sessions(user_profile): | ||||
|     # type: (UserProfile) -> List[Session] | ||||
|     return [s for s in Session.objects.all() | ||||
|             if get_session_user(s) == user_profile.id] | ||||
|  | ||||
| def delete_session(session): | ||||
|     # type: (Session) -> None | ||||
|     session_engine.SessionStore(session.session_key).delete() # type: ignore # import_module | ||||
|  | ||||
| def delete_user_sessions(user_profile): | ||||
|     # type: (UserProfile) -> None | ||||
|     for session in Session.objects.all(): | ||||
|         if get_session_user(session) == user_profile.id: | ||||
|             delete_session(session) | ||||
|  | ||||
| def delete_realm_user_sessions(realm): | ||||
|     # type: (Realm) -> None | ||||
|     realm_user_ids = [user_profile.id for user_profile in | ||||
|                       UserProfile.objects.filter(realm=realm)] | ||||
|     for session in Session.objects.filter(expire_date__gte=timezone.now()): | ||||
|         if get_session_user(session) in realm_user_ids: | ||||
|             delete_session(session) | ||||
|  | ||||
| def delete_all_user_sessions(): | ||||
|     # type: () -> None | ||||
|     for session in Session.objects.all(): | ||||
|         delete_session(session) | ||||
|  | ||||
| def delete_all_deactivated_user_sessions(): | ||||
|     # type: () -> None | ||||
|     for session in Session.objects.all(): | ||||
|         user_profile_id = get_session_user(session) | ||||
|         if user_profile_id is None: | ||||
|             continue | ||||
|         user_profile = get_user_profile_by_id(user_profile_id) | ||||
|         if not user_profile.is_active or user_profile.realm.deactivated: | ||||
|             logging.info("Deactivating session for deactivated user %s" % (user_profile.email,)) | ||||
|             delete_session(session) | ||||
|   | ||||
| @@ -8,7 +8,8 @@ from optparse import make_option | ||||
|  | ||||
| from django.core.management.base import BaseCommand | ||||
|  | ||||
| from zerver.lib.actions import do_deactivate_user, user_sessions | ||||
| from zerver.lib.actions import do_deactivate_user | ||||
| from zerver.lib.sessions import user_sessions | ||||
| from zerver.models import get_user_profile_by_email, UserProfile | ||||
|  | ||||
| class Command(BaseCommand): | ||||
|   | ||||
| @@ -5,7 +5,7 @@ from argparse import ArgumentParser | ||||
|  | ||||
| from django.core.management.base import BaseCommand | ||||
|  | ||||
| from zerver.lib.actions import delete_all_user_sessions, \ | ||||
| from zerver.lib.sessions import delete_all_user_sessions, \ | ||||
|     delete_realm_user_sessions, delete_all_deactivated_user_sessions | ||||
| from zerver.models import get_realm | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user