# # Service facade for gnuviech-admin tool backend # (c) 2006 Jan Dittberner # $Id$ # from SessionManager import * from DomainManager import * import Settings import psycopg2 class ServiceFacade: """ This class implements the facade to the services provided by the gnuviech admin backend. """ def __init__(self): connstr = 'host=%(dbhost)s user=%(dbuser)s ' + \ 'password=%(dbpassword)s dbname=%(dbname)s' dbconn = psycopg2.connect(connstr % Settings.DBSETTINGS) self.sessionManager = SessionManager(dbconn) self.domainManager = DomainManager(dbconn) def _dispatch(self, method, params): try: func = getattr(self, method) except AttributeError: raise Exception('method "%s" is not supported' % method) else: if method != 'login' and method != 'logout': sessionid = params[0] try: session = self.sessionManager.getSession(sessionid) except InvalidSessionError: return "" nparams = [session] for item in params[1:]: nparams.append(item) params = nparams self.sessionManager.updateSession(sessionid) return func(*params) def login(self, login, password): """ Logs in the user specified by the given login and password. The method creates a session and returns the session id which has to be sent back by subsequent requests. If the login is invalid the returned id is 0 """ try: return self.sessionManager.newSession(login, password) except InvalidLoginError, ile: return 0 def logout(self, sessionid): self.sessionManager.deleteSession(sessionid) return 0 def listdomains(self, session): """ Lists the domains the given session may see. """ return self.domainManager.listDomains(session)