summaryrefslogtreecommitdiffstats
path: root/scripts/webui.cgi
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-09-19 18:14:03 -0400
committerMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-09-19 18:14:03 -0400
commit59fcf7bc502d250ea9cec8d9f9b0d2e3233d95e9 (patch)
tree24c5a646550e9977ed6107ef5a0c625143a9d263 /scripts/webui.cgi
parent0204e9181c5274d0c6db6daff4d997776703a9bb (diff)
Move all CGI scripts to a cobbler subdirectory under cgi-bin for namespacing.
In addition, the webui is now just "webui.cgi" in that directory. RPMs and setup.py also updated.
Diffstat (limited to 'scripts/webui.cgi')
-rwxr-xr-xscripts/webui.cgi110
1 files changed, 110 insertions, 0 deletions
diff --git a/scripts/webui.cgi b/scripts/webui.cgi
new file mode 100755
index 0000000..899610c
--- /dev/null
+++ b/scripts/webui.cgi
@@ -0,0 +1,110 @@
+#!/usr/bin/env python
+#
+# Web Interface for Cobbler - CGI Controller
+#
+# Copyright 2007 Albert P. Tobey <tobert@gmail.com>
+#
+# This software may be freely redistributed under the terms of the GNU
+# general public license.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+import cgi
+import cgitb
+import Cookie
+import os
+import sys
+from cobbler.webui.CobblerWeb import CobblerWeb
+
+def map_modes():
+ path = os.environ.get( 'PATH_INFO', 'index' )
+
+ if path.startswith('/'):
+ path = path[1:]
+ if path.endswith('/'):
+ path = path[:-1]
+
+ if path is '':
+ path = 'index'
+
+ return path
+
+def base_url():
+ return os.environ.get('SCRIPT_NAME', '')
+
+def configure():
+ # FIXME: read a config file ...
+ config = {
+ 'token': None,
+ 'server': None,
+ 'base_url': None,
+ 'username': None,
+ 'password': None,
+ 'cgitb_enabled': 1
+ }
+ #config.username = 'testuser',
+ #config.password = 'llamas2007'
+
+ # defaults
+ if config['server'] is None:
+ config['server'] = "http://localhost/cobbler_api_rw"
+
+ if config['base_url'] is None:
+ config['base_url'] = base_url()
+
+ return config
+
+def main():
+ content = "Something went wrong and I couldn't generate any content for you!"
+ cw_conf = configure()
+ path = map_modes()
+ form = cgi.parse()
+ cookies = Cookie.SimpleCookie(os.environ.get("HTTP_COOKIE",""))
+
+ # make cgitb enablement configurable
+ if cw_conf['cgitb_enabled'] == 1:
+ cgitb.enable()
+ cw_conf.pop('cgitb_enabled')
+
+ # exchnage single-element arrays in the 'form' dictionary for just that item
+ # so there isn't a ton of 'foo[0]' craziness where 'foo' should suffice
+ # - may be bad for form elements that are sometimes lists and sometimes
+ # single items
+ for key,val in form.items():
+ if isinstance(val, list):
+ if len(val) == 1:
+ form[key] = val[0]
+
+ # instantiate a CobblerWeb object
+ cw = CobblerWeb( **cw_conf )
+
+ # FIXME: allow for direct URL access and pages will redirect appropriately.
+
+ #if not path.startswith('login') and (cw_conf['token'] is None and (cw_conf['username'] is None or cw_conf['password'] is None)):
+ # func = getattr( cw, 'login' )
+ # content = func( message="Authentication Required." )
+
+ # check for a valid path/mode
+ if path in cw.modes():
+ func = getattr( cw, path )
+ content = func( **form )
+
+ # handle invalid paths gracefully
+ else:
+ func = getattr( cw, 'error_page' )
+ content = func( "Invalid Mode: \"%s\"" % path )
+
+ # finally, get any cookies generated by the CobblerWeb object
+ cookie_header = cw.cookies().output()
+ if cookie_header:
+ print cookie_header
+
+ # deliver content
+ print "Content-type: text/html"
+ print
+ print content
+
+main()
+