def _get_sessions(curs=None): from_d = datetime.datetime.now(pytz.utc) logger.info("Sessions dumping into db initiated %s", from_d) from_d = from_d - datetime.timedelta(minutes=settings.session_valid_minutes) logger.debug("Fetching not expired sessions, newer %s. Session valid period: %s minutes", from_d, settings.session_valid_minutes) f = SessionFilter({'from_update_date': from_d}, {}, ['id']) return f.filter_objs(curs)
def _get_session_db(self, session_id, curs=None): f = SessionFilter({'session_id': session_id}, {}, {}) session = f.filter_one_obj(curs, for_update=True) valid_after_date = self._session_valid_after_update_date() if session.update_date > valid_after_date: self._set_update_date(session) mapping.save(curs, session) else: raise SessionExpired() return session
def _change_session_ip(self, sess_id, curs=None): # changing ip in session f = SessionFilter({"session_id": sess_id}, {}, None) s = f.filter_one_obj(curs) data = json.loads(s.serialized_data) data["ip"] = "new_%s" % data["ip"] s.serialized_data = json.dumps(data) mapping.save(curs, s) a = Authenticator() a._save_session_to_cache(s)
def _clean(curs=None): to_d = datetime.datetime.now() logger.info("Sessions cleaning initiated %s", to_d) to_d = to_d - datetime.timedelta(minutes=settings.session_valid_minutes) logger.debug("Removing session older %s. Session valid period: %s minutes", to_d, settings.session_valid_minutes) f = SessionFilter({'to_update_date': to_d}, {}, ['id']) sessions = f.filter_objs(curs) logger.info("Deleting %s sessions", len(sessions)) mapping.delete_objects(curs, sessions) logger.info("Sessions cleaned")
def logout(self, data, req_info, curs=None): session_id = data.get('session_id') f = SessionFilter({'session_id': session_id}, {}, None) try: session = f.filter_one_obj(curs, for_update=True) mapping.delete(curs, session) _add_log_info(data, session) except SessionNotFound: pass return response_ok()
def _dump_session(mem_cache, session, curs=None): f = SessionFilter({'session_id': session.session_id}, {}, None) try: s = f.filter_one_obj(curs, for_update=True) sess_id = s.session_id.encode('utf8') cached_s = mem_cache.get(sess_id) if cached_s is None: logger.debug("Session %s not found in cache", sess_id) else: logger.debug("Cached session %s update date: %s", cached_s.session_id, cached_s.update_date) logger.debug("Db session %s update date: %s", s.session_id, s.update_date) if cached_s.update_date > s.update_date: s.update_date = cached_s.update_date mapping.save(curs, s) logger.debug("Session %s dumped from cache into db", sess_id) else: logger.debug("Session %s update_date in db greater or equal " \ "cached value. Noting to dump", sess_id) except SessionNotFound, e: logger.debug("Dumping session failed: %s", e)
def get_session(self, session_id, for_update=False, curs=None): f = SessionFilter({'session_id': session_id}, {}, {}) return f.filter_one_obj(curs, for_update=for_update)
def _remove_session(self, sess_id, curs=None): f = SessionFilter({'session_id': sess_id}, {}, None) sess = f.filter_one_obj(curs) mapping.delete(curs, sess)