Edgewall Software

Opened 18 years ago

Last modified 9 years ago

#2553 closed defect

tracd reverts to http:// after a POST even if stunnel is being used via a https:// url. — at Version 1

Reported by: anonymous Owned by: Christian Boos
Priority: high Milestone: 0.10.5
Component: web frontend/tracd Version: devel
Severity: major Keywords: tracd https stunnel mod_proxy patch apache mod_python
Cc: jorge.vargas@… Branch:
Release Notes:
API Changes:
Internal Changes:

Description (last modified by Christian Boos)

Running tracd through stunnel, I access trac via a https://url/trac.Everything works fine until I change something (confirm a wiki edit, add anew ticket, login, etc.) and the url forwards to http://url/trac insteadof https.To fix this, I changed the self.scheme = 'http' in TracHTTPRequest instandalone.py to self.scheme='https'. But I imagine this shouldautodetect in some way.

Change History (1)

comment:1 by Christian Boos, 18 years ago

Description: modified (diff)
Milestone: 0.9.4
Owner: changed from Jonas Borgström to Christian Boos
Status: newassigned

One could use the Referer: header, if present.

Index: standalone.py
===================================================================
--- standalone.py       (revision 2721)
+++ standalone.py       (working copy)
@@ -325,21 +325,22 @@
         Request.__init__(self)
         self.__handler = handler
         self.__status_sent = False
-
-        self.scheme = 'http'
+        headers = handler.headers
+        self.scheme = 'http' # as default, but use Referer: header if
present
+        if headers.has_key('Referer'):
+            self.scheme = headers['Referer'].split(':')[0]
         self.method = self.__handler.command
         self.remote_addr = str(self.__handler.client_address[0])
         self.server_name = self.__handler.server.server_name
         self.server_port = self.__handler.server.server_port
-        if self.__handler.headers.has_key('Cookie'):
-            self.incookie.load(self.__handler.headers['Cookie'])
+        if headers.has_key('Cookie'):
+            self.incookie.load(headers['Cookie'])
         self.cgi_location = '/' + project_name
         self.idx_location = '/'
         environ = {'REQUEST_METHOD': self.method,
                    'QUERY_STRING': query_string}
-        headers = self.__handler.headers
         if self.method in ('GET', 'HEAD'):
             headers = None
         self.args = TracFieldStorage(self.__handler.rfile,
environ=environ,

Thoughts?

Note: See TracTickets for help on using tickets.