diff libervia_server/__init__.py @ 421:39b07289ff42

server_side: added parameter port_https_ext (external port for HTTPS, used for example for the redirection)
author souliane <souliane@mailoo.org>
date Tue, 25 Mar 2014 16:09:12 +0100
parents 2bd609d7dd65
children b5b440e6ea16
line wrap: on
line diff
--- a/libervia_server/__init__.py	Mon Mar 24 17:18:09 2014 +0100
+++ b/libervia_server/__init__.py	Tue Mar 25 16:09:12 2014 +0100
@@ -789,7 +789,7 @@
             return None
         text = D_("You are about to connect to an unsecured service.")
         if self.sat_host.connection_type == 'both':
-            new_port = (':%s' % self.sat_host.port_https) if self.sat_host.port_https != HTTPS_PORT else ''
+            new_port = (':%s' % self.sat_host.port_https_ext) if self.sat_host.port_https_ext != HTTPS_PORT else ''
             url = "https://%s" % self.request.URLPath().netloc.replace(':%s' % self.sat_host.port, new_port)
             text += D_('<br />Secure version of this website: <a href="%(url)s">%(url)s</a>') % {'url': url}
         return text
@@ -997,6 +997,7 @@
     OPT_PARAMETERS = [['connection_type', 't', 'https', "'http', 'https' or 'both' (to launch both servers).", coerceConnectionType],
                       ['port', 'p', 8080, 'The port number to listen HTTP on.', int],
                       ['port_https', 's', 8443, 'The port number to listen HTTPS on.', int],
+                      ['port_https_ext', 'e', 0, 'The external port number used for HTTPS (0 means port_https value).', int],
                       ['ssl_certificate', 'c', 'libervia.pem', 'PEM certificate with both private and public parts.', str],
                       ['redirect_to_https', 'r', 1, 'automatically redirect from HTTP to HTTPS.', int],
                       ['security_warning', 'w', 1, 'warn user that he is about to connect on HTTP.', int],
@@ -1012,6 +1013,9 @@
         self.connection_type = kwargs['connection_type']
         self.port = kwargs['port']
         self.port_https = kwargs['port_https']
+        self.port_https_ext = kwargs['port_https_ext']
+        if not self.port_https_ext:
+            self.port_https_ext = self.port_https
         self.ssl_certificate = kwargs['ssl_certificate']
         self.redirect_to_https = kwargs['redirect_to_https']
         self.security_warning = kwargs['security_warning']
@@ -1073,7 +1077,7 @@
             if not ssl_available:
                 raise(ImportError(_("Python module pyOpenSSL is not installed!")))
             try:
-                with open(self.ssl_certificate) as keyAndCert:
+                with open(os.path.expanduser(self.ssl_certificate)) as keyAndCert:
                     try:
                         cert = ssl.PrivateCertificate.loadPEM(keyAndCert.read())
                     except OpenSSL.crypto.Error as e:
@@ -1085,7 +1089,7 @@
             reactor.listenSSL(self.port_https, self.site, cert.options())
         if self.connection_type in ('http', 'both'):
             if self.connection_type == 'both' and self.redirect_to_https:
-                reactor.listenTCP(self.port, server.Site(RedirectToHTTPS(self.port, self.port_https)))
+                reactor.listenTCP(self.port, server.Site(RedirectToHTTPS(self.port, self.port_https_ext)))
             else:
                 reactor.listenTCP(self.port, self.site)