Use separate fcgi files for the authed and unauthed site.
authorEvan Broder <broder@mit.edu>
Sun, 20 Dec 2009 22:20:19 +0000 (17:20 -0500)
committerEvan Broder <broder@mit.edu>
Sun, 20 Dec 2009 22:20:19 +0000 (17:20 -0500)
This allows both of them to be mounted on / in their respective
CherryPy apps, which in turn eliminates any discrepancy between
"internal URLs" and "external URLs".

svn path=/package_branches/invirt-web/cherrypy-rebased/; revision=2729

code/auth.fcgi [moved from code/main.fcgi with 74% similarity]
code/unauth.fcgi [new file with mode: 0755]
files/etc/apache2/sites-available/default.mako
files/etc/apache2/sites-available/ssl.mako

similarity index 74%
rename from code/main.fcgi
rename to code/auth.fcgi
index b20cfeb..e48729a 100755 (executable)
@@ -1,10 +1,10 @@
 #!/usr/bin/python
-"""Main FastCGI entry point for web interface"""
+"""Main FastCGI entry point for authenticated web interface"""
 
 import cherrypy
 import os
 import sys
-from main import InvirtWeb, InvirtUnauthWeb
+from main import InvirtWeb
 
 dev = False
 base_dir = os.path.dirname(__file__)
@@ -42,14 +42,10 @@ if __name__ == "__main__":
             }
         }
                     
-    authApp = cherrypy.tree.mount(InvirtWeb(),
-                                  '/auth',
-                                  app_config)
-    authApp.merge(conf_file)
-    unauthApp = cherrypy.tree.mount(InvirtUnauthWeb(),
-                                    '/unauth',
-                                    app_config)
-    unauthApp.merge(conf_file)
+    app = cherrypy.tree.mount(InvirtWeb(),
+                              '/',
+                              app_config)
+    app.merge(conf_file)
     cherrypy.config.update(conf_file)
 
     if dev:
diff --git a/code/unauth.fcgi b/code/unauth.fcgi
new file mode 100755 (executable)
index 0000000..841da6a
--- /dev/null
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+"""Main FastCGI entry point for unauthenticated web interface"""
+
+import cherrypy
+import os
+import sys
+from main import InvirtUnauthWeb
+
+dev = False
+base_dir = os.path.dirname(__file__)
+
+def usage():
+    print >>sys.stderr, """%s [config]
+
+Run server as FastCGI, with CherryPy config from "main.conf".
+
+With `config`, run standalone with CherryPy config from `config`.
+""" % sys.argv[0]
+    sys.exit(2)
+
+if __name__ == "__main__":
+    static_dir = os.path.join(base_dir, 'static')
+
+    if len(sys.argv) > 2:
+        usage()
+    if len(sys.argv) > 1:
+        if sys.argv[1] in ('-h', '--help'):
+            usage()
+        conf_file = sys.argv[1]
+        dev = True
+    else:
+        conf_file = os.path.join(base_dir, 'main.conf')
+
+    app_config = {
+        '/': {
+            'tools.invirtwebstate.on': True,
+            },
+        '/static': {
+            'tools.staticdir.root': static_dir,
+            'tools.staticdir.on': True,
+            'tools.staticdir.dir': static_dir,
+            }
+        }
+                    
+    app = cherrypy.tree.mount(InvirtUnauthWeb(),
+                              '/',
+                              app_config)
+    app.merge(conf_file)
+    cherrypy.config.update(conf_file)
+
+    if dev:
+        cherrypy.server.quickstart()
+        cherrypy.engine.start()
+        cherrypy.engine.block()
+    else:
+        cherrypy.engine.start(blocking=False)
+        from flup.server.fcgi import WSGIServer
+        server = WSGIServer(cherrypy.tree)
+        server.run()
index 7ec0903..ac0cf4f 100644 (file)
@@ -23,7 +23,7 @@ NameVirtualHost *:80
        RewriteRule ^/trac(.*) ${tracuri}$1 [R,L]
        RewriteRule ^/invirt - [L]
        RewriteRule ^/kill.cgi - [L]
-       RewriteRule ^/(.*) /var/www/invirt-web/main.fcgi/unauth/$1 [L]
+       RewriteRule ^/(.*) /var/www/invirt-web/unauth.fcgi/$1 [L]
 
        ErrorLog /var/log/apache2/error.log
 
index 009b412..372563f 100644 (file)
@@ -26,7 +26,7 @@ ${caller.body()}
        RewriteRule ^/admin/static(.*) /static/$1 [L]
        RewriteRule ^/trac(.*) ${tracuri}$1 [R,L]
        RewriteRule ^/kill.cgi - [L]
-       RewriteRule ^/(.*) /var/www/invirt-web/main.fcgi/auth/$1 [L]
+       RewriteRule ^/(.*) /var/www/invirt-web/auth.fcgi/$1 [L]
 
        RewriteLog /var/log/apache2/rewrite.log
        RewriteLogLevel 0