mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +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
|
import logging
|
||||||
from typing import Any, Dict, List, Optional
|
from typing import Any, Dict, List, Optional
|
||||||
|
|
||||||
import orjson
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
@@ -13,7 +12,6 @@ from zerver.actions.realm_settings import (
|
|||||||
do_add_deactivated_redirect,
|
do_add_deactivated_redirect,
|
||||||
do_change_realm_plan_type,
|
do_change_realm_plan_type,
|
||||||
do_deactivate_realm,
|
do_deactivate_realm,
|
||||||
do_set_realm_property,
|
|
||||||
)
|
)
|
||||||
from zerver.lib.bulk_create import create_users
|
from zerver.lib.bulk_create import create_users
|
||||||
from zerver.lib.server_initialization import create_internal_realm, server_initialized
|
from zerver.lib.server_initialization import create_internal_realm, server_initialized
|
||||||
@@ -25,17 +23,13 @@ from zerver.models import (
|
|||||||
Message,
|
Message,
|
||||||
Realm,
|
Realm,
|
||||||
RealmAuditLog,
|
RealmAuditLog,
|
||||||
RealmDomain,
|
|
||||||
RealmUserDefault,
|
RealmUserDefault,
|
||||||
Stream,
|
Stream,
|
||||||
UserMessage,
|
UserMessage,
|
||||||
UserProfile,
|
UserProfile,
|
||||||
active_user_ids,
|
|
||||||
get_realm,
|
get_realm,
|
||||||
get_realm_domains,
|
|
||||||
get_system_bot,
|
get_system_bot,
|
||||||
)
|
)
|
||||||
from zerver.tornado.django_api import send_event
|
|
||||||
|
|
||||||
|
|
||||||
def do_change_realm_subdomain(
|
def do_change_realm_subdomain(
|
||||||
@@ -247,108 +241,6 @@ def do_create_realm(
|
|||||||
return 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]:
|
def get_topic_messages(user_profile: UserProfile, stream: Stream, topic_name: str) -> List[Message]:
|
||||||
query = UserMessage.objects.filter(
|
query = UserMessage.objects.filter(
|
||||||
user_profile=user_profile,
|
user_profile=user_profile,
|
||||||
|
|||||||
@@ -17,6 +17,11 @@ from zerver.actions.create_user import (
|
|||||||
do_create_user,
|
do_create_user,
|
||||||
do_reactivate_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_icon import do_change_icon_source
|
||||||
from zerver.actions.realm_playgrounds import do_add_realm_playground, do_remove_realm_playground
|
from zerver.actions.realm_playgrounds import do_add_realm_playground, do_remove_realm_playground
|
||||||
from zerver.actions.realm_settings import (
|
from zerver.actions.realm_settings import (
|
||||||
@@ -43,7 +48,6 @@ from zerver.actions.user_settings import (
|
|||||||
do_regenerate_api_key,
|
do_regenerate_api_key,
|
||||||
)
|
)
|
||||||
from zerver.actions.users import do_change_user_role, do_deactivate_user
|
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.message import get_last_message_id
|
||||||
from zerver.lib.stream_traffic import get_streams_traffic
|
from zerver.lib.stream_traffic import get_streams_traffic
|
||||||
from zerver.lib.streams import create_stream_if_needed
|
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.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.presence import do_update_user_presence, do_update_user_status
|
||||||
from zerver.actions.reactions import do_add_reaction, do_remove_reaction
|
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_emoji import check_add_realm_emoji, do_remove_realm_emoji
|
||||||
from zerver.actions.realm_icon import do_change_icon_source
|
from zerver.actions.realm_icon import do_change_icon_source
|
||||||
from zerver.actions.realm_linkifiers import (
|
from zerver.actions.realm_linkifiers import (
|
||||||
@@ -109,7 +114,6 @@ from zerver.actions.users import (
|
|||||||
do_update_outgoing_webhook_service,
|
do_update_outgoing_webhook_service,
|
||||||
)
|
)
|
||||||
from zerver.actions.video_calls import do_set_zoom_token
|
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.drafts import do_create_drafts, do_delete_draft, do_edit_draft
|
||||||
from zerver.lib.event_schema import (
|
from zerver.lib.event_schema import (
|
||||||
check_alert_words,
|
check_alert_words,
|
||||||
|
|||||||
@@ -26,10 +26,11 @@ from zerver.actions.message_send import (
|
|||||||
internal_send_stream_message_by_name,
|
internal_send_stream_message_by_name,
|
||||||
send_rate_limited_pm_notification_to_bot_owner,
|
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.realm_settings import do_set_realm_property
|
||||||
from zerver.actions.streams import do_change_stream_post_policy
|
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.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.addressee import Addressee
|
||||||
from zerver.lib.cache import cache_delete, get_stream_cache_key
|
from zerver.lib.cache import cache_delete, get_stream_cache_key
|
||||||
from zerver.lib.exceptions import JsonableError
|
from zerver.lib.exceptions import JsonableError
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ import orjson
|
|||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db.utils import IntegrityError
|
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.realm_settings import do_set_realm_property
|
||||||
from zerver.actions.users import do_change_user_role
|
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.domains import validate_domain
|
||||||
from zerver.lib.email_validation import email_allowed_for_realm
|
from zerver.lib.email_validation import email_allowed_for_realm
|
||||||
from zerver.lib.test_classes import ZulipTestCase
|
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.http import HttpRequest, HttpResponse
|
||||||
from django.utils.translation import gettext as _
|
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.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.domains import validate_domain
|
||||||
from zerver.lib.exceptions import JsonableError
|
from zerver.lib.exceptions import JsonableError
|
||||||
from zerver.lib.request import REQ, has_request_variables
|
from zerver.lib.request import REQ, has_request_variables
|
||||||
|
|||||||
Reference in New Issue
Block a user