Code

Ticket #4119: ticket4119.diff

File ticket4119.diff, 4.8 KB (added by Chris Bennett <chrisrbennett@…>, 7 years ago)

fixes for this ticket

Line 
1Index: django/core/servers/basehttp.py
2===================================================================
3--- django/core/servers/basehttp.py     (revision 5319)
4+++ django/core/servers/basehttp.py     (working copy)
5@@ -9,7 +9,7 @@
6 
7 from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
8 from types import ListType, StringType
9-import os, re, sys, time, urllib
10+import os, re, email.utils, sys, urllib
11 
12 __version__ = "0.1"
13 __all__ = ['WSGIServer','WSGIRequestHandler','demo_app']
14@@ -370,7 +370,7 @@
15                 self._write('HTTP/%s %s\r\n' % (self.http_version,self.status))
16                 if 'Date' not in self.headers:
17                     self._write(
18-                        'Date: %s\r\n' % time.asctime(time.gmtime(time.time()))
19+                        'Date: %s\r\n' % email.utils.formatdate()[:26] + "GMT"
20                     )
21                 if self.server_software and 'Server' not in self.headers:
22                     self._write('Server: %s\r\n' % self.server_software)
23Index: django/contrib/sessions/middleware.py
24===================================================================
25--- django/contrib/sessions/middleware.py       (revision 5319)
26+++ django/contrib/sessions/middleware.py       (working copy)
27@@ -2,7 +2,7 @@
28 from django.contrib.sessions.models import Session
29 from django.core.exceptions import SuspiciousOperation
30 from django.utils.cache import patch_vary_headers
31-import datetime
32+import datetime, email.utils, time
33 
34 TEST_COOKIE_NAME = 'testcookie'
35 TEST_COOKIE_VALUE = 'worked'
36@@ -97,7 +97,12 @@
37                     expires = None
38                 else:
39                     max_age = settings.SESSION_COOKIE_AGE
40-                    expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE), "%a, %d-%b-%Y %H:%M:%S GMT")
41+                    rfcdate = email.utils.formatdate(time.time()
42+                                                     + settings.SESSION_COOKIE_AGE)
43+                    # Fixed length date must have '-' separation in the format DD-MMM-YYYY
44+                    # for compliance with Netscape cookie standard
45+                    expires = (rfcdate[:7] + "-" + rfcdate[8:11]
46+                               + "-" + rfcdate[12:26] + "GMT")
47                 new_session = Session.objects.save(session_key, request.session._session,
48                     datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE))
49                 response.set_cookie(settings.SESSION_COOKIE_NAME, session_key,
50Index: django/utils/cache.py
51===================================================================
52--- django/utils/cache.py       (revision 5319)
53+++ django/utils/cache.py       (working copy)
54@@ -17,7 +17,7 @@
55 "Accept-language" header.
56 """
57 
58-import datetime, md5, re
59+import email.utils, md5, re, time
60 from django.conf import settings
61 from django.core.cache import cache
62 
63@@ -43,7 +43,7 @@
64             return (t[0].lower().replace('-', '_'), True)
65 
66     def dictvalue(t):
67-        if t[1] == True:
68+        if t[1] is True:
69             return t[0]
70         else:
71             return t[0] + '=' + str(t[1])
72@@ -72,16 +72,15 @@
73     """
74     if cache_timeout is None:
75         cache_timeout = settings.CACHE_MIDDLEWARE_SECONDS
76-    now = datetime.datetime.utcnow()
77+    if cache_timeout < 0:
78+        cache_timeout = 0 # Can't have max-age negative
79     if not response.has_header('ETag'):
80         response['ETag'] = md5.new(response.content).hexdigest()
81     if not response.has_header('Last-Modified'):
82-        response['Last-Modified'] = now.strftime('%a, %d %b %Y %H:%M:%S GMT')
83+        response['Last-Modified'] = email.utils.formatdate()[:26] + "GMT"
84     if not response.has_header('Expires'):
85-        expires = now + datetime.timedelta(0, cache_timeout)
86-        response['Expires'] = expires.strftime('%a, %d %b %Y %H:%M:%S GMT')
87-    if cache_timeout < 0:
88-        cache_timeout = 0 # Can't have max-age negative
89+        response['Expires'] = email.utils.formatdate(time.time()
90+                                                    + cache_timeout)[:26] + "GMT"
91     patch_cache_control(response, max_age=cache_timeout)
92 
93 def add_never_cache_headers(response):
94Index: django/middleware/http.py
95===================================================================
96--- django/middleware/http.py   (revision 5319)
97+++ django/middleware/http.py   (working copy)
98@@ -1,4 +1,4 @@
99-import datetime
100+import email.utils
101 
102 class ConditionalGetMiddleware(object):
103     """
104@@ -11,8 +11,7 @@
105     Also sets the Date and Content-Length response-headers.
106     """
107     def process_response(self, request, response):
108-        now = datetime.datetime.utcnow()
109-        response['Date'] = now.strftime('%a, %d %b %Y %H:%M:%S GMT')
110+        response['Date'] = email.utils.formatdate()[:26] + "GMT"
111         if not response.has_header('Content-Length'):
112             response['Content-Length'] = str(len(response.content))
113