summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cobbler/remote.py8
-rw-r--r--cobbler/webui/CobblerWeb.py34
-rw-r--r--cobbler/webui/master.py30
-rw-r--r--config/cobbler.conf10
-rwxr-xr-xscripts/index.py59
-rw-r--r--webui_templates/distro_edit.tmpl3
-rw-r--r--webui_templates/distro_list.tmpl2
-rw-r--r--webui_templates/ksfile_edit.tmpl2
-rw-r--r--webui_templates/ksfile_list.tmpl4
-rw-r--r--webui_templates/master.tmpl24
-rw-r--r--webui_templates/paginate.tmpl6
-rw-r--r--webui_templates/profile_edit.tmpl2
-rw-r--r--webui_templates/profile_list.tmpl6
-rw-r--r--webui_templates/repo_edit.tmpl2
-rw-r--r--webui_templates/system_edit.tmpl4
-rw-r--r--webui_templates/system_list.tmpl4
16 files changed, 107 insertions, 93 deletions
diff --git a/cobbler/remote.py b/cobbler/remote.py
index dcc01d1..081f8c8 100644
--- a/cobbler/remote.py
+++ b/cobbler/remote.py
@@ -456,9 +456,9 @@ class CobblerReadWriteXMLRPCInterface(CobblerXMLRPCInterface):
self.logger.debug("invalid token: %s" % token)
raise CX(_("invalid token: %s" % token))
- def check_access(self,token,resource):
+ def check_access(self,token,resource,arg1=None,arg2=None):
validated = self.__validate_token(token)
- return self.__authorize(token,resource)
+ return self.__authorize(token,resource,arg1,arg2)
def __get_user_from_token(self,token):
if not self.token_cache.has_key(token):
@@ -481,9 +481,9 @@ class CobblerReadWriteXMLRPCInterface(CobblerXMLRPCInterface):
self.logger.info("login failed: %s" % login_user)
raise CX(_("login failed: %s") % login_user)
- def __authorize(self,token,resource):
+ def __authorize(self,token,resource,arg1=None,arg2=None):
user = self.__get_user_from_token(token)
- if self.authz.authorize(user,resource):
+ if self.authz.authorize(user,resource,arg1,arg2):
return True
else:
raise CX(_("user does not have access to resource: %s") % resource)
diff --git a/cobbler/webui/CobblerWeb.py b/cobbler/webui/CobblerWeb.py
index a69df82..9985994 100644
--- a/cobbler/webui/CobblerWeb.py
+++ b/cobbler/webui/CobblerWeb.py
@@ -20,7 +20,9 @@ from cobbler.utils import *
import logging
import sys
-LOGGING_ENABLED = False
+# FIXME: make logging use apache logging
+
+LOGGING_ENABLED = True
if LOGGING_ENABLED:
# set up logging
@@ -179,10 +181,10 @@ class CobblerWeb(object):
# Index
# ------------------------------------------------------------------------ #
- def index(self):
+ def index(self,**args):
return self.__render( 'index.tmpl', { } )
- def menu(self):
+ def menu(self,**args):
return self.__render( 'blank.tmpl', { } )
# ------------------------------------------------------------------------ #
@@ -206,7 +208,7 @@ class CobblerWeb(object):
# Distributions
# ------------------------------------------------------------------------ #
- def distro_list(self,page=None,limit=None):
+ def distro_list(self,page=None,limit=None,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -223,7 +225,7 @@ class CobblerWeb(object):
else:
return self.__render('empty.tmpl', {})
- def distro_edit(self, name=None):
+ def distro_edit(self, name=None,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -330,7 +332,7 @@ class CobblerWeb(object):
return (page, results_per_page, pages)
- def system_list(self,page=None,limit=None):
+ def system_list(self,page=None,limit=None,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -456,7 +458,7 @@ class CobblerWeb(object):
return self.system_list()
- def system_edit(self, name=None):
+ def system_edit(self, name=None,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -474,7 +476,7 @@ class CobblerWeb(object):
# ------------------------------------------------------------------------ #
# Profiles
# ------------------------------------------------------------------------ #
- def profile_list(self,page=None,limit=None):
+ def profile_list(self,page=None,limit=None,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -491,10 +493,10 @@ class CobblerWeb(object):
else:
return self.__render('empty.tmpl', {})
- def subprofile_edit(self, name=None):
+ def subprofile_edit(self, name=None,**spam):
return self.profile_edit(name,1)
- def profile_edit(self, name=None, subprofile=0):
+ def profile_edit(self, name=None, subprofile=0, **spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -611,7 +613,7 @@ class CobblerWeb(object):
# Repos
# ------------------------------------------------------------------------ #
- def repo_list(self,page=None,limit=None):
+ def repo_list(self,page=None,limit=None,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -628,7 +630,7 @@ class CobblerWeb(object):
else:
return self.__render('empty.tmpl', {})
- def repo_edit(self, name=None):
+ def repo_edit(self, name=None,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
@@ -706,14 +708,14 @@ class CobblerWeb(object):
# Kickstart files
# ------------------------------------------------------------------------ #
- def ksfile_list(self):
+ def ksfile_list(self,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
return self.__render( 'ksfile_list.tmpl', {
'ksfiles': self.remote.get_kickstart_templates(self.token)
} )
- def ksfile_edit(self, name=None):
+ def ksfile_edit(self, name=None,**spam):
if not self.__xmlrpc_setup():
return self.xmlrpc_auth_failure()
return self.__render( 'ksfile_edit.tmpl', {
@@ -757,7 +759,7 @@ class CobblerWeb(object):
mac = self.remote.get_random_mac()
return mac
- def error_page(self, message):
+ def error_page(self, message, **spam):
# hack to remove some junk from remote fault errors so they
# look as if they were locally generated and not exception-based.
@@ -769,7 +771,7 @@ class CobblerWeb(object):
'message': message
} )
- def xmlrpc_auth_failure(self):
+ def xmlrpc_auth_failure(self, **spam):
return self.__render( 'error_page.tmpl', {
'message': "XMLRPC Authentication Error. See Apache logs for details."
} )
diff --git a/cobbler/webui/master.py b/cobbler/webui/master.py
index 356fceb..d4b1d2b 100644
--- a/cobbler/webui/master.py
+++ b/cobbler/webui/master.py
@@ -33,10 +33,10 @@ VFN=valueForName
currentTime=time.time
__CHEETAH_version__ = '2.0'
__CHEETAH_versionTuple__ = (2, 0, 0, 'final', 0)
-__CHEETAH_genTime__ = 1196374123.089437
-__CHEETAH_genTimestamp__ = 'Thu Nov 29 17:08:43 2007'
+__CHEETAH_genTime__ = 1196809899.3260081
+__CHEETAH_genTimestamp__ = 'Tue Dec 4 18:11:39 2007'
__CHEETAH_src__ = 'webui_templates/master.tmpl'
-__CHEETAH_srcLastModified__ = 'Wed Nov 7 12:24:52 2007'
+__CHEETAH_srcLastModified__ = 'Tue Dec 4 17:33:59 2007'
__CHEETAH_docstring__ = 'Autogenerated by CHEETAH: The Python-Powered Template Engine'
if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple:
@@ -152,56 +152,56 @@ class master(Template):
<li><a href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 32, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 32, col 22.
- write('''/settings_view" class="menu">Settings</a></li>
+ write('''?mode=settings_view" class="menu">Settings</a></li>
<li><hr/></li>
<li>LIST</li>
<li><a href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 35, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 35, col 22.
- write('''/distro_list" class="menu">Distros</a></li>
+ write('''?mode=distro_list" class="menu">Distros</a></li>
<li><a href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 36, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 36, col 22.
- write('''/profile_list" class="menu">Profiles</a></li>
+ write('''?mode=profile_list" class="menu">Profiles</a></li>
<li><a href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 37, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 37, col 22.
- write('''/system_list" class="menu">Systems</a></li>
+ write('''?mode=system_list" class="menu">Systems</a></li>
<li><a href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 38, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 38, col 22.
- write('''/ksfile_list" class="menu">Kickstarts</a></li>
+ write('''?mode=ksfile_list" class="menu">Kickstarts</a></li>
<li><a href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 39, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 39, col 22.
- write('''/repo_list" class="menu">Repos</a></li>
+ write('''?mode=repo_list" class="menu">Repos</a></li>
<li><hr/></li>
<li>ADD</li>
<li><a href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 42, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 42, col 22.
- write('''/distro_edit" class="menu">Distro</a></li>
+ write('''?mode=distro_edit" class="menu">Distro</a></li>
<li><a href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 43, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 43, col 22.
- write('''/profile_edit" class="menu">Profile</a></li>
+ write('''?mode=profile_edit" class="menu">Profile</a></li>
<li><a href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 44, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 44, col 22.
- write('''/subprofile_edit" class="menu">Subprofile</a></li>
+ write('''?mode=subprofile_edit" class="menu">Subprofile</a></li>
<li><a href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 45, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 45, col 22.
- write('''/system_edit" class="menu">System</a></li>
+ write('''?mode=system_edit" class="menu">System</a></li>
<li><a href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 46, col 22
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 46, col 22.
- write('''/repo_edit" class="menu">Repo</a></li>
+ write('''?mode=repo_edit" class="menu">Repo</a></li>
<li><hr/><br/></li>
<li><a class="button sync" href="''')
_v = VFFSL(SL,"base_url",True) # '$base_url' on line 48, col 42
if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 48, col 42.
- write('''/sync">Sync</a></li>
+ write('''?mode=sync">Sync</a></li>
</ul>
</div>
diff --git a/config/cobbler.conf b/config/cobbler.conf
index 77bfe84..b4ab6d6 100644
--- a/config/cobbler.conf
+++ b/config/cobbler.conf
@@ -38,14 +38,10 @@ BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
AuthType Basic
AuthName Cobbler
Require valid-user
- SetHandler mod_python
-
+ SetHandler mod_python
PythonAuthenHandler index
- #PythonAccessHandler index
- #PythonAuthZHandler index
- PythonHandler mod_python.publisher
-
- # disable in production
+ PythonHandler index
+ # disable?
PythonDebug on
</Directory>
diff --git a/scripts/index.py b/scripts/index.py
index fc528df..c5ff4c0 100755
--- a/scripts/index.py
+++ b/scripts/index.py
@@ -1,6 +1,5 @@
"""
-mod_python gateway to all interesting cobbler web and web service
-functions.
+mod_python gateway to all interesting cobbler web functions
Copyright 2007, Red Hat, Inc
Michael DeHaan <mdehaan@redhat.com>
@@ -13,12 +12,13 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
"""
-# still TODO:
-# serve up Web UI through this interface, via tokens in headers
-
from mod_python import apache
from mod_python import Session
+from mod_python import util
+
import xmlrpclib
+import cgi
+from cobbler.webui import CobblerWeb
XMLRPC_SERVER = "http://127.0.0.1/cobbler_api_rw"
@@ -58,36 +58,51 @@ def __get_session(req):
#======================================================
-def index(req):
+def handler(req):
"""
Right now, index serves everything.
Hitting this URL means we've already cleared authn/authz
but we still need to use the token for all remote requests.
-
- FIXME: deal with query strings and defer to CobblerWeb.py
"""
my_user = __get_user(req)
my_uri = req.uri
-
sess = __get_session(req)
token = sess['cobbler_token']
- return "it seems to be all good: %s" % token
-
-#======================================================
-
-def hello(req):
-
- """
- This is just another example for the publisher handler.
- """
-
- user = __get_user(req)
- path = req.uri
- return "We are in hello(%s)" % path
+ # needed?
+ req.add_common_vars()
+
+ # process form and qs data, if any
+ fs = util.FieldStorage(req)
+ form = {}
+ for x in fs.keys():
+ form[x] = str(fs.get(x,'default'))
+
+ # instantiate a CobblerWeb object
+ cw = CobblerWeb.CobblerWeb(
+ token = token,
+ base_url = "/cobbler/web/",
+ server = "http://127.0.0.1/cobbler_api_rw"
+ )
+
+ # check for a valid path/mode
+ # handle invalid paths gracefully
+ mode = form.get('mode','index')
+ if mode in cw.modes():
+ func = getattr( cw, mode )
+ content = func( **form )
+ else:
+ func = getattr( cw, 'error_page' )
+ content = func( "Invalid Mode: \"%s\"" % mode )
+
+ # apache.log_error("%s:%s ... %s" % (my_user, my_uri, str(form)))
+ req.content_type = "text/html"
+ req.write(content)
+
+ return apache.OK
#======================================================
diff --git a/webui_templates/distro_edit.tmpl b/webui_templates/distro_edit.tmpl
index 5e45800..167f8cb 100644
--- a/webui_templates/distro_edit.tmpl
+++ b/webui_templates/distro_edit.tmpl
@@ -15,12 +15,13 @@ function disablename(value)
</script>
#end if
-<form method="post" action="$base_url/distro_save">
+<form method="POST" action="$base_url">
<fieldset id="cform">
#if $distro
<legend>Editing Distro</legend>
+ <input type="hidden" name="mode" value="distro_save">
<input type="hidden" name="new_or_edit" value="edit"/>
<input type="hidden" name="oldname" value="$distro.name"/>
#else
diff --git a/webui_templates/distro_list.tmpl b/webui_templates/distro_list.tmpl
index db9897f..4fabd48 100644
--- a/webui_templates/distro_list.tmpl
+++ b/webui_templates/distro_list.tmpl
@@ -30,7 +30,7 @@
<tr class="$tr_class">
<td>
- <a href="$base_url/distro_edit?name=$distro.name">$distro.name</a>
+ <a href="$base_url?mode=distro_edit&name=$distro.name">$distro.name</a>
</td>
<td>$distro.breed</td>
<td>$distro.arch</td>
diff --git a/webui_templates/ksfile_edit.tmpl b/webui_templates/ksfile_edit.tmpl
index 8b0eeec..5e0c5ae 100644
--- a/webui_templates/ksfile_edit.tmpl
+++ b/webui_templates/ksfile_edit.tmpl
@@ -2,7 +2,7 @@
#attr $title = "Cobbler: Edit Kickstart File $ksfile"
#block body
-<form method="post" action="$base_url/ksfile_save">
+<form method="post" action="$base_url?mode=ksfile_save">
<input type="hidden" name="name" value="$name"/>
<fieldset id="cform">
<legend>Edit Kickstart File</legend>
diff --git a/webui_templates/ksfile_list.tmpl b/webui_templates/ksfile_list.tmpl
index 292fcf9..dcfaa0a 100644
--- a/webui_templates/ksfile_list.tmpl
+++ b/webui_templates/ksfile_list.tmpl
@@ -22,9 +22,9 @@
<tr class="$tr_class">
<td>$ksfile</td>
#if $ksfile.startswith("/var/lib/cobbler/kickstarts")
- <td><a href="$base_url/ksfile_edit?name=$ksfile">edit</a></td>
+ <td><a href="$base_url?mode=ksfile_edit&name=$ksfile">edit</a></td>
#else if $ksfile.startswith("/etc/cobbler")
- <td><a href="$base_url/ksfile_edit?name=$ksfile">edit</a></td>
+ <td><a href="$base_url?mode=ksfile_edit&name=$ksfile">edit</a></td>
#else if $ksfile.startswith("http://")
<td><a href="$ksfile">view</A></td>
#else
diff --git a/webui_templates/master.tmpl b/webui_templates/master.tmpl
index abd09af..96fbe75 100644
--- a/webui_templates/master.tmpl
+++ b/webui_templates/master.tmpl
@@ -29,23 +29,23 @@
<div id="sidebar">
<ul id="nav">
<li><a href="/cobbler/webui/wui.html" class="menu">Docs</a></li>
- <li><a href="$base_url/settings_view" class="menu">Settings</a></li>
+ <li><a href="$base_url?mode=settings_view" class="menu">Settings</a></li>
<li><hr/></li>
<li>LIST</li>
- <li><a href="$base_url/distro_list" class="menu">Distros</a></li>
- <li><a href="$base_url/profile_list" class="menu">Profiles</a></li>
- <li><a href="$base_url/system_list" class="menu">Systems</a></li>
- <li><a href="$base_url/ksfile_list" class="menu">Kickstarts</a></li>
- <li><a href="$base_url/repo_list" class="menu">Repos</a></li>
+ <li><a href="$base_url?mode=distro_list" class="menu">Distros</a></li>
+ <li><a href="$base_url?mode=profile_list" class="menu">Profiles</a></li>
+ <li><a href="$base_url?mode=system_list" class="menu">Systems</a></li>
+ <li><a href="$base_url?mode=ksfile_list" class="menu">Kickstarts</a></li>
+ <li><a href="$base_url?mode=repo_list" class="menu">Repos</a></li>
<li><hr/></li>
<li>ADD</li>
- <li><a href="$base_url/distro_edit" class="menu">Distro</a></li>
- <li><a href="$base_url/profile_edit" class="menu">Profile</a></li>
- <li><a href="$base_url/subprofile_edit" class="menu">Subprofile</a></li>
- <li><a href="$base_url/system_edit" class="menu">System</a></li>
- <li><a href="$base_url/repo_edit" class="menu">Repo</a></li>
+ <li><a href="$base_url?mode=distro_edit" class="menu">Distro</a></li>
+ <li><a href="$base_url?mode=profile_edit" class="menu">Profile</a></li>
+ <li><a href="$base_url?mode=subprofile_edit" class="menu">Subprofile</a></li>
+ <li><a href="$base_url?mode=system_edit" class="menu">System</a></li>
+ <li><a href="$base_url?mode=repo_edit" class="menu">Repo</a></li>
<li><hr/><br/></li>
- <li><a class="button sync" href="$base_url/sync">Sync</a></li>
+ <li><a class="button sync" href="$base_url?mode=sync">Sync</a></li>
</ul>
</div>
diff --git a/webui_templates/paginate.tmpl b/webui_templates/paginate.tmpl
index 9d986f3..9b20e56 100644
--- a/webui_templates/paginate.tmpl
+++ b/webui_templates/paginate.tmpl
@@ -3,7 +3,7 @@
#if $page != 0
#set $previous_page = $page - 1
- <A HREF="${base_url}/${what}_list?page=${previous_page}&limit=${results_per_page}">&lt;</A>&nbsp;
+ <A HREF="${base_url}?mode=${what}_list&page=${previous_page}&limit=${results_per_page}">&lt;</A>&nbsp;
#else
&lt;
#end if
@@ -15,13 +15,13 @@
#else
#set doselect = " selected "
#end if
- <option value="${base_url}/${what}_list?page=${this_page}&limit=${results_per_page}" ${doselect} >Page ${this_page}</option>
+ <option value="${base_url}?mode=${what}_list&page=${this_page}&limit=${results_per_page}" ${doselect} >Page ${this_page}</option>
#end for
</select>
#if $page != $pages
#set $next_page = $page + 1
- <A HREF="${base_url}/${what}_list?page=${next_page}&limit=${results_per_page}">&gt;</A>
+ <A HREF="${base_url}?mode=${what}_list&page=${next_page}&limit=${results_per_page}">&gt;</A>
#else
&gt;
#end if
diff --git a/webui_templates/profile_edit.tmpl b/webui_templates/profile_edit.tmpl
index 6be47d0..f9eca09 100644
--- a/webui_templates/profile_edit.tmpl
+++ b/webui_templates/profile_edit.tmpl
@@ -13,7 +13,7 @@ function disablename(value)
</script>
#end if
-<form method="post" action="$base_url/profile_save">
+<form method="post" action="$base_url?mode=profile_save">
<fieldset id="cform">
<!--
diff --git a/webui_templates/profile_list.tmpl b/webui_templates/profile_list.tmpl
index 047714a..f213775 100644
--- a/webui_templates/profile_list.tmpl
+++ b/webui_templates/profile_list.tmpl
@@ -29,13 +29,13 @@
<tr class="$tr_class">
<td>
- <a href="$base_url/profile_edit?name=$profile.name">$profile.name</a>
+ <a href="$base_url?mode=profile_edit&name=$profile.name">$profile.name</a>
</td>
<td>
#if $profile.distro != "<<inherit>>"
- <a href="$base_url/distro_edit?name=$profile.distro">$profile.distro</a>
+ <a href="$base_url?mode=distro_edit&name=$profile.distro">$profile.distro</a>
#else
- <a href="$base_url/profile_edit?name=$profile.parent">$profile.parent</A>
+ <a href="$base_url?mode=profile_edit&name=$profile.parent">$profile.parent</A>
#end if
</td>
<td>$profile.kickstart</td>
diff --git a/webui_templates/repo_edit.tmpl b/webui_templates/repo_edit.tmpl
index 6fb5c72..17ca4ec 100644
--- a/webui_templates/repo_edit.tmpl
+++ b/webui_templates/repo_edit.tmpl
@@ -14,7 +14,7 @@ function disablename(value)
#end if
-<form method="post" action="$base_url/repo_save">
+<form method="post" action="$base_url?mode=repo_save">
<fieldset id="cform">
#if $repo
diff --git a/webui_templates/system_edit.tmpl b/webui_templates/system_edit.tmpl
index cc1c0c3..fa37244 100644
--- a/webui_templates/system_edit.tmpl
+++ b/webui_templates/system_edit.tmpl
@@ -32,7 +32,7 @@ function disablename(value)
function get_random_mac()
{
xmlHttp = new XMLHttpRequest();
- xmlHttp.open("GET", "$base_url/random_mac", true);
+ xmlHttp.open("GET", "$base_url?mode=random_mac", true);
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var mac_field = document.getElementById("macaddress")
@@ -87,7 +87,7 @@ function page_onload() {
}
</script>
-<form method="post" action="$base_url/system_save">
+<form method="post" action="$base_url?mode=system_save">
<fieldset id="cform">
#if $system
diff --git a/webui_templates/system_list.tmpl b/webui_templates/system_list.tmpl
index 2e5833a..5c70ffc 100644
--- a/webui_templates/system_list.tmpl
+++ b/webui_templates/system_list.tmpl
@@ -31,10 +31,10 @@
<tr class="$tr_class">
<td>
- <a href="$base_url/system_edit?name=${system.name}">${system.name}</a>
+ <a href="$base_url?mode=system_edit&name=${system.name}">${system.name}</a>
</td>
<td>
- <a href="$base_url/profile_edit?name=${system.profile}">${system.profile}</a>
+ <a href="$base_url?mode=profile_edit&name=${system.profile}">${system.profile}</a>
</td>
## <td> ${system.mac_address} </td>
## <td> ${system.ip_address} </td>