mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +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 html = "<table>";
|
||||||
var args = {
|
var args = {
|
||||||
alias: {
|
alias: {
|
||||||
id: 1,
|
|
||||||
domain: 'zulip.org',
|
domain: 'zulip.org',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -104,16 +103,11 @@ function render(template_name, args) {
|
|||||||
|
|
||||||
var button = $(html).find('.btn');
|
var button = $(html).find('.btn');
|
||||||
var domain = $(html).find('.domain');
|
var domain = $(html).find('.domain');
|
||||||
var row = button.closest('tr');
|
|
||||||
|
|
||||||
assert.equal(button.text().trim(), "Remove");
|
assert.equal(button.text().trim(), "Remove");
|
||||||
assert(button.hasClass("delete_alias"));
|
assert(button.hasClass("delete_alias"));
|
||||||
assert.equal(button.data("id"), "1");
|
|
||||||
|
|
||||||
assert.equal(domain.text(), "zulip.org");
|
assert.equal(domain.text(), "zulip.org");
|
||||||
|
|
||||||
assert.equal(row.attr("id"), "alias_1");
|
|
||||||
|
|
||||||
global.write_handlebars_output("admin-alias-list", html);
|
global.write_handlebars_output("admin-alias-list", html);
|
||||||
}());
|
}());
|
||||||
|
|
||||||
|
|||||||
@@ -902,7 +902,8 @@ function _setup_page() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
$("#alias_table").on("click", ".delete_alias", function () {
|
$("#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");
|
var aliases_info = $("#realm_aliases_modal").find(".aliases_info");
|
||||||
|
|
||||||
channel.del({
|
channel.del({
|
||||||
|
|||||||
@@ -112,8 +112,8 @@ function dispatch_normal_event(event) {
|
|||||||
page_params.domains.push(event.alias);
|
page_params.domains.push(event.alias);
|
||||||
} else if (event.op === 'remove') {
|
} else if (event.op === 'remove') {
|
||||||
var i;
|
var i;
|
||||||
for (i = 0;i < page_params.domains.length;i += 1) {
|
for (i = 0; i < page_params.domains.length; i += 1) {
|
||||||
if (page_params.domains[i].id === event.alias_id) {
|
if (page_params.domains[i].domain === event.domain) {
|
||||||
page_params.domains.splice(i, 1);
|
page_params.domains.splice(i, 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{{#with alias}}
|
{{#with alias}}
|
||||||
<tr id="alias_{{id}}">
|
<tr>
|
||||||
<td class="domain">{{domain}}</td>
|
<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>
|
</tr>
|
||||||
{{/with}}
|
{{/with}}
|
||||||
|
|||||||
@@ -3321,7 +3321,7 @@ def apply_events(state, events, user_profile):
|
|||||||
if event['op'] == 'add':
|
if event['op'] == 'add':
|
||||||
state['realm_domains'].append(event['alias'])
|
state['realm_domains'].append(event['alias'])
|
||||||
elif event['op'] == 'remove':
|
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":
|
elif event['type'] == "realm_emoji":
|
||||||
state['realm_emoji'] = event['realm_emoji']
|
state['realm_emoji'] = event['realm_emoji']
|
||||||
elif event['type'] == "alert_words":
|
elif event['type'] == "alert_words":
|
||||||
@@ -3685,24 +3685,21 @@ def get_emails_from_user_ids(user_ids):
|
|||||||
|
|
||||||
def get_realm_aliases(realm):
|
def get_realm_aliases(realm):
|
||||||
# type: (Realm) -> List[Dict[str, Text]]
|
# 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):
|
def do_add_realm_alias(realm, domain):
|
||||||
# type: (Realm, Text) -> (RealmAlias)
|
# type: (Realm, Text) -> (RealmAlias)
|
||||||
alias = RealmAlias(realm=realm, domain=domain)
|
alias = RealmAlias.objects.create(realm=realm, domain=domain)
|
||||||
alias.full_clean()
|
|
||||||
alias.save()
|
|
||||||
event = dict(type="realm_domains", op="add",
|
event = dict(type="realm_domains", op="add",
|
||||||
alias=dict(id=alias.id,
|
alias=dict(domain=alias.domain,
|
||||||
domain=alias.domain,
|
|
||||||
))
|
))
|
||||||
send_event(event, active_user_ids(realm))
|
send_event(event, active_user_ids(realm))
|
||||||
return alias
|
return alias
|
||||||
|
|
||||||
def do_remove_realm_alias(realm, alias_id):
|
def do_remove_realm_alias(realm, domain):
|
||||||
# type: (Realm, int) -> None
|
# type: (Realm, Text) -> None
|
||||||
RealmAlias.objects.get(pk=alias_id).delete()
|
RealmAlias.objects.get(realm=realm, domain=domain).delete()
|
||||||
event = dict(type="realm_domains", op="remove", alias_id=alias_id)
|
event = dict(type="realm_domains", op="remove", domain=domain)
|
||||||
send_event(event, active_user_ids(realm))
|
send_event(event, active_user_ids(realm))
|
||||||
|
|
||||||
def get_occupied_streams(realm):
|
def get_occupied_streams(realm):
|
||||||
|
|||||||
@@ -334,7 +334,7 @@ def email_allowed_for_realm(email, realm):
|
|||||||
|
|
||||||
def list_of_domains_for_realm(realm):
|
def list_of_domains_for_realm(realm):
|
||||||
# type: (Realm) -> List[Text]
|
# 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):
|
class RealmEmoji(ModelReprMixin, models.Model):
|
||||||
author = models.ForeignKey('UserProfile', blank=True, null=True)
|
author = models.ForeignKey('UserProfile', blank=True, null=True)
|
||||||
|
|||||||
@@ -815,7 +815,6 @@ class EventsRegisterTest(ZulipTestCase):
|
|||||||
('type', equals('realm_domains')),
|
('type', equals('realm_domains')),
|
||||||
('op', equals('add')),
|
('op', equals('add')),
|
||||||
('alias', check_dict([
|
('alias', check_dict([
|
||||||
('id', check_int),
|
|
||||||
('domain', check_string),
|
('domain', check_string),
|
||||||
])),
|
])),
|
||||||
])
|
])
|
||||||
@@ -827,10 +826,10 @@ class EventsRegisterTest(ZulipTestCase):
|
|||||||
schema_checker = check_dict([
|
schema_checker = check_dict([
|
||||||
('type', equals('realm_domains')),
|
('type', equals('realm_domains')),
|
||||||
('op', equals('remove')),
|
('op', equals('remove')),
|
||||||
('alias_id', check_int),
|
('domain', check_string),
|
||||||
])
|
])
|
||||||
alias_id = RealmAlias.objects.get(realm=realm, domain='zulip.org').id
|
alias = RealmAlias.objects.get(realm=realm, domain='zulip.org')
|
||||||
events = self.do_test(lambda: do_remove_realm_alias(realm, alias_id))
|
events = self.do_test(lambda: do_remove_realm_alias(realm, alias.domain))
|
||||||
error = schema_checker('events[0]', events[0])
|
error = schema_checker('events[0]', events[0])
|
||||||
self.assert_on_error(error)
|
self.assert_on_error(error)
|
||||||
|
|
||||||
|
|||||||
@@ -47,12 +47,13 @@ class RealmAliasTest(ZulipTestCase):
|
|||||||
# type: () -> None
|
# type: () -> None
|
||||||
self.login("iago@zulip.com")
|
self.login("iago@zulip.com")
|
||||||
realm = get_realm('zulip')
|
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()
|
aliases_count = RealmAlias.objects.count()
|
||||||
result = self.client_delete("/json/realm/domains/{0}".format(alias_id + 1))
|
result = self.client_delete("/json/realm/domains/non-existent.com")
|
||||||
self.assert_json_error(result, 'No such entry found.')
|
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.assert_json_success(result)
|
||||||
self.assertEqual(RealmAlias.objects.count(), aliases_count - 1)
|
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
|
@require_realm_admin
|
||||||
@has_request_variables
|
@has_request_variables
|
||||||
def delete_alias(request, user_profile, alias_id):
|
def delete_alias(request, user_profile, domain):
|
||||||
# type: (HttpRequest, UserProfile, int) -> (HttpResponse)
|
# type: (HttpRequest, UserProfile, Text) -> (HttpResponse)
|
||||||
try:
|
try:
|
||||||
# Ensure alias_id is an integer. Django passes captured url parameters as strings.
|
RealmAlias.objects.get(realm=user_profile.realm, domain=domain)
|
||||||
do_remove_realm_alias(user_profile.realm, int(alias_id))
|
do_remove_realm_alias(user_profile.realm, domain)
|
||||||
except RealmAlias.DoesNotExist:
|
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()
|
return json_success()
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ v1_api_and_json_patterns = [
|
|||||||
url(r'^realm/domains$', rest_dispatch,
|
url(r'^realm/domains$', rest_dispatch,
|
||||||
{'GET': 'zerver.views.realm_aliases.list_aliases',
|
{'GET': 'zerver.views.realm_aliases.list_aliases',
|
||||||
'POST': 'zerver.views.realm_aliases.create_alias'}),
|
'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'}),
|
{'DELETE': 'zerver.views.realm_aliases.delete_alias'}),
|
||||||
|
|
||||||
# realm/emoji -> zerver.views.realm_emoji
|
# realm/emoji -> zerver.views.realm_emoji
|
||||||
|
|||||||
Reference in New Issue
Block a user