def delete(self): """ deletes this csspropertyset from the database """ db = Database() current_session = Session.get_current_session() if self._typ == CSSPropertySet.GENERAL: stmnt = "DELETE FROM CSS WHERE CSS_MOD_ID IS NULL AND CSS_WGT_ID IS NULL AND CSS_SES_ID IS NULL;" db.query(stmnt, commit=True) elif self._typ == CSSPropertySet.MODULE: stmnt = "DELETE FROM CSS WHERE CSS_MOD_ID = ? AND CSS_WGT_ID IS NULL AND CSS_SES_ID IS NULL;" db.query(stmnt, (self.get_module_id(),), commit=True) elif self._typ == CSSPropertySet.WIDGET: stmnt = "DELETE FROM CSS WHERE CSS_MOD_ID IS NULL AND CSS_WGT_ID = ? AND CSS_SES_ID IS NULL;" db.query(stmnt, (self.get_widget_id(),), commit=True) elif self._typ == CSSPropertySet.SESSION: stmnt = "DELETE FROM CSS WHERE CSS_MOD_ID IS NULL AND CSS_WGT_ID IS NULL AND CSS_SES_ID = ? ;" db.query(stmnt, (self.get_session_id(),), commit=True) if self._typ == CSSPropertySet.SESSION: if current_session is not None: stmnt = "UPDATE CSSSESSION SET CSE_OUTDATED = 1 WHERE CSE_SES_ID = ? ;" db.query(stmnt, (current_session.get_id(),), commit=True) else: stmnt = "UPDATE CSSSESSION SET CSE_OUTDATED = 1 ;" db.query(stmnt, commit=True)
def generate(cls): """ Generates an Activity Report. This report contains, how many activities have happened since the last poke further it contains the activity types. """ session = Session.get_current_session() db = Database() stmnt = "SELECT ATV_TYPE, MAX(ATV_ID) AS LATEST_ID, COUNT(ATV_ID) AS AMOUNT FROM ACTIVITIES WHERE ATV_SES_ID != ? OR ATV_SES_ID IS NULL AND ATV_ID >= \ COALESCE((SELECT SPO_ATV_ID FROM SESSIONPOKE WHERE SPO_SES_ID = ?),0) GROUP BY ATV_TYPE;" cur = db.query(stmnt, (session.get_id(), session.get_id())) activity_report = ActivityReport() res = cur.fetchallmap() for row in res: activity = Activity() activity.set_id(row["LATEST_ID"]) activity.set_activity_type(row["ATV_TYPE"]) activity_report._activities.append(activity) if activity_report._latest_id < row["LATEST_ID"]: activity_report._latest_id = row["LATEST_ID"] activity_report._amount += row["AMOUNT"] return activity_report
def store(self): """ stores this cssPropertySet into the database """ db = Database() current_session = Session.get_current_session() self.delete() values_to_store = self.get_non_inherited() stmnt = "UPDATE OR INSERT INTO CSS (CSS_SELECTOR, CSS_TAG, CSS_VALUE, CSS_MOD_ID, CSS_WGT_ID, CSS_SES_ID) \ VALUES ( ?,?,?,?,?,?) MATCHING (CSS_SELECTOR,CSS_TAG,CSS_MOD_ID,CSS_WGT_ID, CSS_SES_ID) ;" for key, value in values_to_store.items(): selector, tag = key.split(CSSPropertySet.SPLIT) db.query( stmnt, (selector, tag, value["v"], self.get_module_id(), self.get_widget_id(), self.get_session_id()), commit=True, ) if self._typ == CSSPropertySet.SESSION and current_session is not None: stmnt = "UPDATE CSSSESSION SET CSE_OUTDATED = 1 WHERE CSE_SES_ID = ? ;" db.query(stmnt, (current_session.get_id()), commit=True) else: stmnt = "UPDATE CSSSESSION SET CSE_OUTDATED = 1;" db.query(stmnt, commit=True)
def cleanup(cls): """ Remove activities that are no longer needed """ session = Session.get_current_session() db = Database() stmnt = "DELETE FROM SESSIONPOKE WHERE SPO_SES_ID IN (SELECT SES_ID FROM SESSIONS WHERE SES_EXPIRES < CURRENT_TIMESTAMP) ;" db.query(stmnt, (session.get_id(),), commit=True) stmnt = "DELETE FROM ACTIVITIES WHERE ATV_ID < COALESCE ((SELECT MIN(SPO_ATV_ID) FROM SESSIONPOKE WHERE SPO_SES_ID != ?),0) ;" db.query(stmnt, (session.get_id(),), commit=True)
def authenticateUser(self,params): username = unicode(params[0]) password = unicode(params[1]) try: user = User.get_user_by_name(username) except UserException , e: session = Session.get_current_session() if session is not None: session.delete() return False
def poke(cls): """ Pulls together poke-response information for the current client """ activity_report = ActivityReport.generate() session = Session.get_current_session() db = Database() stmnt = "UPDATE OR INSERT INTO SESSIONPOKE (SPO_SES_ID, SPO_ATV_ID) VALUES (?, \ MAXVALUE(COALESCE((SELECT SPO_ATV_ID FROM SESSIONPOKE WHERE SPO_SES_ID = ?), 0) ,?)) MATCHING (SPO_SES_ID) ;" db.query(stmnt, (session.get_id(), session.get_id(), activity_report._latest_id+1), commit=True) cls.cleanup() return activity_report.to_dict()
def add_activity(cls, activity_type): """ Registers an activity to the Pokesystem """ session = Session.get_current_session() activity = Activity() if session is not None: activity.set_session_id(session.get_id()) activity.set_activity_type(activity_type) activity.store()
def get_css_file(cls): """ Gets the name of the cssFile for the current user """ configuration = Configuration() css_folder = "%s%s%s/" % ( configuration.get_entry("global.webpath"), configuration.get_entry("core.instance_id"), configuration.get_entry("core.css_folder"), ) db = Database() current_session = Session.get_current_session() rerendering_necessary = False if current_session is not None: stmnt = "SELECT CSE_FILE FROM CSSSESSION WHERE CSE_SES_ID = ? AND CSE_OUTDATED = 0 ;" cur = db.query(stmnt, (current_session.get_id(),)) row = cur.fetchonemap() if row is not None: filename = row["CSE_FILE"] else: filename = css_folder + current_session.get_id() + ".css" stmnt = "UPDATE OR INSERT INTO CSSSESSION (CSE_SES_ID,CSE_FILE,CSE_OUTDATED) VALUES (?,?,0) MATCHING (CSE_SES_ID) ;" db.query(stmnt, (current_session.get_id(), filename), commit=True) rerendering_necessary = True else: stmnt = "SELECT CSE_FILE FROM CSSSESSION WHERE CSE_SES_ID = '-1' AND CSE_OUTDATED = 0 ;" cur = db.query(stmnt) row = cur.fetchonemap() if row is not None: filename = row["CSE_FILE"] else: filename = css_folder + "general.css" # TODO: This was eventually fail! ↓ stmnt = "UPDATE OR INSERT INTO CSSSESSION (CSE_SES_ID,CSE_FILE,CSE_OUTDATED) VALUES ('-1',?,0) MATCHING (CSE_SES_ID) ;" db.query(stmnt, (filename,), commit=True) rerendering_necessary = True if not os.path.exists(filename) or rerendering_necessary: cls.render_to_file(filename) cls.cleanup_css_sessiontable() return filename
def render_to_file(cls, filename): """ renders a css file """ css = "" session_id = None current_session = Session.get_current_session() if current_session is None: generic_set = cls.get_csspropertyset() module_sets = cls.get_csspropertyset(cls.ALL, None, None) widget_sets = cls.get_csspropertyset(None, cls.ALL, None) css += generic_set.render() for module_set in module_sets.values(): css += module_set.render() for widget_set in widget_sets.values(): css += widget_set.render() else: # TODO: Implement behaviour with session generic_set = cls.get_csspropertyset() module_sets = cls.get_csspropertyset(cls.ALL, None, None) widget_sets = cls.get_csspropertyset(None, cls.ALL, None) css += generic_set.render() for module_set in module_sets.values(): css += module_set.render() for widget_set in widget_sets.values(): css += widget_set.render() if not os.path.exists(os.path.dirname(filename)): os.makedirs(os.path.dirname(filename)) cssfile = open(filename, "w") cssfile.write(css) cssfile.close()
password = unicode(params[1]) try: user = User.get_user_by_name(username) except UserException , e: session = Session.get_current_session() if session is not None: session.delete() return False if user.authenticate(password): session = Session.create_session(user) return user.get_permissions() else: session = Session.get_current_session() if session is not None: session.delete() return False def alterPassword(self, params): user_id = int(params[0]) new_password = unicode(params[1]) old_password = unicode(params[2]) session_user = Session.get_current_session_user() if user_id == session_user.get_id(): session_user.alter_password(new_password,old_password) else: if session_user.check_permission("skarphed.users.alter_password"):