settings: Add backend code for using user email_address_visibility setting.

This commits update the code to use user-level email_address_visibility
setting instead of realm-level to set or update the value of UserProfile.email
field and to send the emails to clients.

Major changes are -

- UserProfile.email field is set while creating the user according to
RealmUserDefault.email_address_visbility.

- UserProfile.email field is updated according to change in the setting.

- 'email_address_visibility' is added to person objects in user add event
and in avatar change event.

- client_gravatar can be different for different users when computing
avatar_url for messages and user objects since email available to clients
is dependent on user-level setting.

- For bots, email_address_visibility is set to EVERYONE while creating
them irrespective of realm-default value.

- Test changes are basically setting user-level setting instead of realm
setting and modifying the checks accordingly.
This commit is contained in:
Sahil Batra
2021-10-26 12:45:16 +05:30
committed by Tim Abbott
parent ea0b2286e0
commit 0ed5f76063
28 changed files with 331 additions and 185 deletions

View File

@@ -9,7 +9,7 @@ from django.test import override_settings
from zulip_bots.custom_exceptions import ConfigValidationError
from zerver.actions.bots import do_change_bot_owner
from zerver.actions.realm_settings import do_set_realm_property
from zerver.actions.realm_settings import do_set_realm_user_default_setting
from zerver.actions.streams import do_change_stream_permission
from zerver.actions.users import do_change_can_create_users, do_change_user_role, do_deactivate_user
from zerver.lib.bot_config import ConfigError, get_bot_config
@@ -19,6 +19,7 @@ from zerver.lib.test_classes import UploadSerializeMixin, ZulipTestCase
from zerver.lib.test_helpers import avatar_disk_path, get_test_image_file
from zerver.models import (
Realm,
RealmUserDefault,
Service,
UserProfile,
get_bot_services,
@@ -318,10 +319,11 @@ class BotTest(ZulipTestCase, UploadSerializeMixin):
# Test that we don't mangle the email field with
# email_address_visibility limited to admins
user = self.example_user("hamlet")
do_set_realm_property(
user.realm,
realm_user_default = RealmUserDefault.objects.get(realm=user.realm)
do_set_realm_user_default_setting(
realm_user_default,
"email_address_visibility",
Realm.EMAIL_ADDRESS_VISIBILITY_ADMINS,
RealmUserDefault.EMAIL_ADDRESS_VISIBILITY_ADMINS,
acting_user=None,
)
user.refresh_from_db()