[Repoze-checkins] r1210 - repoze.debug/trunk/repoze/debug

Chris McDonough chrism at agendaless.com
Tue Jul 1 13:29:04 EDT 2008


Author: Chris McDonough <chrism at agendaless.com>
Date: Tue Jul  1 13:29:03 2008
New Revision: 1210

Log:
Dont catch errors; use less of WebOb; remove potential security hazard from getStatic by using os.listdir.


Modified:
   repoze.debug/trunk/repoze/debug/ui.py

Modified: repoze.debug/trunk/repoze/debug/ui.py
==============================================================================
--- repoze.debug/trunk/repoze/debug/ui.py	(original)
+++ repoze.debug/trunk/repoze/debug/ui.py	Tue Jul  1 13:29:03 2008
@@ -9,7 +9,6 @@
 import time
 
 from webob import exc
-from webob import Request
 from webob import Response
 
 _HERE = os.path.abspath(os.path.dirname(__file__))
@@ -32,30 +31,26 @@
 
     def __call__(self, environ, start_response):
         """Pick apart this debug URL and return the correct response"""
+        path = environ['PATH_INFO']
 
-        # Make WebOb versions of request and response
-        req = Request(environ)
-
-        try:
-            # Process the request
-            if req.url.find(gui_flag + "/static/") > -1:
-                resp = self.getStatic(req)
-            elif req.url.find(gui_flag + "feed.xml"):
-                resp = self.getFeed(req)
-        except ValueError, e:
-            resp = exc.HTTPBadRequest(str(e))
-        except exc.HTTPException, e:
-            resp = e
+        if '/static/' in path:
+            resp = self.getStatic(path)
+        elif gui_flag + '/feed.xml' in path:
+            resp = self.getFeed()
+        else:
+            raise ValueError('No such handler for debug ui: %s', req.url)
 
         return resp(environ, start_response)
 
-    def getStatic(self, req):
+    def getStatic(self, path):
+        fn = path.split('/')[-1]
 
-        fn = req.url.split("/")[-1]
+        if not (fn in os.listdir(self.static_dir)):
+            raise ValueError('No such static file %s' % fn)
+        
         filename = os.path.join(self.static_dir, fn)
         res = Response(content_type=get_mimetype(filename))
         res.body = open(filename, 'rb').read()
-
         return res
 
     def _generateFeedTagURI(self, when, pid):
@@ -71,7 +66,7 @@
         pid = self.middleware.pid
         return 'tag:repoze.org,%s:%s-%s' % (date, entry['id'], pid)
 
-    def getFeed(self, req):
+    def getFeed(self):
         """Get XML representing information in the middleware"""
 
         entries_xml = []


More information about the Repoze-checkins mailing list