summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2006-07-21 16:20:22 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2006-07-21 16:20:22 +0000
commite9a236d86c82133ab1959e4ea4760ebe6f73bd8e (patch)
tree3a8f05df528fc6b5c853cb66c3718d6c33af7654 /django
parent8bdd19beea3002d8b99cbaaab9624dca8f7a8694 (diff)
Fixed #2092: added a "is_secure()" method to HttpRequest which correctly handles the subtleties of mod_python's interaction with os.environ. This one's been bugging me for about a *year*, so many many thanks to k.shaposhnikov@gmail.com for figuring it out, and Tim Shaffer for pointing out this ticket.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@3410 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/contrib/admin/views/doc.py2
-rw-r--r--django/core/handlers/modpython.py3
-rw-r--r--django/core/handlers/wsgi.py5
-rw-r--r--django/http/__init__.py4
-rw-r--r--django/middleware/common.py4
-rw-r--r--django/views/debug.py4
6 files changed, 16 insertions, 6 deletions
diff --git a/django/contrib/admin/views/doc.py b/django/contrib/admin/views/doc.py
index 5aa143e1fd..68799fcc17 100644
--- a/django/contrib/admin/views/doc.py
+++ b/django/contrib/admin/views/doc.py
@@ -28,7 +28,7 @@ def bookmarklets(request):
# Hack! This couples this view to the URL it lives at.
admin_root = request.path[:-len('doc/bookmarklets/')]
return render_to_response('admin_doc/bookmarklets.html', {
- 'admin_url': "%s://%s%s" % (os.environ.get('HTTPS') == 'on' and 'https' or 'http', get_host(request), admin_root),
+ 'admin_url': "%s://%s%s" % (request.is_secure() and 'https' or 'http', get_host(request), admin_root),
}, context_instance=RequestContext(request))
bookmarklets = staff_member_required(bookmarklets)
diff --git a/django/core/handlers/modpython.py b/django/core/handlers/modpython.py
index 5a20ce9f67..8da8ca41d1 100644
--- a/django/core/handlers/modpython.py
+++ b/django/core/handlers/modpython.py
@@ -23,6 +23,9 @@ class ModPythonRequest(http.HttpRequest):
def get_full_path(self):
return '%s%s' % (self.path, self._req.args and ('?' + self._req.args) or '')
+ def is_secure(self):
+ return self._req.subprocess_env.has_key('HTTPS') and self._req.subprocess_env['HTTPS'] == 'on'
+
def _load_post_and_files(self):
"Populates self._post and self._files"
if self._req.headers_in.has_key('content-type') and self._req.headers_in['content-type'].startswith('multipart'):
diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py
index 2f0d4f78b4..c53e428f85 100644
--- a/django/core/handlers/wsgi.py
+++ b/django/core/handlers/wsgi.py
@@ -54,7 +54,7 @@ class WSGIRequest(http.HttpRequest):
def __init__(self, environ):
self.environ = environ
self.path = environ['PATH_INFO']
- self.META = environ
+ self.META = environ
self.method = environ['REQUEST_METHOD'].upper()
def __repr__(self):
@@ -66,6 +66,9 @@ class WSGIRequest(http.HttpRequest):
def get_full_path(self):
return '%s%s' % (self.path, self.environ.get('QUERY_STRING', '') and ('?' + self.environ.get('QUERY_STRING', '')) or '')
+ def is_secure(self):
+ return self.environ.has_key('HTTPS') and self.environ['HTTPS'] == 'on'
+
def _load_post_and_files(self):
# Populates self._post and self._files
if self.method == 'POST':
diff --git a/django/http/__init__.py b/django/http/__init__.py
index 8fb4b293fc..06f6a106ee 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -1,3 +1,4 @@
+import os
from Cookie import SimpleCookie
from pprint import pformat
from urllib import urlencode, quote
@@ -37,6 +38,9 @@ class HttpRequest(object):
def get_full_path(self):
return ''
+
+ def is_secure(self):
+ return os.environ.get("HTTPS") == "on"
def parse_file_upload(header_dict, post_data):
"Returns a tuple of (POST MultiValueDict, FILES MultiValueDict)"
diff --git a/django/middleware/common.py b/django/middleware/common.py
index a42c54751d..d63b71fed7 100644
--- a/django/middleware/common.py
+++ b/django/middleware/common.py
@@ -1,7 +1,7 @@
from django.conf import settings
from django import http
from django.core.mail import mail_managers
-import md5, os
+import md5
class CommonMiddleware(object):
"""
@@ -44,7 +44,7 @@ class CommonMiddleware(object):
if new_url != old_url:
# Redirect
if new_url[0]:
- newurl = "%s://%s%s" % (os.environ.get('HTTPS') == 'on' and 'https' or 'http', new_url[0], new_url[1])
+ newurl = "%s://%s%s" % (request.is_secure() and 'https' or 'http', new_url[0], new_url[1])
else:
newurl = new_url[1]
if request.GET:
diff --git a/django/views/debug.py b/django/views/debug.py
index 6cbbde987b..ffcb284a86 100644
--- a/django/views/debug.py
+++ b/django/views/debug.py
@@ -124,7 +124,7 @@ def technical_500_response(request, exc_type, exc_value, tb):
'frames': frames,
'lastframe': frames[-1],
'request': request,
- 'request_protocol': os.environ.get("HTTPS") == "on" and "https" or "http",
+ 'request_protocol': request.is_secure() and "https" or "http",
'settings': get_safe_settings(),
'template_info': template_info,
'template_does_not_exist': template_does_not_exist,
@@ -149,7 +149,7 @@ def technical_404_response(request, exception):
'urlpatterns': tried,
'reason': str(exception),
'request': request,
- 'request_protocol': os.environ.get("HTTPS") == "on" and "https" or "http",
+ 'request_protocol': request.is_secure() and "https" or "http",
'settings': get_safe_settings(),
})
return HttpResponseNotFound(t.render(c), mimetype='text/html')