serve developer-registration login not /firefox/users/login (bug 728465)
This commit is contained in:
Родитель
94ebd0b92f
Коммит
e9155de126
|
@ -4,7 +4,6 @@ Borrowed from: http://code.google.com/p/django-localeurl
|
||||||
Note: didn't make sense to use localeurl since we need to capture app as well
|
Note: didn't make sense to use localeurl since we need to capture app as well
|
||||||
"""
|
"""
|
||||||
import contextlib
|
import contextlib
|
||||||
import time
|
|
||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -38,9 +37,12 @@ class LocaleAndAppURLMiddleware(object):
|
||||||
def process_request(self, request):
|
def process_request(self, request):
|
||||||
# Find locale, app
|
# Find locale, app
|
||||||
prefixer = urlresolvers.Prefixer(request)
|
prefixer = urlresolvers.Prefixer(request)
|
||||||
# Force en-US until we localize Marketplace.
|
redirect_type = HttpResponsePermanentRedirect
|
||||||
if settings.APP_PREVIEW:
|
if settings.MARKETPLACE:
|
||||||
|
# Force en-US until we localize Marketplace.
|
||||||
prefixer.locale = 'en-US'
|
prefixer.locale = 'en-US'
|
||||||
|
# Use 302 redirects if these URLs are gonna change.
|
||||||
|
redirect_type = redirect
|
||||||
urlresolvers.set_url_prefix(prefixer)
|
urlresolvers.set_url_prefix(prefixer)
|
||||||
full_path = prefixer.fix(prefixer.shortened_path)
|
full_path = prefixer.fix(prefixer.shortened_path)
|
||||||
|
|
||||||
|
@ -51,7 +53,7 @@ class LocaleAndAppURLMiddleware(object):
|
||||||
new_path = prefixer.fix(prefixer.shortened_path)
|
new_path = prefixer.fix(prefixer.shortened_path)
|
||||||
query = dict((smart_str(k), request.GET[k]) for k in request.GET)
|
query = dict((smart_str(k), request.GET[k]) for k in request.GET)
|
||||||
query.pop('lang')
|
query.pop('lang')
|
||||||
return HttpResponsePermanentRedirect(urlparams(new_path, **query))
|
return redirect_type(urlparams(new_path, **query))
|
||||||
|
|
||||||
if full_path != request.path:
|
if full_path != request.path:
|
||||||
query_string = request.META.get('QUERY_STRING', '')
|
query_string = request.META.get('QUERY_STRING', '')
|
||||||
|
@ -60,9 +62,9 @@ class LocaleAndAppURLMiddleware(object):
|
||||||
if query_string:
|
if query_string:
|
||||||
full_path = "%s?%s" % (full_path, query_string)
|
full_path = "%s?%s" % (full_path, query_string)
|
||||||
|
|
||||||
response = HttpResponsePermanentRedirect(full_path)
|
response = redirect_type(full_path)
|
||||||
# Cache the redirect for a year.
|
# Cache the redirect for a year. But not for Marketplace!
|
||||||
if not settings.DEBUG:
|
if not (settings.DEBUG or settings.MARKETPLACE):
|
||||||
patch_cache_control(response, max_age=60 * 60 * 24 * 365)
|
patch_cache_control(response, max_age=60 * 60 * 24 * 365)
|
||||||
|
|
||||||
# Vary on Accept-Language or User-Agent if we changed the locale or
|
# Vary on Accept-Language or User-Agent if we changed the locale or
|
||||||
|
|
|
@ -239,9 +239,9 @@ class TestCase(RedisTest, test_utils.TestCase):
|
||||||
% (k, msg))
|
% (k, msg))
|
||||||
self.assertEquals(v.non_field_errors(), [])
|
self.assertEquals(v.non_field_errors(), [])
|
||||||
|
|
||||||
def assertLoginRedirects(self, response, to):
|
def assertLoginRedirects(self, response, to, status_code=302):
|
||||||
self.assertRedirects(response,
|
self.assertRedirects(response,
|
||||||
'%s?to=%s' % (reverse('users.login'), to), 302)
|
'%s?to=%s' % (reverse('users.login'), to), status_code)
|
||||||
|
|
||||||
|
|
||||||
class AMOPaths(object):
|
class AMOPaths(object):
|
||||||
|
|
|
@ -42,8 +42,8 @@ class MiddlewareTest(test.TestCase):
|
||||||
eq_(response.status_code, 301)
|
eq_(response.status_code, 301)
|
||||||
eq_(response['Location'], location)
|
eq_(response['Location'], location)
|
||||||
|
|
||||||
@patch.object(settings, 'APP_PREVIEW', True) # To disable L10n detection.
|
# Patch for /developers/ redirect and l10n detection disabling.
|
||||||
@patch.object(settings, 'MARKETPLACE', True) # For /developers/ redirect.
|
@patch.object(settings, 'MARKETPLACE', True)
|
||||||
def test_marketplace_redirection(self):
|
def test_marketplace_redirection(self):
|
||||||
# We're forcing en-US since Marketplace isn't localized yet.
|
# We're forcing en-US since Marketplace isn't localized yet.
|
||||||
redirections = {
|
redirections = {
|
||||||
|
@ -53,10 +53,11 @@ class MiddlewareTest(test.TestCase):
|
||||||
'/fr/developers': '/en-US/developers',
|
'/fr/developers': '/en-US/developers',
|
||||||
}
|
}
|
||||||
for path, location in redirections.items():
|
for path, location in redirections.items():
|
||||||
response = self.middleware.process_request(self.rf.get(path))
|
r = self.middleware.process_request(self.rf.get(path))
|
||||||
eq_(response.status_code, 301, 'Expected a 301 for %s' % path)
|
eq_(r.status_code, 302,
|
||||||
eq_(response['Location'], location,
|
'Expected a 302 for %s. (Got a %s)' % (path, r.status_code))
|
||||||
'%s -> %s went to %s' % (path, location, response['Location']))
|
eq_(r['Location'], location,
|
||||||
|
'%s -> %s went to %s' % (path, location, r['Location']))
|
||||||
|
|
||||||
def process(self, *args, **kwargs):
|
def process(self, *args, **kwargs):
|
||||||
request = self.rf.get(*args, **kwargs)
|
request = self.rf.get(*args, **kwargs)
|
||||||
|
|
|
@ -87,9 +87,17 @@ class AppHubTest(HubTest):
|
||||||
|
|
||||||
class TestHome(HubTest):
|
class TestHome(HubTest):
|
||||||
|
|
||||||
|
def test_login_redirects(self):
|
||||||
|
self.client.logout()
|
||||||
|
# Ensure these URLs get temporarily redirected to the login page.
|
||||||
|
sources = [self.url, reverse('home')]
|
||||||
|
for src in sources:
|
||||||
|
r = self.client.get(self.url)
|
||||||
|
self.assertLoginRedirects(r, '/en-US/developers/', 302)
|
||||||
|
|
||||||
def test_home(self):
|
def test_home(self):
|
||||||
for url in [self.url, reverse('home')]:
|
for url in [self.url, reverse('home')]:
|
||||||
r = self.client.get(self.url, follow=True)
|
r = self.client.get(url, follow=True)
|
||||||
eq_(r.status_code, 200)
|
eq_(r.status_code, 200)
|
||||||
self.assertTemplateUsed(r, 'developers/index.html')
|
self.assertTemplateUsed(r, 'developers/index.html')
|
||||||
|
|
||||||
|
|
|
@ -524,7 +524,7 @@ class TestEditBasic(TestEdit):
|
||||||
Addon.objects.get(id=3615).update(default_locale='fr')
|
Addon.objects.get(id=3615).update(default_locale='fr')
|
||||||
for url in self.get_l10n_urls():
|
for url in self.get_l10n_urls():
|
||||||
url = '/id' + url[6:]
|
url = '/id' + url[6:]
|
||||||
r = self.client.get(url)
|
r = self.client.get(url, follow=True)
|
||||||
eq_(pq(r.content)('#l10n-menu').attr('data-default'), 'fr',
|
eq_(pq(r.content)('#l10n-menu').attr('data-default'), 'fr',
|
||||||
'l10n menu not visible for %s' % url)
|
'l10n menu not visible for %s' % url)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
"""Tests related to the ``mkt.developers.addons.owner`` view."""
|
"""Tests related to the ``mkt.developers.addons.owner`` view."""
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
import mock
|
||||||
from nose.tools import eq_
|
from nose.tools import eq_
|
||||||
from pyquery import PyQuery as pq
|
from pyquery import PyQuery as pq
|
||||||
import waffle
|
import waffle
|
||||||
|
@ -57,11 +60,17 @@ class TestEditPolicy(TestOwnership):
|
||||||
eq_(self.get_addon().eula, None)
|
eq_(self.get_addon().eula, None)
|
||||||
|
|
||||||
def test_edit_eula_locale(self):
|
def test_edit_eula_locale(self):
|
||||||
|
self.addon.eula = {'de': 'some eula', 'en-US': ''}
|
||||||
|
self.addon.save()
|
||||||
|
res = self.client.get(self.url.replace('en-US', 'it'), follow=True)
|
||||||
|
eq_(pq(res.content)('#id_has_eula').attr('checked'), 'checked')
|
||||||
|
|
||||||
|
@mock.patch.object(settings, 'MARKETPLACE', False)
|
||||||
|
def test_edit_eula_locale_with_l10n_detection(self):
|
||||||
self.addon.eula = {'de': 'some eula', 'en-US': ''}
|
self.addon.eula = {'de': 'some eula', 'en-US': ''}
|
||||||
self.addon.save()
|
self.addon.save()
|
||||||
res = self.client.get(self.url.replace('en-US', 'it'))
|
res = self.client.get(self.url.replace('en-US', 'it'))
|
||||||
doc = pq(res.content)
|
eq_(pq(res.content)('#id_has_eula').attr('checked'), 'checked')
|
||||||
eq_(doc('#id_has_eula').attr('checked'), 'checked')
|
|
||||||
|
|
||||||
|
|
||||||
class TestEditLicense(TestOwnership):
|
class TestEditLicense(TestOwnership):
|
||||||
|
|
|
@ -218,9 +218,6 @@ packager_patterns = patterns('',
|
||||||
urlpatterns = decorate(write, patterns('',
|
urlpatterns = decorate(write, patterns('',
|
||||||
url('^$', views.index, name='mkt.developers.index'),
|
url('^$', views.index, name='mkt.developers.index'),
|
||||||
|
|
||||||
# Developer Registration Login.
|
|
||||||
url('^login/$', views.login, name='mkt.developers.login'),
|
|
||||||
|
|
||||||
# Redirect people who have /addons/ instead of /addon/.
|
# Redirect people who have /addons/ instead of /addon/.
|
||||||
('^addons/\d+/.*',
|
('^addons/\d+/.*',
|
||||||
lambda r: redirect(r.path.replace('addons', 'addon', 1))),
|
lambda r: redirect(r.path.replace('addons', 'addon', 1))),
|
||||||
|
|
|
@ -102,6 +102,12 @@ def login(request, template=None):
|
||||||
return _login(request, template='developers/login.html')
|
return _login(request, template='developers/login.html')
|
||||||
|
|
||||||
|
|
||||||
|
def home(request):
|
||||||
|
# This is a temporary redirect.
|
||||||
|
return redirect('mkt.developers.index')
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
def index(request):
|
def index(request):
|
||||||
return jingo.render(request, 'developers/index.html')
|
return jingo.render(request, 'developers/index.html')
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,8 @@ APP_PREVIEW = True
|
||||||
# So temporary. Allow us to link to new devhub URLs from `Addon.get_dev_url()`.
|
# So temporary. Allow us to link to new devhub URLs from `Addon.get_dev_url()`.
|
||||||
MARKETPLACE = True
|
MARKETPLACE = True
|
||||||
|
|
||||||
# Pretty temporary. Set the correct home for Marketplace. Redirects are lame.
|
# Pretty temporary. Set the correct home for Marketplace. Redirects are sick!
|
||||||
HOME = 'mkt.developers.views.index'
|
HOME = 'mkt.developers.views.home'
|
||||||
|
|
||||||
ROOT_URLCONF = 'mkt.urls'
|
ROOT_URLCONF = 'mkt.urls'
|
||||||
INSTALLED_APPS += (
|
INSTALLED_APPS += (
|
||||||
|
@ -23,6 +23,7 @@ SUPPORTED_NONAPPS += (
|
||||||
'dev',
|
'dev',
|
||||||
'hub',
|
'hub',
|
||||||
'submit',
|
'submit',
|
||||||
|
'login',
|
||||||
)
|
)
|
||||||
|
|
||||||
MIDDLEWARE_CLASSES += (
|
MIDDLEWARE_CLASSES += (
|
||||||
|
|
11
mkt/urls.py
11
mkt/urls.py
|
@ -2,6 +2,7 @@ from django.conf import settings
|
||||||
from django.conf.urls.defaults import patterns, url, include
|
from django.conf.urls.defaults import patterns, url, include
|
||||||
|
|
||||||
from lib.urls_base import handler404, handler500, urlpatterns as base_urls
|
from lib.urls_base import handler404, handler500, urlpatterns as base_urls
|
||||||
|
from mkt.developers.views import login
|
||||||
|
|
||||||
|
|
||||||
# These URLs take precedence over existing ones.
|
# These URLs take precedence over existing ones.
|
||||||
|
@ -13,11 +14,19 @@ urlpatterns = patterns('',
|
||||||
('^hub/', include('mkt.hub.urls')),
|
('^hub/', include('mkt.hub.urls')),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# Add our old patterns.
|
# Add our old patterns.
|
||||||
urlpatterns += base_urls
|
urlpatterns += base_urls
|
||||||
|
|
||||||
|
|
||||||
# Marketplace UI Experiments
|
# Override old patterns.
|
||||||
|
urlpatterns += patterns('',
|
||||||
|
# Developer Registration Login.
|
||||||
|
url('^login$', login, name='users.login'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Marketplace UI Experiments.
|
||||||
if getattr(settings, 'POTCH_MARKETPLACE_EXPERIMENTS', False):
|
if getattr(settings, 'POTCH_MARKETPLACE_EXPERIMENTS', False):
|
||||||
urlpatterns += patterns('',
|
urlpatterns += patterns('',
|
||||||
('^marketplace-experiments/', include('mkt.experiments.urls'))
|
('^marketplace-experiments/', include('mkt.experiments.urls'))
|
||||||
|
|
Загрузка…
Ссылка в новой задаче