mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 15:03:34 +00:00
Rename/reorganize our urls to be more consistent.
(imported from commit ca3cc7ccd5d7da83a9c60968527378ee1118648e)
This commit is contained in:
@@ -8,27 +8,32 @@ import os.path
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^$', 'zephyr.views.home', name='home'),
|
||||
url(r'^update$', 'zephyr.views.update', name='update'),
|
||||
url(r'^get_updates$', 'zephyr.views.get_updates', name='get_updates'),
|
||||
url(r'^api/v1/get_messages$', 'zephyr.views.api_get_messages', name='api_get_messages'),
|
||||
url(r'^api/v1/get_public_streams$', 'zephyr.views.api_get_public_streams', name='api_get_public_streams'),
|
||||
url(r'^api/v1/get_subscriptions$', 'zephyr.views.api_get_subscriptions', name='api_get_subscriptions'),
|
||||
url(r'^api/v1/subscribe$', 'zephyr.views.api_subscribe', name='api_subscribe'),
|
||||
url(r'^api/v1/send_message$', 'zephyr.views.api_send_message', name='api_send_message'),
|
||||
url(r'^send_message/', 'zephyr.views.send_message', name='send_message'),
|
||||
# We have two entries for accounts/login to allow reverses on the Django
|
||||
# view we're wrapping to continue to function.
|
||||
url(r'^accounts/login/', 'zephyr.views.login_page', {'template_name': 'zephyr/login.html'}),
|
||||
url(r'^accounts/login/', 'django.contrib.auth.views.login', {'template_name': 'zephyr/login.html'}),
|
||||
url(r'^accounts/logout/', 'django.contrib.auth.views.logout', {'template_name': 'zephyr/index.html'}),
|
||||
url(r'^settings/change/$', 'zephyr.views.change_settings', name='change_settings'),
|
||||
url(r'^json/subscriptions/list$', 'zephyr.views.json_list_subscriptions', name='list_subscriptions'),
|
||||
url(r'^json/subscriptions/remove$', 'zephyr.views.json_remove_subscription', name='remove_subscription'),
|
||||
|
||||
# These are json format views used by the web client. They require a logged in browser.
|
||||
url(r'^json/update_pointer$', 'zephyr.views.json_update_pointer', name='json_update_pointer'),
|
||||
url(r'^json/get_updates$', 'zephyr.views.json_get_updates', name='json_get_updates'),
|
||||
url(r'^json/send_message/', 'zephyr.views.json_send_message', name='json_send_message'),
|
||||
url(r'^json/settings/change/$', 'zephyr.views.json_change_settings', name='json_change_settings'),
|
||||
url(r'^json/subscriptions/list$', 'zephyr.views.json_list_subscriptions', name='json_list_subscriptions'),
|
||||
url(r'^json/subscriptions/remove$', 'zephyr.views.json_remove_subscription', name='json_remove_subscription'),
|
||||
url(r'^json/subscriptions/add$', 'zephyr.views.json_add_subscription', name='json_add_subscription'),
|
||||
url(r'^json/subscriptions/exists/(?P<stream>.*)$', 'zephyr.views.json_stream_exists', name='json_stream_exists'),
|
||||
|
||||
# These are json format views used by the API. They require an API key.
|
||||
url(r'^api/v1/get_messages$', 'zephyr.views.api_get_messages', name='api_get_messages'),
|
||||
url(r'^api/v1/get_public_streams$', 'zephyr.views.api_get_public_streams', name='api_get_public_streams'),
|
||||
url(r'^api/v1/get_subscriptions$', 'zephyr.views.api_get_subscriptions', name='api_get_subscriptions'),
|
||||
url(r'^api/v1/subscribe$', 'zephyr.views.api_subscribe', name='api_subscribe'),
|
||||
url(r'^api/v1/send_message$', 'zephyr.views.api_send_message', name='api_send_message'),
|
||||
|
||||
url(r'^favicon\.ico$', 'django.views.generic.simple.redirect_to', {'url': '/static/favicon.ico'}),
|
||||
url(r'^json/subscriptions/add$', 'zephyr.views.json_add_subscription', name='add_subscription'),
|
||||
url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
|
||||
{'document_root': os.path.join(settings.SITE_ROOT, '..', 'zephyr', 'static/')}),
|
||||
url(r'^subscriptions/exists/(?P<stream>.*)$', 'zephyr.views.stream_exists', name='stream_exists'),
|
||||
|
||||
# Uncomment the admin/doc line below to enable admin documentation:
|
||||
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
||||
@@ -40,7 +45,7 @@ urlpatterns = patterns('',
|
||||
if settings.ALLOW_REGISTER:
|
||||
urlpatterns += patterns('',
|
||||
url(r'^accounts/home/', 'zephyr.views.accounts_home', name='accounts_home'),
|
||||
url(r'^accounts/register/', 'zephyr.views.register', name='register'),
|
||||
url(r'^accounts/register/', 'zephyr.views.accounts_register', name='accounts_register'),
|
||||
url(r'^accounts/send_confirm/(?P<email>[\S]+)?', 'django.views.generic.simple.direct_to_template', {'template': 'zephyr/accounts_send_confirm.html'}, name='send_confirm'),
|
||||
url(r'^accounts/do_confirm/(?P<confirmation_key>[\w]+)', 'confirmation.views.confirm', name='confirm'),
|
||||
)
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
<div class="close composebox-close" onclick="hide_compose()">×</div>
|
||||
<div class="message_comp">
|
||||
<div class="alert" id="send-status"></div>
|
||||
<form action="/send_message/" method="post" class="zephyr">
|
||||
<form action="/json/send_message/" method="post" class="zephyr">
|
||||
<input type="hidden" name="type" value="stream" id="new_message_type"/>
|
||||
{% csrf_token %}
|
||||
<table class="compose_table">
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<div id="current_settings" class="span9">
|
||||
<h1>Settings</h1>
|
||||
|
||||
<form action="/settings/change/" method="post" class="settings">{% csrf_token %}
|
||||
<form action="/json/settings/change/" method="post" class="settings">{% csrf_token %}
|
||||
<label>Email</label>
|
||||
<b>{{ user_profile.user.email }}</b> <a href="/settings/change-email">(change?)</a><br /><br />
|
||||
<div id="Photo">
|
||||
|
||||
@@ -89,7 +89,7 @@ class Command(BaseCommand):
|
||||
|
||||
try:
|
||||
# Application is an instance of Django's standard wsgi handler.
|
||||
application = web.Application([(r"/get_updates", AsyncDjangoHandler),
|
||||
application = web.Application([(r"/json/get_updates", AsyncDjangoHandler),
|
||||
(r"/api/v1/get_messages", AsyncDjangoHandler),
|
||||
(r".*", FallbackHandler, dict(fallback=django_app)),
|
||||
], debug=django.conf.settings.DEBUG)
|
||||
|
||||
@@ -100,7 +100,7 @@ function submit_buttons() {
|
||||
function check_stream_for_send(stream_name) {
|
||||
var okay = true;
|
||||
$.ajax({
|
||||
url: "subscriptions/exists/" + stream_name,
|
||||
url: "/json/subscriptions/exists/" + stream_name,
|
||||
async: false,
|
||||
success: function (data) {
|
||||
if (data === "False") {
|
||||
|
||||
@@ -210,7 +210,7 @@ function update_selected_message(message) {
|
||||
// doesn't permanently affect where you are.
|
||||
//
|
||||
// We also don't want to post if there's no effective change.
|
||||
$.post("update", {pointer: new_selected_id});
|
||||
$.post("/json/update_pointer", {pointer: new_selected_id});
|
||||
}
|
||||
selected_message_id = new_selected_id;
|
||||
selected_message = message;
|
||||
@@ -585,7 +585,7 @@ var get_updates_timeout;
|
||||
function get_updates() {
|
||||
get_updates_xhr = $.ajax({
|
||||
type: 'POST',
|
||||
url: 'get_updates',
|
||||
url: '/json/get_updates',
|
||||
data: received,
|
||||
dataType: 'json',
|
||||
timeout: 10*60*1000, // 10 minutes in ms
|
||||
|
||||
@@ -5,7 +5,7 @@ from django.db.models import Q
|
||||
|
||||
from zephyr.models import Message, UserProfile, Stream, Recipient, Subscription, \
|
||||
filter_by_subscriptions, Realm, do_send_message
|
||||
from zephyr.views import get_updates
|
||||
from zephyr.views import json_get_updates
|
||||
from zephyr.decorator import TornadoAsyncException
|
||||
|
||||
import datetime
|
||||
@@ -109,7 +109,7 @@ class PublicURLTest(TestCase):
|
||||
Pages that should return a 200 when not logged in.
|
||||
"""
|
||||
urls = {200: ["/accounts/home/", "/accounts/login/", "/accounts/logout/"],
|
||||
302: ["/", "/send_message/", "/json/subscriptions/list",
|
||||
302: ["/", "/json/send_message/", "/json/subscriptions/list",
|
||||
"/json/subscriptions/remove", "/json/subscriptions/add"],
|
||||
400: ["/accounts/register/"],
|
||||
}
|
||||
@@ -270,40 +270,40 @@ class PointerTest(AuthedTestCase):
|
||||
"""
|
||||
self.login("hamlet@humbughq.com", "hamlet")
|
||||
self.assertEquals(self.get_userprofile("hamlet@humbughq.com").pointer, -1)
|
||||
result = self.client.post("/update", {"pointer": 1})
|
||||
result = self.client.post("/json/update_pointer", {"pointer": 1})
|
||||
self.assert_json_success(result)
|
||||
self.assertEquals(self.get_userprofile("hamlet@humbughq.com").pointer, 1)
|
||||
|
||||
def test_missing_pointer(self):
|
||||
"""
|
||||
Posting json to /update which does not contain a pointer key/value pair
|
||||
Posting json to /json/update_pointer which does not contain a pointer key/value pair
|
||||
returns a 400 and error message.
|
||||
"""
|
||||
self.login("hamlet@humbughq.com", "hamlet")
|
||||
self.assertEquals(self.get_userprofile("hamlet@humbughq.com").pointer, -1)
|
||||
result = self.client.post("/update", {"foo": 1})
|
||||
result = self.client.post("/json/update_pointer", {"foo": 1})
|
||||
self.assert_json_error(result, "Missing pointer")
|
||||
self.assertEquals(self.get_userprofile("hamlet@humbughq.com").pointer, -1)
|
||||
|
||||
def test_invalid_pointer(self):
|
||||
"""
|
||||
Posting json to /update with an invalid pointer returns a 400 and error
|
||||
Posting json to /json/update_pointer with an invalid pointer returns a 400 and error
|
||||
message.
|
||||
"""
|
||||
self.login("hamlet@humbughq.com", "hamlet")
|
||||
self.assertEquals(self.get_userprofile("hamlet@humbughq.com").pointer, -1)
|
||||
result = self.client.post("/update", {"pointer": "foo"})
|
||||
result = self.client.post("/json/update_pointer", {"pointer": "foo"})
|
||||
self.assert_json_error(result, "Invalid pointer: must be an integer")
|
||||
self.assertEquals(self.get_userprofile("hamlet@humbughq.com").pointer, -1)
|
||||
|
||||
def test_pointer_out_of_range(self):
|
||||
"""
|
||||
Posting json to /update with an out of range (< 0) pointer returns a 400
|
||||
Posting json to /json/update_pointer with an out of range (< 0) pointer returns a 400
|
||||
and error message.
|
||||
"""
|
||||
self.login("hamlet@humbughq.com", "hamlet")
|
||||
self.assertEquals(self.get_userprofile("hamlet@humbughq.com").pointer, -1)
|
||||
result = self.client.post("/update", {"pointer": -2})
|
||||
result = self.client.post("/json/update_pointer", {"pointer": -2})
|
||||
self.assert_json_error(result, "Invalid pointer value")
|
||||
self.assertEquals(self.get_userprofile("hamlet@humbughq.com").pointer, -1)
|
||||
|
||||
@@ -316,7 +316,7 @@ class MessagePOSTTest(AuthedTestCase):
|
||||
successful.
|
||||
"""
|
||||
self.login("hamlet@humbughq.com", "hamlet")
|
||||
result = self.client.post("/send_message/", {"type": "stream",
|
||||
result = self.client.post("/json/send_message/", {"type": "stream",
|
||||
"stream": "Verona",
|
||||
"content": "Test message",
|
||||
"subject": "Test subject"})
|
||||
@@ -329,7 +329,7 @@ class MessagePOSTTest(AuthedTestCase):
|
||||
"""
|
||||
self.login("hamlet@humbughq.com", "hamlet")
|
||||
self.assertFalse(Stream.objects.filter(name="nonexistent_stream"))
|
||||
result = self.client.post("/send_message/", {"type": "stream",
|
||||
result = self.client.post("/json/send_message/", {"type": "stream",
|
||||
"stream": "nonexistent_stream",
|
||||
"content": "Test message",
|
||||
"subject": "Test subject"})
|
||||
@@ -341,7 +341,7 @@ class MessagePOSTTest(AuthedTestCase):
|
||||
Sending a personal message to a valid username is successful.
|
||||
"""
|
||||
self.login("hamlet@humbughq.com", "hamlet")
|
||||
result = self.client.post("/send_message/", {"type": "personal",
|
||||
result = self.client.post("/json/send_message/", {"type": "personal",
|
||||
"content": "Test message",
|
||||
"recipient": "othello@humbughq.com"})
|
||||
self.assert_json_success(result)
|
||||
@@ -351,7 +351,7 @@ class MessagePOSTTest(AuthedTestCase):
|
||||
Sending a personal message to an invalid email returns error JSON.
|
||||
"""
|
||||
self.login("hamlet@humbughq.com", "hamlet")
|
||||
result = self.client.post("/send_message/", {"type": "personal",
|
||||
result = self.client.post("/json/send_message/", {"type": "personal",
|
||||
"content": "Test message",
|
||||
"recipient": "nonexistent"})
|
||||
self.assert_json_error(result, "Invalid email 'nonexistent'")
|
||||
@@ -361,7 +361,7 @@ class MessagePOSTTest(AuthedTestCase):
|
||||
Sending a message of unknown type returns error JSON.
|
||||
"""
|
||||
self.login("hamlet@humbughq.com", "hamlet")
|
||||
result = self.client.post("/send_message/", {"type": "invalid type",
|
||||
result = self.client.post("/json/send_message/", {"type": "invalid type",
|
||||
"content": "Test message",
|
||||
"recipient": "othello@humbughq.com"})
|
||||
self.assert_json_error(result, "Invalid message type")
|
||||
@@ -387,9 +387,9 @@ class POSTRequestMock(object):
|
||||
class GetUpdatesTest(AuthedTestCase):
|
||||
fixtures = ['messages.json']
|
||||
|
||||
def test_get_updates(self):
|
||||
def test_json_get_updates(self):
|
||||
"""
|
||||
get_updates returns messages with IDs greater than the
|
||||
json_get_updates returns messages with IDs greater than the
|
||||
last_received ID.
|
||||
"""
|
||||
self.login("hamlet@humbughq.com", "hamlet")
|
||||
@@ -402,10 +402,10 @@ class GetUpdatesTest(AuthedTestCase):
|
||||
self.assertTrue(message.id > 1)
|
||||
|
||||
request = POSTRequestMock({"last": str(1), "first": str(1)}, user, callback)
|
||||
# get_updates returns None, which raises an exception in the
|
||||
# json_get_updates returns None, which raises an exception in the
|
||||
# @asynchronous decorator, which raises a TornadoAsyncException. So this
|
||||
# is expected, but should probably change.
|
||||
self.assertRaises(TornadoAsyncException, get_updates, request)
|
||||
self.assertRaises(TornadoAsyncException, json_get_updates, request)
|
||||
|
||||
def test_beyond_last_message(self):
|
||||
"""
|
||||
@@ -426,12 +426,12 @@ class GetUpdatesTest(AuthedTestCase):
|
||||
messages.extend(data)
|
||||
|
||||
request = POSTRequestMock({"last": str(last_received), "first": "1"}, user, callback)
|
||||
self.assertRaises(TornadoAsyncException, get_updates, request)
|
||||
self.assertRaises(TornadoAsyncException, json_get_updates, request)
|
||||
self.assertEquals(len(messages), 0)
|
||||
|
||||
def test_missing_last_received(self):
|
||||
"""
|
||||
Calling get_updates without a last_received key/value pair
|
||||
Calling json_get_updates without a last_received key/value pair
|
||||
returns a 400 and error message.
|
||||
"""
|
||||
self.login("hamlet@humbughq.com", "hamlet")
|
||||
@@ -444,4 +444,4 @@ class GetUpdatesTest(AuthedTestCase):
|
||||
self.assertTrue(message.id > 1)
|
||||
|
||||
request = POSTRequestMock({}, user, callback)
|
||||
self.assert_json_error(get_updates(request), "Missing message range")
|
||||
self.assert_json_error(json_get_updates(request), "Missing message range")
|
||||
|
||||
@@ -78,7 +78,7 @@ def get_stream(stream_name, realm):
|
||||
return None
|
||||
|
||||
@require_post
|
||||
def register(request):
|
||||
def accounts_register(request):
|
||||
key = request.POST['key']
|
||||
email = Confirmation.objects.get(confirmation_key=key).content_object.email
|
||||
company_name = email.split('@')[-1]
|
||||
@@ -183,7 +183,7 @@ def home(request):
|
||||
|
||||
@login_required
|
||||
@require_post
|
||||
def update(request):
|
||||
def json_update_pointer(request):
|
||||
user_profile = UserProfile.objects.get(user=request.user)
|
||||
pointer = request.POST.get('pointer')
|
||||
if not pointer:
|
||||
@@ -282,7 +282,7 @@ def get_updates_backend(request, user_profile, handler, **kwargs):
|
||||
@login_required
|
||||
@asynchronous
|
||||
@require_post
|
||||
def get_updates(request, handler):
|
||||
def json_get_updates(request, handler):
|
||||
if not ('last' in request.POST and 'first' in request.POST):
|
||||
return json_error("Missing message range")
|
||||
user_profile = UserProfile.objects.get(user=request.user)
|
||||
@@ -309,7 +309,7 @@ def api_send_message(request, user_profile):
|
||||
|
||||
@login_required
|
||||
@require_post
|
||||
def send_message(request):
|
||||
def json_send_message(request):
|
||||
user_profile = UserProfile.objects.get(user=request.user)
|
||||
if 'time' in request.POST:
|
||||
return json_error("Invalid field 'time'")
|
||||
@@ -549,7 +549,7 @@ def add_subscriptions_backend(request, user_profile, streams):
|
||||
|
||||
@login_required
|
||||
@require_post
|
||||
def change_settings(request):
|
||||
def json_change_settings(request):
|
||||
user_profile = UserProfile.objects.get(user=request.user)
|
||||
|
||||
# First validate all the inputs
|
||||
@@ -593,7 +593,7 @@ def change_settings(request):
|
||||
return json_success(result)
|
||||
|
||||
@login_required
|
||||
def stream_exists(request, stream):
|
||||
def json_stream_exists(request, stream):
|
||||
if not valid_stream_name(stream):
|
||||
return json_error("Invalid characters in stream name")
|
||||
return HttpResponse(
|
||||
|
||||
Reference in New Issue
Block a user