mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 04:53:36 +00:00
actions: Split out zerver.actions.realm_domains.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
118
zerver/actions/realm_domains.py
Normal file
118
zerver/actions/realm_domains.py
Normal file
@@ -0,0 +1,118 @@
|
||||
from typing import Optional
|
||||
|
||||
import orjson
|
||||
from django.db import transaction
|
||||
from django.utils.timezone import now as timezone_now
|
||||
|
||||
from zerver.actions.realm_settings import do_set_realm_property
|
||||
from zerver.models import (
|
||||
Realm,
|
||||
RealmAuditLog,
|
||||
RealmDomain,
|
||||
UserProfile,
|
||||
active_user_ids,
|
||||
get_realm_domains,
|
||||
)
|
||||
from zerver.tornado.django_api import send_event
|
||||
|
||||
|
||||
@transaction.atomic(durable=True)
|
||||
def do_add_realm_domain(
|
||||
realm: Realm, domain: str, allow_subdomains: bool, *, acting_user: Optional[UserProfile]
|
||||
) -> (RealmDomain):
|
||||
realm_domain = RealmDomain.objects.create(
|
||||
realm=realm, domain=domain, allow_subdomains=allow_subdomains
|
||||
)
|
||||
|
||||
RealmAuditLog.objects.create(
|
||||
realm=realm,
|
||||
acting_user=acting_user,
|
||||
event_type=RealmAuditLog.REALM_DOMAIN_ADDED,
|
||||
event_time=timezone_now(),
|
||||
extra_data=orjson.dumps(
|
||||
{
|
||||
"realm_domains": get_realm_domains(realm),
|
||||
"added_domain": {"domain": domain, "allow_subdomains": allow_subdomains},
|
||||
}
|
||||
).decode(),
|
||||
)
|
||||
|
||||
event = dict(
|
||||
type="realm_domains",
|
||||
op="add",
|
||||
realm_domain=dict(
|
||||
domain=realm_domain.domain, allow_subdomains=realm_domain.allow_subdomains
|
||||
),
|
||||
)
|
||||
transaction.on_commit(lambda: send_event(realm, event, active_user_ids(realm.id)))
|
||||
|
||||
return realm_domain
|
||||
|
||||
|
||||
@transaction.atomic(durable=True)
|
||||
def do_change_realm_domain(
|
||||
realm_domain: RealmDomain, allow_subdomains: bool, *, acting_user: Optional[UserProfile]
|
||||
) -> None:
|
||||
realm_domain.allow_subdomains = allow_subdomains
|
||||
realm_domain.save(update_fields=["allow_subdomains"])
|
||||
|
||||
RealmAuditLog.objects.create(
|
||||
realm=realm_domain.realm,
|
||||
acting_user=acting_user,
|
||||
event_type=RealmAuditLog.REALM_DOMAIN_CHANGED,
|
||||
event_time=timezone_now(),
|
||||
extra_data=orjson.dumps(
|
||||
{
|
||||
"realm_domains": get_realm_domains(realm_domain.realm),
|
||||
"changed_domain": {
|
||||
"domain": realm_domain.domain,
|
||||
"allow_subdomains": realm_domain.allow_subdomains,
|
||||
},
|
||||
}
|
||||
).decode(),
|
||||
)
|
||||
|
||||
event = dict(
|
||||
type="realm_domains",
|
||||
op="change",
|
||||
realm_domain=dict(
|
||||
domain=realm_domain.domain, allow_subdomains=realm_domain.allow_subdomains
|
||||
),
|
||||
)
|
||||
transaction.on_commit(
|
||||
lambda: send_event(realm_domain.realm, event, active_user_ids(realm_domain.realm_id))
|
||||
)
|
||||
|
||||
|
||||
@transaction.atomic(durable=True)
|
||||
def do_remove_realm_domain(
|
||||
realm_domain: RealmDomain, *, acting_user: Optional[UserProfile]
|
||||
) -> None:
|
||||
realm = realm_domain.realm
|
||||
domain = realm_domain.domain
|
||||
realm_domain.delete()
|
||||
|
||||
RealmAuditLog.objects.create(
|
||||
realm=realm,
|
||||
acting_user=acting_user,
|
||||
event_type=RealmAuditLog.REALM_DOMAIN_REMOVED,
|
||||
event_time=timezone_now(),
|
||||
extra_data=orjson.dumps(
|
||||
{
|
||||
"realm_domains": get_realm_domains(realm),
|
||||
"removed_domain": {
|
||||
"domain": realm_domain.domain,
|
||||
"allow_subdomains": realm_domain.allow_subdomains,
|
||||
},
|
||||
}
|
||||
).decode(),
|
||||
)
|
||||
|
||||
if RealmDomain.objects.filter(realm=realm).count() == 0 and realm.emails_restricted_to_domains:
|
||||
# If this was the last realm domain, we mark the realm as no
|
||||
# longer restricted to domain, because the feature doesn't do
|
||||
# anything if there are no domains, and this is probably less
|
||||
# confusing than the alternative.
|
||||
do_set_realm_property(realm, "emails_restricted_to_domains", False, acting_user=acting_user)
|
||||
event = dict(type="realm_domains", op="remove", domain=domain)
|
||||
transaction.on_commit(lambda: send_event(realm, event, active_user_ids(realm.id)))
|
||||
@@ -2,7 +2,6 @@ import datetime
|
||||
import logging
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
import orjson
|
||||
from django.conf import settings
|
||||
from django.db import transaction
|
||||
from django.utils.timezone import now as timezone_now
|
||||
@@ -13,7 +12,6 @@ from zerver.actions.realm_settings import (
|
||||
do_add_deactivated_redirect,
|
||||
do_change_realm_plan_type,
|
||||
do_deactivate_realm,
|
||||
do_set_realm_property,
|
||||
)
|
||||
from zerver.lib.bulk_create import create_users
|
||||
from zerver.lib.server_initialization import create_internal_realm, server_initialized
|
||||
@@ -25,17 +23,13 @@ from zerver.models import (
|
||||
Message,
|
||||
Realm,
|
||||
RealmAuditLog,
|
||||
RealmDomain,
|
||||
RealmUserDefault,
|
||||
Stream,
|
||||
UserMessage,
|
||||
UserProfile,
|
||||
active_user_ids,
|
||||
get_realm,
|
||||
get_realm_domains,
|
||||
get_system_bot,
|
||||
)
|
||||
from zerver.tornado.django_api import send_event
|
||||
|
||||
|
||||
def do_change_realm_subdomain(
|
||||
@@ -247,108 +241,6 @@ def do_create_realm(
|
||||
return realm
|
||||
|
||||
|
||||
@transaction.atomic(durable=True)
|
||||
def do_add_realm_domain(
|
||||
realm: Realm, domain: str, allow_subdomains: bool, *, acting_user: Optional[UserProfile]
|
||||
) -> (RealmDomain):
|
||||
realm_domain = RealmDomain.objects.create(
|
||||
realm=realm, domain=domain, allow_subdomains=allow_subdomains
|
||||
)
|
||||
|
||||
RealmAuditLog.objects.create(
|
||||
realm=realm,
|
||||
acting_user=acting_user,
|
||||
event_type=RealmAuditLog.REALM_DOMAIN_ADDED,
|
||||
event_time=timezone_now(),
|
||||
extra_data=orjson.dumps(
|
||||
{
|
||||
"realm_domains": get_realm_domains(realm),
|
||||
"added_domain": {"domain": domain, "allow_subdomains": allow_subdomains},
|
||||
}
|
||||
).decode(),
|
||||
)
|
||||
|
||||
event = dict(
|
||||
type="realm_domains",
|
||||
op="add",
|
||||
realm_domain=dict(
|
||||
domain=realm_domain.domain, allow_subdomains=realm_domain.allow_subdomains
|
||||
),
|
||||
)
|
||||
transaction.on_commit(lambda: send_event(realm, event, active_user_ids(realm.id)))
|
||||
|
||||
return realm_domain
|
||||
|
||||
|
||||
@transaction.atomic(durable=True)
|
||||
def do_change_realm_domain(
|
||||
realm_domain: RealmDomain, allow_subdomains: bool, *, acting_user: Optional[UserProfile]
|
||||
) -> None:
|
||||
realm_domain.allow_subdomains = allow_subdomains
|
||||
realm_domain.save(update_fields=["allow_subdomains"])
|
||||
|
||||
RealmAuditLog.objects.create(
|
||||
realm=realm_domain.realm,
|
||||
acting_user=acting_user,
|
||||
event_type=RealmAuditLog.REALM_DOMAIN_CHANGED,
|
||||
event_time=timezone_now(),
|
||||
extra_data=orjson.dumps(
|
||||
{
|
||||
"realm_domains": get_realm_domains(realm_domain.realm),
|
||||
"changed_domain": {
|
||||
"domain": realm_domain.domain,
|
||||
"allow_subdomains": realm_domain.allow_subdomains,
|
||||
},
|
||||
}
|
||||
).decode(),
|
||||
)
|
||||
|
||||
event = dict(
|
||||
type="realm_domains",
|
||||
op="change",
|
||||
realm_domain=dict(
|
||||
domain=realm_domain.domain, allow_subdomains=realm_domain.allow_subdomains
|
||||
),
|
||||
)
|
||||
transaction.on_commit(
|
||||
lambda: send_event(realm_domain.realm, event, active_user_ids(realm_domain.realm_id))
|
||||
)
|
||||
|
||||
|
||||
@transaction.atomic(durable=True)
|
||||
def do_remove_realm_domain(
|
||||
realm_domain: RealmDomain, *, acting_user: Optional[UserProfile]
|
||||
) -> None:
|
||||
realm = realm_domain.realm
|
||||
domain = realm_domain.domain
|
||||
realm_domain.delete()
|
||||
|
||||
RealmAuditLog.objects.create(
|
||||
realm=realm,
|
||||
acting_user=acting_user,
|
||||
event_type=RealmAuditLog.REALM_DOMAIN_REMOVED,
|
||||
event_time=timezone_now(),
|
||||
extra_data=orjson.dumps(
|
||||
{
|
||||
"realm_domains": get_realm_domains(realm),
|
||||
"removed_domain": {
|
||||
"domain": realm_domain.domain,
|
||||
"allow_subdomains": realm_domain.allow_subdomains,
|
||||
},
|
||||
}
|
||||
).decode(),
|
||||
)
|
||||
|
||||
if RealmDomain.objects.filter(realm=realm).count() == 0 and realm.emails_restricted_to_domains:
|
||||
# If this was the last realm domain, we mark the realm as no
|
||||
# longer restricted to domain, because the feature doesn't do
|
||||
# anything if there are no domains, and this is probably less
|
||||
# confusing than the alternative.
|
||||
do_set_realm_property(realm, "emails_restricted_to_domains", False, acting_user=acting_user)
|
||||
event = dict(type="realm_domains", op="remove", domain=domain)
|
||||
transaction.on_commit(lambda: send_event(realm, event, active_user_ids(realm.id)))
|
||||
|
||||
|
||||
def get_topic_messages(user_profile: UserProfile, stream: Stream, topic_name: str) -> List[Message]:
|
||||
query = UserMessage.objects.filter(
|
||||
user_profile=user_profile,
|
||||
|
||||
@@ -17,6 +17,11 @@ from zerver.actions.create_user import (
|
||||
do_create_user,
|
||||
do_reactivate_user,
|
||||
)
|
||||
from zerver.actions.realm_domains import (
|
||||
do_add_realm_domain,
|
||||
do_change_realm_domain,
|
||||
do_remove_realm_domain,
|
||||
)
|
||||
from zerver.actions.realm_icon import do_change_icon_source
|
||||
from zerver.actions.realm_playgrounds import do_add_realm_playground, do_remove_realm_playground
|
||||
from zerver.actions.realm_settings import (
|
||||
@@ -43,7 +48,6 @@ from zerver.actions.user_settings import (
|
||||
do_regenerate_api_key,
|
||||
)
|
||||
from zerver.actions.users import do_change_user_role, do_deactivate_user
|
||||
from zerver.lib.actions import do_add_realm_domain, do_change_realm_domain, do_remove_realm_domain
|
||||
from zerver.lib.message import get_last_message_id
|
||||
from zerver.lib.stream_traffic import get_streams_traffic
|
||||
from zerver.lib.streams import create_stream_if_needed
|
||||
|
||||
@@ -54,6 +54,11 @@ from zerver.actions.message_flags import do_update_message_flags
|
||||
from zerver.actions.muted_users import do_mute_user, do_unmute_user
|
||||
from zerver.actions.presence import do_update_user_presence, do_update_user_status
|
||||
from zerver.actions.reactions import do_add_reaction, do_remove_reaction
|
||||
from zerver.actions.realm_domains import (
|
||||
do_add_realm_domain,
|
||||
do_change_realm_domain,
|
||||
do_remove_realm_domain,
|
||||
)
|
||||
from zerver.actions.realm_emoji import check_add_realm_emoji, do_remove_realm_emoji
|
||||
from zerver.actions.realm_icon import do_change_icon_source
|
||||
from zerver.actions.realm_linkifiers import (
|
||||
@@ -109,7 +114,6 @@ from zerver.actions.users import (
|
||||
do_update_outgoing_webhook_service,
|
||||
)
|
||||
from zerver.actions.video_calls import do_set_zoom_token
|
||||
from zerver.lib.actions import do_add_realm_domain, do_change_realm_domain, do_remove_realm_domain
|
||||
from zerver.lib.drafts import do_create_drafts, do_delete_draft, do_edit_draft
|
||||
from zerver.lib.event_schema import (
|
||||
check_alert_words,
|
||||
|
||||
@@ -26,10 +26,11 @@ from zerver.actions.message_send import (
|
||||
internal_send_stream_message_by_name,
|
||||
send_rate_limited_pm_notification_to_bot_owner,
|
||||
)
|
||||
from zerver.actions.realm_domains import do_add_realm_domain
|
||||
from zerver.actions.realm_settings import do_set_realm_property
|
||||
from zerver.actions.streams import do_change_stream_post_policy
|
||||
from zerver.actions.users import do_change_can_forge_sender, do_deactivate_user
|
||||
from zerver.lib.actions import do_add_realm_domain, do_create_realm
|
||||
from zerver.lib.actions import do_create_realm
|
||||
from zerver.lib.addressee import Addressee
|
||||
from zerver.lib.cache import cache_delete, get_stream_cache_key
|
||||
from zerver.lib.exceptions import JsonableError
|
||||
|
||||
@@ -2,9 +2,10 @@ import orjson
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db.utils import IntegrityError
|
||||
|
||||
from zerver.actions.realm_domains import do_change_realm_domain, do_remove_realm_domain
|
||||
from zerver.actions.realm_settings import do_set_realm_property
|
||||
from zerver.actions.users import do_change_user_role
|
||||
from zerver.lib.actions import do_change_realm_domain, do_create_realm, do_remove_realm_domain
|
||||
from zerver.lib.actions import do_create_realm
|
||||
from zerver.lib.domains import validate_domain
|
||||
from zerver.lib.email_validation import email_allowed_for_realm
|
||||
from zerver.lib.test_classes import ZulipTestCase
|
||||
|
||||
@@ -2,8 +2,12 @@ from django.core.exceptions import ValidationError
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
from zerver.actions.realm_domains import (
|
||||
do_add_realm_domain,
|
||||
do_change_realm_domain,
|
||||
do_remove_realm_domain,
|
||||
)
|
||||
from zerver.decorator import require_realm_admin
|
||||
from zerver.lib.actions import do_add_realm_domain, do_change_realm_domain, do_remove_realm_domain
|
||||
from zerver.lib.domains import validate_domain
|
||||
from zerver.lib.exceptions import JsonableError
|
||||
from zerver.lib.request import REQ, has_request_variables
|
||||
|
||||
Reference in New Issue
Block a user