X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=blobdiff_plain;f=ipsilon%2Futil%2Fuser.py;h=387df11336834f8a95fe36d284106925e8273bb9;hp=3b5872408aeb67aa4c978e5cb751a73a2fba737f;hb=eaad8751cf92a29a7ab398c6b20e96d4a53b9d69;hpb=47ff1fb4cd7a6c416c93246decacd19628b232c3 diff --git a/ipsilon/util/user.py b/ipsilon/util/user.py index 3b58724..387df11 100755 --- a/ipsilon/util/user.py +++ b/ipsilon/util/user.py @@ -18,6 +18,8 @@ # along with this program. If not, see . from ipsilon.util.data import Store +import cherrypy + class Site(object): def __init__(self, value): @@ -25,6 +27,7 @@ class Site(object): self.link = value self.name = value + class User(object): def __init__(self, username): if username is None: @@ -36,7 +39,17 @@ class User(object): def _get_user_data(self, username): store = Store() - return store._get_user_preferences(username) + return store.get_user_preferences(username) + + def reset(self): + self.name = None + self._userdata = dict() + + @property + def is_anonymous(self): + if self.name: + return False + return True @property def is_admin(self): @@ -77,3 +90,65 @@ class User(object): #TODO: implement setting sites via the user object ? raise AttributeError + +class UserSession(object): + def __init__(self): + self.user = cherrypy.session.get('user', None) + + def _debug(self, fact): + if cherrypy.config.get('debug', False): + cherrypy.log(fact) + + def get_user(self): + return User(self.user) + + def remote_login(self): + if cherrypy.request.login: + return self.login(cherrypy.request.login) + + def login(self, username): + if self.user == username: + return + + # REMOTE_USER changed, replace user + cherrypy.session['user'] = username + cherrypy.session.save() + + 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)) + user.reset() + + # Destroy current session in all cases + cherrypy.lib.sessions.expire() + + 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)) + + def get_data(self, facility, name): + """ Get named data in the session if available """ + if facility not in cherrypy.session: + return None + if name not in cherrypy.session[facility]: + return None + return cherrypy.session[facility][name] + + def nuke_data(self, facility, name): + if facility not in cherrypy.session: + return + if name not in cherrypy.session[facility]: + return + cherrypy.session[facility][name] = None + del cherrypy.session[facility][name] + cherrypy.session.save() + self._debug('Nuked session data named [%s:%s]' % (facility, name))