Deduplicate the code in auth.fcgi and unauth.fcgi
[invirt/packages/invirt-web.git] / code / invirt.fcgi
1 #!/usr/bin/python
2 """Main FastCGI entry point for web interface"""
3
4 import cherrypy
5 import os
6 import sys
7
8 import main
9
10 dev = False
11 base_dir = os.path.dirname(__file__)
12
13 def usage():
14     print >>sys.stderr, """%s [config]
15
16 Run server as FastCGI, with CherryPy config from "main.conf".
17
18 With `config`, run standalone with CherryPy config from `config`.
19
20 Run this script as either 'auth.fcgi' or 'unauth.fcgi', to get
21 the authenticated or unauthenticated site respectively.
22 """ % sys.argv[0]
23     sys.exit(2)
24
25 if __name__ == "__main__":
26     if len(sys.argv) > 2:
27         usage()
28     if len(sys.argv) > 1:
29         if sys.argv[1] in ('-h', '--help'):
30             usage()
31         conf_file = sys.argv[1]
32         dev = True
33     else:
34         conf_file = os.path.join(base_dir, 'main.conf')
35
36     app_config = {
37         '/': {
38             'tools.invirtwebstate.on': True,
39             },
40         }
41
42     if os.path.basename(sys.argv[0]).startswith('auth'):
43         root = InvirtWeb()
44     elif os.path.basename(sys.argv[0]).startswith('unauth'):
45         root = InvirtUnauthWeb()
46     else:
47         usage()
48
49     app = cherrypy.tree.mount(root, '/', app_config)
50     app.merge(conf_file)
51     cherrypy.config.update(conf_file)
52
53     if dev:
54         cherrypy.server.quickstart()
55         cherrypy.engine.start()
56         cherrypy.engine.block()
57     else:
58         cherrypy.engine.start(blocking=False)
59         from flup.server.fcgi import WSGIServer
60         server = WSGIServer(cherrypy.tree)
61         server.run()