summaryrefslogtreecommitdiffstats
path: root/cobbler
diff options
context:
space:
mode:
Diffstat (limited to 'cobbler')
-rw-r--r--cobbler/webui/CobblerWeb.py106
-rw-r--r--cobbler/webui/master.py131
2 files changed, 84 insertions, 153 deletions
diff --git a/cobbler/webui/CobblerWeb.py b/cobbler/webui/CobblerWeb.py
index eb82564..69c8e7f 100644
--- a/cobbler/webui/CobblerWeb.py
+++ b/cobbler/webui/CobblerWeb.py
@@ -19,15 +19,9 @@ import string
from cobbler.utils import *
import logging
import sys
-import Cookie
-import time
LOGGING_ENABLED = True
-## FIXME: move to htaccess and eliminate browser cookies?
-
-COOKIE_TIMEOUT=29*60
-
if LOGGING_ENABLED:
# set up logging
logger = logging.getLogger("cobbler.webui")
@@ -40,8 +34,6 @@ if LOGGING_ENABLED:
else:
logger = None
-INVALID_CREDS="Login Required"
-
def log_exc():
"""
Log active traceback to logfile.
@@ -68,9 +60,8 @@ class CobblerWeb(object):
self.username = username
self.password = password
self.logout = None
- self.__cookies = Cookie.SimpleCookie(Cookie.SimpleCookie(os.environ.get("HTTP_COOKIE","")))
- def __xmlrpc_setup(self,is_login=False):
+ def __xmlrpc_setup(self):
"""
Sets up the connection to the Cobbler XMLRPC server. Right now, the
r/w server is required. In the future, it may be possible to instantiate
@@ -80,10 +71,6 @@ class CobblerWeb(object):
# changed to always create a new connection object
self.remote = xmlrpclib.Server(self.server, allow_none=True)
- # if we do not have a token in memory, is it in a cookie?
- if self.token is None:
- self.token = self.__get_cookie_token()
-
# else if we do have a token, try to use it...
if self.token is not None:
# validate that our token is still good
@@ -96,13 +83,11 @@ class CobblerWeb(object):
logger.info("token timeout for: %s" % self.username)
log_exc()
self.token = None
- # this should put us back to the login screen
- self.__cookie_logout()
else:
raise e
# if we (still) don't have a token, login for the first time
- if self.token is None and is_login:
+ elif self.password and self.username:
try:
self.token = self.remote.login( self.username, self.password )
except Exception, e:
@@ -110,14 +95,12 @@ class CobblerWeb(object):
logger.info("login failed for: %s" % self.username)
log_exc()
return False
- self.__cookie_login(self.token) # save what we've got
self.password = None # don't need it anymore, get rid of it
return True
# login failed
return False
-
def __render(self, template, data):
"""
Call the templating engine (Cheetah), wrapping up the location
@@ -126,16 +109,6 @@ class CobblerWeb(object):
data['base_url'] = self.base_url
- # used by master.tmpl to determine whether or not to show login/logout links
- if data.has_key("hide_links"):
- data['logged_in'] = None
- elif self.token is not None:
- data['logged_in'] = 1
- elif self.username and self.password:
- data['logged_in'] = 'configured'
- else:
- data['logged_in'] = None
-
filepath = os.path.join("/usr/share/cobbler/webui_templates/",template)
tmpl = Template( file=filepath, searchList=[data] )
return str(tmpl)
@@ -232,38 +205,11 @@ class CobblerWeb(object):
# ------------------------------------------------------------------------ #
def index(self):
- return self.__render( 'index.tmpl', { "hide_links" : True } )
+ return self.__render( 'index.tmpl', { } )
def menu(self):
return self.__render( 'blank.tmpl', { } )
-
- # ------------------------------------------------------------------------ #
- # Authentication
- # ------------------------------------------------------------------------ #
-
- def login(self, message=None):
- return self.__render( 'login.tmpl', {'message': message, "hide_links" : True } )
-
- def login_submit(self, username=None, password=None, submit=None):
- if username is None:
- return self.error_page( "No username supplied." )
- if password is None:
- return self.error_page( "No password supplied." )
-
- self.username = username
- self.password = password
-
- if not self.__xmlrpc_setup(is_login=True):
- return self.login(message="Login Failed.")
-
- return self.menu()
-
- def logout_submit(self):
- self.token = None
- self.__cookie_logout()
- return self.login()
-
# ------------------------------------------------------------------------ #
# Settings
# ------------------------------------------------------------------------ #
@@ -274,7 +220,7 @@ class CobblerWeb(object):
def settings_view(self):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
return self.__render( 'item.tmpl', {
'item_data': self.remote.get_settings(),
@@ -287,7 +233,7 @@ class CobblerWeb(object):
def distro_list(self):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
distros = self.remote.get_distros()
if len(distros) > 0:
return self.__render( 'distro_list.tmpl', {
@@ -299,7 +245,7 @@ class CobblerWeb(object):
def distro_edit(self, name=None):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
input_distro = None
if name is not None:
@@ -316,7 +262,7 @@ class CobblerWeb(object):
delete1=None,delete2=None,**args):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
# handle deletes as a special case
if new_or_edit == 'edit' and delete1 and delete2:
@@ -383,7 +329,7 @@ class CobblerWeb(object):
def system_list(self):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
systems = self.remote.get_systems()
if len(systems) > 0:
@@ -400,7 +346,7 @@ class CobblerWeb(object):
delete1=None, delete2=None, **args):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
# parameter checking
if name is None and editmode=='edit' and oldname is not None:
@@ -508,7 +454,7 @@ class CobblerWeb(object):
def system_edit(self, name=None):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
input_system = None
if name is not None:
@@ -526,7 +472,7 @@ class CobblerWeb(object):
# ------------------------------------------------------------------------ #
def profile_list(self):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
profiles = self.remote.get_profiles()
if len(profiles) > 0:
return self.__render( 'profile_list.tmpl', {
@@ -541,7 +487,7 @@ class CobblerWeb(object):
def profile_edit(self, name=None, subprofile=0):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
input_profile = None
if name is not None:
@@ -564,7 +510,7 @@ class CobblerWeb(object):
parent=None,virtcpus=None,virtbridge=None,subprofile=None,**args):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
# pre-command parameter checking
if name is None and editmode=='edit' and oldname is not None:
@@ -655,7 +601,7 @@ class CobblerWeb(object):
def repo_list(self):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
repos = self.remote.get_repos()
if len(repos) > 0:
return self.__render( 'repo_list.tmpl', {
@@ -666,7 +612,7 @@ class CobblerWeb(object):
def repo_edit(self, name=None):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
input_repo = None
if name is not None:
@@ -681,7 +627,7 @@ class CobblerWeb(object):
mirror=None,keep_updated=None,local_filename=None,
rpm_list=None,createrepo_flags=None,arch=None,delete1=None,delete2=None,**args):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
# pre-command parameter checking
if name is None and editmode=='edit' and oldname is not None:
@@ -748,14 +694,14 @@ class CobblerWeb(object):
def ksfile_list(self):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ 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):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
return self.__render( 'ksfile_edit.tmpl', {
'name': name,
'ksdata': self.remote.read_or_write_kickstart_template(name,True,"",self.token)
@@ -763,7 +709,7 @@ class CobblerWeb(object):
def ksfile_save(self, name=None, ksdata=None, **args):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
try:
self.remote.read_or_write_kickstart_template(name,False,ksdata,self.token)
except Exception, e:
@@ -776,7 +722,7 @@ class CobblerWeb(object):
def sync(self):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
try:
rc = self.remote.sync(self.token)
@@ -793,7 +739,7 @@ class CobblerWeb(object):
def random_mac(self):
if not self.__xmlrpc_setup():
- return self.login(message=INVALID_CREDS)
+ return self.xmlrpc_auth_failure()
mac = self.remote.get_random_mac()
return mac
@@ -809,6 +755,11 @@ class CobblerWeb(object):
'message': message
} )
+ def xmlrpc_auth_failure(self):
+ return self.__render( 'error_page.tmpl', {
+ 'message': "XMLRPC Authentication Error. See Apache logs for details."
+ } )
+
# make CherryPy and related frameworks able to use this module easily
# by borrowing the 'exposed' function attritbute standard and using
# it for the modes() method
@@ -818,11 +769,6 @@ class CobblerWeb(object):
index.exposed = True
menu.exposed = True
- login.exposed = True
- login_submit.exposed = True
- logout_submit.exposed = True
- cookies.exposed = False
-
distro_edit.exposed = True
distro_list.exposed = True
distro_save.exposed = True
diff --git a/cobbler/webui/master.py b/cobbler/webui/master.py
index 17d93b0..ee20ed7 100644
--- a/cobbler/webui/master.py
+++ b/cobbler/webui/master.py
@@ -33,10 +33,10 @@ VFN=valueForName
currentTime=time.time
__CHEETAH_version__ = '2.0rc8'
__CHEETAH_versionTuple__ = (2, 0, 0, 'candidate', 8)
-__CHEETAH_genTime__ = 1192826261.8448961
-__CHEETAH_genTimestamp__ = 'Fri Oct 19 16:37:41 2007'
+__CHEETAH_genTime__ = 1193430296.732923
+__CHEETAH_genTimestamp__ = 'Fri Oct 26 13:24:56 2007'
__CHEETAH_src__ = 'webui_templates/master.tmpl'
-__CHEETAH_srcLastModified__ = 'Fri Oct 12 11:53:14 2007'
+__CHEETAH_srcLastModified__ = 'Fri Oct 26 11:41:47 2007'
__CHEETAH_docstring__ = 'Autogenerated by CHEETAH: The Python-Powered Template Engine'
if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple:
@@ -69,7 +69,7 @@ class master(Template):
- ## CHEETAH: generated from #block body at line 60, col 1.
+ ## CHEETAH: generated from #block body at line 53, col 1.
trans = KWS.get("trans")
if (not trans and not self._CHEETAH__isBuffering and not callable(self.transaction)):
trans = self.transaction # is None unless self.awake() was called
@@ -148,75 +148,60 @@ class master(Template):
<div id="sidebar">
<ul id="nav">
-''')
- if not VFFSL(SL,"logged_in",True): # generated from line 31, col 9
- write(''' <li><a href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 32, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 32, col 26.
- write('''/login" class="menu">Log In</a></li>
-''')
- else: # generated from line 33, col 9
- write(''' <li><a href="/cobbler/webui/wui.html" class="menu">Docs</a></li>
- <li><a href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 35, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 35, col 26.
- write('''/settings_view" class="menu">Settings</a></li>
- <li><a href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 36, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 36, col 26.
- write('''/logout_submit" class="menu">Log Out</a></li>
- <li><hr/></li>
- <li>LIST</li>
- <li><a href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 39, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 39, col 26.
- write('''/distro_list" class="menu">Distros</a></li>
- <li><a href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 40, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 40, col 26.
- write('''/profile_list" class="menu">Profiles</a></li>
- <li><a href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 41, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 41, col 26.
- write('''/system_list" class="menu">Systems</a></li>
- <li><a href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 42, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 42, col 26.
- write('''/ksfile_list" class="menu">Kickstarts</a></li>
- <li><a href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 43, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 43, col 26.
- write('''/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 46, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 46, col 26.
- write('''/distro_edit" class="menu">Distro</a></li>
- <li><a href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 47, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 47, col 26.
- write('''/profile_edit" class="menu">Profile</a></li>
- <li><a href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 48, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 48, col 26.
- write('''/subprofile_edit" class="menu">Subprofile</a></li>
- <li><a href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 49, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 49, col 26.
- write('''/system_edit" class="menu">System</a></li>
- <li><a href="''')
- _v = VFFSL(SL,"base_url",True) # '$base_url' on line 50, col 26
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 50, col 26.
- write('''/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 52, col 46
- if _v is not None: write(_filter(_v, rawExpr='$base_url')) # from line 52, col 46.
- write('''/sync">Sync</a></li>
-''')
- write('''
-
+ <li><a href="/cobbler/webui/wui.html" class="menu">Docs</a></li>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
+ <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>
</ul>
</div>