mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	views/realm_aliases.py: Use domain instead of id as handle for RealmAlias.
We need to make the change for the API, and the next commit introduces a unique_together constraint on (realm, domain) anyway.
This commit is contained in:
		
				
					committed by
					
						
						Tim Abbott
					
				
			
			
				
	
			
			
			
						parent
						
							06cc306d00
						
					
				
				
					commit
					b4186fdfdd
				
			@@ -95,7 +95,6 @@ function render(template_name, args) {
 | 
			
		||||
    var html = "<table>";
 | 
			
		||||
    var args = {
 | 
			
		||||
        alias: {
 | 
			
		||||
            id: 1,
 | 
			
		||||
            domain: 'zulip.org',
 | 
			
		||||
        },
 | 
			
		||||
    };
 | 
			
		||||
@@ -104,16 +103,11 @@ function render(template_name, args) {
 | 
			
		||||
 | 
			
		||||
    var button = $(html).find('.btn');
 | 
			
		||||
    var domain = $(html).find('.domain');
 | 
			
		||||
    var row = button.closest('tr');
 | 
			
		||||
 | 
			
		||||
    assert.equal(button.text().trim(), "Remove");
 | 
			
		||||
    assert(button.hasClass("delete_alias"));
 | 
			
		||||
    assert.equal(button.data("id"), "1");
 | 
			
		||||
 | 
			
		||||
    assert.equal(domain.text(), "zulip.org");
 | 
			
		||||
 | 
			
		||||
    assert.equal(row.attr("id"), "alias_1");
 | 
			
		||||
 | 
			
		||||
    global.write_handlebars_output("admin-alias-list", html);
 | 
			
		||||
}());
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -902,7 +902,8 @@ function _setup_page() {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $("#alias_table").on("click", ".delete_alias", function () {
 | 
			
		||||
        var url = "/json/realm/domains/" + $(this).data('id');
 | 
			
		||||
        var domain = $(this).parents("tr").find(".domain").text();
 | 
			
		||||
        var url = "/json/realm/domains/" + domain;
 | 
			
		||||
        var aliases_info = $("#realm_aliases_modal").find(".aliases_info");
 | 
			
		||||
 | 
			
		||||
        channel.del({
 | 
			
		||||
 
 | 
			
		||||
@@ -112,8 +112,8 @@ function dispatch_normal_event(event) {
 | 
			
		||||
            page_params.domains.push(event.alias);
 | 
			
		||||
        } else if (event.op === 'remove') {
 | 
			
		||||
            var i;
 | 
			
		||||
            for (i = 0;i < page_params.domains.length;i += 1) {
 | 
			
		||||
                if (page_params.domains[i].id === event.alias_id) {
 | 
			
		||||
            for (i = 0; i < page_params.domains.length; i += 1) {
 | 
			
		||||
                if (page_params.domains[i].domain === event.domain) {
 | 
			
		||||
                    page_params.domains.splice(i, 1);
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{{#with alias}}
 | 
			
		||||
  <tr id="alias_{{id}}">
 | 
			
		||||
  <tr>
 | 
			
		||||
    <td class="domain">{{domain}}</td>
 | 
			
		||||
    <td><button class="btn btn-danger btn-sm delete_alias" data-id="{{id}}">{{t "Remove" }}</button></td>
 | 
			
		||||
    <td><button class="btn btn-danger btn-sm delete_alias">{{t "Remove" }}</button></td>
 | 
			
		||||
  </tr>
 | 
			
		||||
{{/with}}
 | 
			
		||||
 
 | 
			
		||||
@@ -3321,7 +3321,7 @@ def apply_events(state, events, user_profile):
 | 
			
		||||
            if event['op'] == 'add':
 | 
			
		||||
                state['realm_domains'].append(event['alias'])
 | 
			
		||||
            elif event['op'] == 'remove':
 | 
			
		||||
                state['realm_domains'] = [alias for alias in state['realm_domains'] if alias['id'] != event['alias_id']]
 | 
			
		||||
                state['realm_domains'] = [alias for alias in state['realm_domains'] if alias['domain'] != event['domain']]
 | 
			
		||||
        elif event['type'] == "realm_emoji":
 | 
			
		||||
            state['realm_emoji'] = event['realm_emoji']
 | 
			
		||||
        elif event['type'] == "alert_words":
 | 
			
		||||
@@ -3685,24 +3685,21 @@ def get_emails_from_user_ids(user_ids):
 | 
			
		||||
 | 
			
		||||
def get_realm_aliases(realm):
 | 
			
		||||
    # type: (Realm) -> List[Dict[str, Text]]
 | 
			
		||||
    return list(realm.realmalias_set.values('id', 'domain'))
 | 
			
		||||
    return list(realm.realmalias_set.values('domain'))
 | 
			
		||||
 | 
			
		||||
def do_add_realm_alias(realm, domain):
 | 
			
		||||
    # type: (Realm, Text) -> (RealmAlias)
 | 
			
		||||
    alias = RealmAlias(realm=realm, domain=domain)
 | 
			
		||||
    alias.full_clean()
 | 
			
		||||
    alias.save()
 | 
			
		||||
    alias = RealmAlias.objects.create(realm=realm, domain=domain)
 | 
			
		||||
    event = dict(type="realm_domains", op="add",
 | 
			
		||||
                 alias=dict(id=alias.id,
 | 
			
		||||
                            domain=alias.domain,
 | 
			
		||||
                 alias=dict(domain=alias.domain,
 | 
			
		||||
                            ))
 | 
			
		||||
    send_event(event, active_user_ids(realm))
 | 
			
		||||
    return alias
 | 
			
		||||
 | 
			
		||||
def do_remove_realm_alias(realm, alias_id):
 | 
			
		||||
    # type: (Realm, int) -> None
 | 
			
		||||
    RealmAlias.objects.get(pk=alias_id).delete()
 | 
			
		||||
    event = dict(type="realm_domains", op="remove", alias_id=alias_id)
 | 
			
		||||
def do_remove_realm_alias(realm, domain):
 | 
			
		||||
    # type: (Realm, Text) -> None
 | 
			
		||||
    RealmAlias.objects.get(realm=realm, domain=domain).delete()
 | 
			
		||||
    event = dict(type="realm_domains", op="remove", domain=domain)
 | 
			
		||||
    send_event(event, active_user_ids(realm))
 | 
			
		||||
 | 
			
		||||
def get_occupied_streams(realm):
 | 
			
		||||
 
 | 
			
		||||
@@ -334,7 +334,7 @@ def email_allowed_for_realm(email, realm):
 | 
			
		||||
 | 
			
		||||
def list_of_domains_for_realm(realm):
 | 
			
		||||
    # type: (Realm) -> List[Text]
 | 
			
		||||
    return list(RealmAlias.objects.filter(realm = realm).values('domain', 'id'))
 | 
			
		||||
    return list(RealmAlias.objects.filter(realm=realm).values('domain'))
 | 
			
		||||
 | 
			
		||||
class RealmEmoji(ModelReprMixin, models.Model):
 | 
			
		||||
    author = models.ForeignKey('UserProfile', blank=True, null=True)
 | 
			
		||||
 
 | 
			
		||||
@@ -815,7 +815,6 @@ class EventsRegisterTest(ZulipTestCase):
 | 
			
		||||
            ('type', equals('realm_domains')),
 | 
			
		||||
            ('op', equals('add')),
 | 
			
		||||
            ('alias', check_dict([
 | 
			
		||||
                ('id', check_int),
 | 
			
		||||
                ('domain', check_string),
 | 
			
		||||
            ])),
 | 
			
		||||
        ])
 | 
			
		||||
@@ -827,10 +826,10 @@ class EventsRegisterTest(ZulipTestCase):
 | 
			
		||||
        schema_checker = check_dict([
 | 
			
		||||
            ('type', equals('realm_domains')),
 | 
			
		||||
            ('op', equals('remove')),
 | 
			
		||||
            ('alias_id', check_int),
 | 
			
		||||
            ('domain', check_string),
 | 
			
		||||
        ])
 | 
			
		||||
        alias_id = RealmAlias.objects.get(realm=realm, domain='zulip.org').id
 | 
			
		||||
        events = self.do_test(lambda: do_remove_realm_alias(realm, alias_id))
 | 
			
		||||
        alias = RealmAlias.objects.get(realm=realm, domain='zulip.org')
 | 
			
		||||
        events = self.do_test(lambda: do_remove_realm_alias(realm, alias.domain))
 | 
			
		||||
        error = schema_checker('events[0]', events[0])
 | 
			
		||||
        self.assert_on_error(error)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -47,12 +47,13 @@ class RealmAliasTest(ZulipTestCase):
 | 
			
		||||
        # type: () -> None
 | 
			
		||||
        self.login("iago@zulip.com")
 | 
			
		||||
        realm = get_realm('zulip')
 | 
			
		||||
        alias_id = RealmAlias.objects.create(realm=realm, domain='zulip.org').id
 | 
			
		||||
        RealmAlias.objects.create(realm=realm, domain='zulip.org')
 | 
			
		||||
        aliases_count = RealmAlias.objects.count()
 | 
			
		||||
        result = self.client_delete("/json/realm/domains/{0}".format(alias_id + 1))
 | 
			
		||||
        self.assert_json_error(result, 'No such entry found.')
 | 
			
		||||
        result = self.client_delete("/json/realm/domains/non-existent.com")
 | 
			
		||||
        self.assertEqual(result.status_code, 400)
 | 
			
		||||
        self.assert_json_error(result, 'No entry found for domain non-existent.com.')
 | 
			
		||||
 | 
			
		||||
        result = self.client_delete("/json/realm/domains/{0}".format(alias_id))
 | 
			
		||||
        result = self.client_delete("/json/realm/domains/zulip.org")
 | 
			
		||||
        self.assert_json_success(result)
 | 
			
		||||
        self.assertEqual(RealmAlias.objects.count(), aliases_count - 1)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -37,11 +37,11 @@ def create_alias(request, user_profile, domain=REQ(validator=check_string)):
 | 
			
		||||
 | 
			
		||||
@require_realm_admin
 | 
			
		||||
@has_request_variables
 | 
			
		||||
def delete_alias(request, user_profile, alias_id):
 | 
			
		||||
    # type: (HttpRequest, UserProfile, int) -> (HttpResponse)
 | 
			
		||||
def delete_alias(request, user_profile, domain):
 | 
			
		||||
    # type: (HttpRequest, UserProfile, Text) -> (HttpResponse)
 | 
			
		||||
    try:
 | 
			
		||||
        # Ensure alias_id is an integer. Django passes captured url parameters as strings.
 | 
			
		||||
        do_remove_realm_alias(user_profile.realm, int(alias_id))
 | 
			
		||||
        RealmAlias.objects.get(realm=user_profile.realm, domain=domain)
 | 
			
		||||
        do_remove_realm_alias(user_profile.realm, domain)
 | 
			
		||||
    except RealmAlias.DoesNotExist:
 | 
			
		||||
        return json_error(_('No such entry found.'))
 | 
			
		||||
        return json_error(_('No entry found for domain %(domain)s.' % {'domain': domain}))
 | 
			
		||||
    return json_success()
 | 
			
		||||
 
 | 
			
		||||
@@ -168,7 +168,7 @@ v1_api_and_json_patterns = [
 | 
			
		||||
    url(r'^realm/domains$', rest_dispatch,
 | 
			
		||||
        {'GET': 'zerver.views.realm_aliases.list_aliases',
 | 
			
		||||
         'POST': 'zerver.views.realm_aliases.create_alias'}),
 | 
			
		||||
    url(r'^realm/domains/(?P<alias_id>\d+)$', rest_dispatch,
 | 
			
		||||
    url(r'^realm/domains/(?P<domain>\S+)$', rest_dispatch,
 | 
			
		||||
        {'DELETE': 'zerver.views.realm_aliases.delete_alias'}),
 | 
			
		||||
 | 
			
		||||
    # realm/emoji -> zerver.views.realm_emoji
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user