summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiovane <giovaneliberato@gmail.com>2015-09-03 18:37:03 -0300
committerGiovane <giovaneliberato@gmail.com>2015-09-03 18:39:47 -0300
commit7f600c988e0a1626ca0e24a1d7a1fa7797771915 (patch)
treed3d5b5a8cdc9a480ab289c92335cbb239b0d43ae
parent19cda9ca7aa1aca18f61ebf659fc490f8ad4c15a (diff)
#304 Adds PixelatedSite class to hold custom request configuration and remove foundation inline javascript.
-rw-r--r--service/pixelated/application.py9
-rw-r--r--service/pixelated/config/site.py11
-rw-r--r--service/test/support/integration/app_test_client.py6
-rw-r--r--service/test/unit/config/test_site.py24
-rw-r--r--web-ui/app/index.html5
-rw-r--r--web-ui/app/js/foundation/initialize_foundation.js3
6 files changed, 47 insertions, 11 deletions
diff --git a/service/pixelated/application.py b/service/pixelated/application.py
index b44a9893..e7afa341 100644
--- a/service/pixelated/application.py
+++ b/service/pixelated/application.py
@@ -15,9 +15,7 @@
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
from twisted.internet import reactor
-from twisted.internet.threads import deferToThread
from twisted.internet import defer
-from twisted.web.server import Site
from twisted.internet import ssl
from OpenSSL import SSL
from OpenSSL import crypto
@@ -26,6 +24,7 @@ from pixelated.config import arguments
from pixelated.config.services import Services
from pixelated.config.leap import initialize_leap
from pixelated.config import logger
+from pixelated.config.site import PixelatedSite
from pixelated.resources.loading_page import LoadingResource
from pixelated.resources.root_resource import RootResource
@@ -46,9 +45,9 @@ def start_user_agent(loading_app, host, port, sslkey, sslcert, leap_home, leap_s
services.draft_service)
if sslkey and sslcert:
- reactor.listenSSL(port, Site(resource), _ssl_options(sslkey, sslcert), interface=host)
+ reactor.listenSSL(port, PixelatedSite(resource), _ssl_options(sslkey, sslcert), interface=host)
else:
- reactor.listenTCP(port, Site(resource), interface=host)
+ reactor.listenTCP(port, PixelatedSite(resource), interface=host)
# soledad needs lots of threads
reactor.threadpool.adjustPoolsize(5, 15)
@@ -73,7 +72,7 @@ def initialize():
args = arguments.parse_user_agent_args()
logger.init(debug=args.debug)
- loading_app = reactor.listenTCP(args.port, Site(LoadingResource()), interface=args.host)
+ loading_app = reactor.listenTCP(args.port, PixelatedSite(LoadingResource()), interface=args.host)
deferred = initialize_leap(args.leap_provider_cert,
args.leap_provider_cert_fingerprint,
diff --git a/service/pixelated/config/site.py b/service/pixelated/config/site.py
new file mode 100644
index 00000000..c6e55102
--- /dev/null
+++ b/service/pixelated/config/site.py
@@ -0,0 +1,11 @@
+from twisted.web.server import Site, Request
+
+
+class AddCSPHeaderRequest(Request):
+ def process(self):
+ self.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'")
+ Request.process(self)
+
+
+class PixelatedSite(Site):
+ requestFactory = AddCSPHeaderRequest
diff --git a/service/test/support/integration/app_test_client.py b/service/test/support/integration/app_test_client.py
index 51fbf483..e44a8c10 100644
--- a/service/test/support/integration/app_test_client.py
+++ b/service/test/support/integration/app_test_client.py
@@ -30,7 +30,9 @@ from mock import Mock
from twisted.internet import reactor, defer
from twisted.internet.defer import succeed
from twisted.web.resource import getChildForRequest
-from twisted.web.server import Site
+# from twisted.web.server import Site as PixelatedSite
+from pixelated.config.site import PixelatedSite
+
from pixelated.adapter.mailstore import LeapMailStore
from pixelated.adapter.mailstore.searchable_mailstore import SearchableMailStore
@@ -106,7 +108,7 @@ class AppTestClient(object):
return d, request
def listenTCP(self, port=4567, host='127.0.0.1'):
- reactor.listenTCP(port, Site(self.resource), interface=host)
+ reactor.listenTCP(port, PixelatedSite(self.resource), interface=host)
def run_on_a_thread(self, logfile='/tmp/app_test_client.log', port=4567, host='127.0.0.1'):
def _start():
diff --git a/service/test/unit/config/test_site.py b/service/test/unit/config/test_site.py
new file mode 100644
index 00000000..77d42ed8
--- /dev/null
+++ b/service/test/unit/config/test_site.py
@@ -0,0 +1,24 @@
+import unittest
+from mockito import mock
+from pixelated.config.site import PixelatedSite
+from twisted.protocols.basic import LineReceiver
+
+
+class TestPixelatedSite(unittest.TestCase):
+ def test_add_csp_header_request(self):
+ request = self.create_request()
+ request.process()
+ headers = request.headers
+ self.assertEqual(headers.get("Content-Security-Policy"), "default-src 'self'; style-src 'self' 'unsafe-inline'")
+
+ def create_request(self):
+ channel = LineReceiver()
+ channel.site = PixelatedSite(mock())
+ request = PixelatedSite.requestFactory(channel=channel, queued=True)
+ request.method = "GET"
+ request.uri = "localhost"
+ request.clientproto = 'HTTP/1.1'
+ request.prepath = []
+ request.postpath = request.uri.split('/')[1:]
+ request.path = "/"
+ return request
diff --git a/web-ui/app/index.html b/web-ui/app/index.html
index cbdae267..0f4a36f8 100644
--- a/web-ui/app/index.html
+++ b/web-ui/app/index.html
@@ -16,7 +16,6 @@
</head>
<body>
-
<div class="off-canvas-wrap move-right menu" data-offcanvas>
<div class="inner-wrap">
<section id="left-pane" class="left-off-canvas-menu">
@@ -100,8 +99,6 @@
<script src="assets/bower_components/requirejs/require.js" data-main="assets/js/main.js"></script>
<!--usemin_end-->
-<script>
-$(document).foundation();
-</script>
+<script src="assets/js/foundation/initialize_foundation.js"></script>
</body>
</html>
diff --git a/web-ui/app/js/foundation/initialize_foundation.js b/web-ui/app/js/foundation/initialize_foundation.js
new file mode 100644
index 00000000..75513d59
--- /dev/null
+++ b/web-ui/app/js/foundation/initialize_foundation.js
@@ -0,0 +1,3 @@
+'use strict'
+
+$(document).foundation();