X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=blobdiff_plain;f=ipsilon%2Futil%2Fuser.py;h=38449ccaf0aa80d2df5ed52c57b8bf99c56edb5a;hp=ea0b974e95fa78272085c3df714c2096f59b1363;hb=aa5dc3b417db962a075a092d0d3528010c1059f7;hpb=ad6e5efc6347639f4edfba94375151ccdbc5f7a8 diff --git a/ipsilon/util/user.py b/ipsilon/util/user.py old mode 100755 new mode 100644 index ea0b974..38449cc --- a/ipsilon/util/user.py +++ b/ipsilon/util/user.py @@ -1,5 +1,3 @@ -#!/usr/bin/python -# # Copyright (C) 2013 Simo Sorce # # see file 'COPYING' for use and warranty information @@ -17,8 +15,10 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from ipsilon.util.data import Store +from ipsilon.util.data import UserStore +from ipsilon.util.log import Log import cherrypy +import logging class Site(object): @@ -38,8 +38,8 @@ class User(object): self.name = username def _get_user_data(self, username): - store = Store() - return store.get_user_preferences(username) + store = UserStore() + return store.load_user_preferences(username) def reset(self): self.name = None @@ -54,7 +54,7 @@ class User(object): @property def is_admin(self): if 'is_admin' in self._userdata: - if self._userdata['is_admin'] == '1': + if str(self._userdata['is_admin']) == '1': return True return False @@ -94,53 +94,94 @@ class User(object): @sites.setter def sites(self): - #TODO: implement setting sites via the user object ? + # TODO: implement setting sites via the user object ? raise AttributeError + def save_plugin_data(self, plugin, data): + store = UserStore() + store.save_plugin_data(plugin, self.name, data) + + def load_plugin_data(self, plugin): + store = UserStore() + return store.load_plugin_data(plugin, self.name) + -class UserSession(object): +class UserSession(Log): def __init__(self): self.user = self.get_data('user', 'name') - - def _debug(self, fact): - if cherrypy.config.get('debug', False): - cherrypy.log(fact) + self.userattrs = self.get_user_attrs() def get_user(self): return User(self.user) def remote_login(self): if cherrypy.request.login: - return self.login(cherrypy.request.login) + self.login(cherrypy.request.login) + else: + self.nuke_data('user') - def login(self, username): + def login(self, username, userattrs=None): if self.user == username: + if userattrs and not self.get_user_attrs(): + self.save_user_attrs(userattrs) return # REMOTE_USER changed, replace user self.nuke_data('user') self.save_data('user', 'name', username) + self.user = username + + # Save additional data provided by the login manager + self.nuke_data('userattrs') + if userattrs: + self.save_user_attrs(userattrs) - cherrypy.log('LOGIN SUCCESSFUL: %s', username) + cherrypy.log('LOGIN SUCCESSFUL: %s' % username) def logout(self, user): if user is not None: if not type(user) is User: raise TypeError # Completely reset user data - cherrypy.log.error('%s %s' % (user.name, user.fullname)) + cherrypy.log.error('%s %s' % (user.name, user.fullname), + severity=logging.INFO) user.reset() # Destroy current session in all cases cherrypy.lib.sessions.expire() + def get_user_attrs(self): + userattrs = dict() + if 'userattrs' in cherrypy.session: + userattrs = cherrypy.session['userattrs'] + return userattrs + + def save_user_attrs(self, userattrs): + cherrypy.session['userattrs'] = userattrs + self.debug('Saved user attrs') + self.userattrs = userattrs + + def _get_provider_attr_name(self, provider): + return '%s_data' % provider + + def get_provider_data(self, provider): + attr = self._get_provider_attr_name(provider) + data = None + if attr in cherrypy.session: + data = cherrypy.session[attr] + return data + + def save_provider_data(self, provider, data): + attr = self._get_provider_attr_name(provider) + cherrypy.session[attr] = data + self.debug('Saved %s provider data' % provider) + def save_data(self, facility, name, data): """ Save named data in the session so it can be retrieved later """ if facility not in cherrypy.session: cherrypy.session[facility] = dict() cherrypy.session[facility][name] = data - cherrypy.session.save() - self._debug('Saved session data named [%s:%s]' % (facility, name)) + self.debug('Saved session data named [%s:%s]' % (facility, name)) def get_data(self, facility, name): """ Get named data in the session if available """ @@ -158,8 +199,7 @@ class UserSession(object): return cherrypy.session[facility][name] = None del cherrypy.session[facility][name] - self._debug('Nuked session data named [%s:%s]' % (facility, name)) + self.debug('Nuked session data named [%s:%s]' % (facility, name)) else: del cherrypy.session[facility] - self._debug('Nuked session facility [%s]' % (facility,)) - cherrypy.session.save() + self.debug('Nuked session facility [%s]' % (facility,))