diff options
Diffstat (limited to 'scripts/webui.cgi')
| -rwxr-xr-x | scripts/webui.cgi | 110 |
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() + |
