def test_navbar_cache_deletion_for_users(self): user1 = mommy.make(UserProfile, username='******', email="*****@*****.**") user2 = mommy.make(UserProfile, username='******', email="*****@*****.**") # create navbar caches for anonymous user, user1 and user2 self.app.get("/") self.app.get("/results/", user='******') self.app.get("/results/", user='******') cache_key1 = make_template_fragment_key('navbar', [user1.username, 'en']) cache_key2 = make_template_fragment_key('navbar', [user2.username, 'en']) cache_key_anonymous = make_template_fragment_key('navbar', ['', 'en']) self.assertIsNotNone(cache.get(cache_key1)) self.assertIsNotNone(cache.get(cache_key2)) self.assertIsNotNone(cache.get(cache_key_anonymous)) delete_navbar_cache_for_users([user2]) self.assertIsNotNone(cache.get(cache_key1)) self.assertIsNone(cache.get(cache_key2)) self.assertIsNotNone(cache.get(cache_key_anonymous))
def index(request): """Main entry page into EvaP providing all the login options available. The OpenID login is thought to be used for internal users. The login key mechanism is meant to be used to include external participants, e.g. visiting students or visiting contributors. A login with email and password is available if OpenID is deactivated. """ # parse the form data into the respective form submit_type = request.POST.get("submit_type", "no_submit") new_key_form = NewKeyForm(request.POST if submit_type == "new_key" else None) login_email_form = LoginEmailForm( request, request.POST if submit_type == "login_email" else None) # process form data if request.method == 'POST': if new_key_form.is_valid(): # user wants a new login key profile = new_key_form.get_user() profile.ensure_valid_login_key() profile.save() EmailTemplate.send_login_url_to_user(new_key_form.get_user()) messages.success( request, _("We sent you an email with a one-time login URL. Please check your inbox." )) return redirect('evaluation:index') if login_email_form.is_valid(): # user would like to login with email and password and passed password test auth.login(request, login_email_form.get_user()) # clean up our test cookie if request.session.test_cookie_worked(): request.session.delete_test_cookie() return redirect('evaluation:index') # if not logged in by now, render form if not request.user.is_authenticated: # set test cookie to verify whether they work in the next step request.session.set_test_cookie() template_data = dict( new_key_form=new_key_form, login_email_form=login_email_form, openid_active=settings.ACTIVATE_OPEN_ID_LOGIN, ) return render(request, "index.html", template_data) # the cached navbar might contain CSRF tokens that are invalid after a new login delete_navbar_cache_for_users([request.user]) # check for redirect variable redirect_to = request.GET.get("next", None) if redirect_to is not None: return redirect(redirect_to) return redirect_user_to_start_page(request.user)
def test_navbar_cache_deletion_for_users(self): user1 = baker.make(UserProfile, email="*****@*****.**") user2 = baker.make(UserProfile, email="*****@*****.**") # create navbar caches for anonymous user, user1 and user2 self.app.get("/") self.app.get("/results/", user="******") self.app.get("/results/", user="******") cache_key1 = make_template_fragment_key("navbar", [user1.email, "en"]) cache_key2 = make_template_fragment_key("navbar", [user2.email, "en"]) cache_key_anonymous = make_template_fragment_key("navbar", ["", "en"]) self.assertIsNotNone(cache.get(cache_key1)) self.assertIsNotNone(cache.get(cache_key2)) self.assertIsNotNone(cache.get(cache_key_anonymous)) delete_navbar_cache_for_users([user2]) self.assertIsNotNone(cache.get(cache_key1)) self.assertIsNone(cache.get(cache_key2)) self.assertIsNotNone(cache.get(cache_key_anonymous))
def after_login_function(request, user, _client): delete_navbar_cache_for_users([user])
def exit_staff_mode(request): if is_in_staff_mode(request): del request.session['staff_mode_start_time'] request.session.modified = True delete_navbar_cache_for_users([request.user])
def enter_staff_mode(request): update_staff_mode(request) delete_navbar_cache_for_users([request.user])