def check_and_set_session(role): """ To check whether the session exists for the specific role in redis cache If does not exists, redirect the user/admin to respective login pages To store the retrieved session in the flask session object :param role: :type str :return: """ if session and "_id" in session: session_id = get_session_id(role) if redis.get(session_id) is None: set_redirect_uri(role) else: custom_session = get_redis_session_data(session_id) print custom_session, "#" * 200 session["admin"] = custom_session["admin"] session["user_id"] = custom_session["user_id"] session["email"] = custom_session["email"] session['_id'] = custom_session["_id"] session["loggedin"] = True login_manager.error = False else: set_redirect_uri(role)
def expire_redis_session(role): """ To Remove the session data from the redis database Clears the session, if there is no admin/user logged in using the particular session id :param role: role of the logged_in user :type str """ if session and "_id" in session: session_id = get_session_id(role) admin_session_id, user_session_id = get_session_id( admin_role), get_session_id(user_role) redis.delete(session_id) if redis.get(admin_session_id) is None and redis.get( user_session_id) is None: session.clear()
def get_redis_session_data(session_id): """ To Retrieve the session data from redis database :param session_id: Key which is used to query redis database :type str :return: Session data """ custom_session = pickle.loads(redis.get(session_id)) update_expiry_time(session_id) return custom_session
def check_loggedin(role): """ To check whether the user/admin is logged in :param role: Role value of the user :type str :return: """ if session and "_id" in session: session_id = get_session_id(role) if redis.get(session_id) is not None: return True return False
def update_expiry_time(key, expires_in=expires_in): """ To track the idle session time-out If the user is actively using the session, then TTL for redis session data will be updated based on the update condition :param key: Key to search in redis database :type str :param expires_in: Time To Live :type int :return: """ if redis.get(key) is None: value = {} else: value = pickle.loads(redis.get(key)) redis.set(key, pickle.dumps(value), ex=redis.ttl(key) + (expires_in - redis.ttl(key)))
def set_redis_session(role, force=False): """ To set the session data in the redis database :param role: Role value of the user(admin/user) :type str :return: """ user_session = dict(session) session_id = get_session_id(role) if force: redis.set(name=session_id, value=pickle.dumps(user_session), ex=int(expires_in)) return True redis_session = redis.get(session_id) if redis_session is None and not force: redis.set(name=session_id, value=pickle.dumps(user_session), ex=int(expires_in))