def _value(self): user = ESPUser(self.user) node = self.node edit_verb = GetNode(EDIT_VERB_STRING) if not self.category: self.category = nav_category(node, section) if user: has_edit_bits = user.isAdministrator() else: has_edit_bits = False navbars = list(self.category.get_navbars().order_by('sort_rank')) navbar_context = [{ 'entry': x, 'has_bits': has_edit_bits } for x in navbars] # add program entries navbar_context = list( qsd_tree_program(navbar_context, node, section, user)) context = { 'node': node, 'has_edit_bits': has_edit_bits, 'qsdTree': navbar_context, 'section': section } return context
def process_response(self, request, response): ## This gets set if we're not supposed to modify the cookie if getattr(response, 'no_set_cookies', False): return response modified_cookies = False user = getattr(request, '_cached_user', None) # Allow a view to set a newly logged-in user via the response if not user or isinstance(user, AnonymousUser): new_user = getattr(response, '_new_user', None) if isinstance(new_user, ESPUser): user = new_user if user and user.id: if settings.SESSION_EXPIRE_AT_BROWSER_CLOSE: max_age = None expires = None else: max_age = settings.SESSION_COOKIE_AGE expires = datetime.datetime.strftime( datetime.datetime.utcnow() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE), "%a, %d-%b-%Y %H:%M:%S GMT") ret_title = '' try: ret_title = request.session['user_morph']['retTitle'] except KeyError: pass # URL-encode some data since cookies don't like funny characters. They # make the chocolate chips nervous. # : see public/media/scripts/content/user_data.js import urllib encoding = request.encoding if encoding is None: encoding = settings.DEFAULT_CHARSET espuser = ESPUser(user) has_qsd_bits = espuser.isAdministrator() new_values = { 'cur_username': user.username, 'cur_userid': user.id, 'cur_email': urllib.quote(user.email.encode(encoding)), 'cur_first_name': urllib.quote(user.first_name.encode(encoding)), 'cur_last_name': urllib.quote(user.last_name.encode(encoding)), 'cur_other_user': getattr(user, 'other_user', False) and '1' or '0', 'cur_retTitle': ret_title, 'cur_admin': espuser.isAdministrator() and '1' or '0', 'cur_qsd_bits': has_qsd_bits and '1' or '0', 'cur_grade': espuser.getGrade(), 'cur_roles': urllib.quote(",".join(espuser.getUserTypes())), } for key, value in new_values.iteritems(): if request.COOKIES.get(key, "") != str(value if value else ""): response.set_cookie(key, value, max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, secure=settings.SESSION_COOKIE_SECURE or None) modified_cookies = True if user and not user.is_authenticated(): cookies_to_delete = [ x for x in ('cur_username', 'cur_userid', 'cur_email', 'cur_first_name', 'cur_last_name', 'cur_other_user', 'cur_retTitle', 'cur_admin', 'cur_roles', 'cur_grade', 'cur_qsd_bits') if request.COOKIES.get(x, False) ] map(response.delete_cookie, cookies_to_delete) modified_cookies = (len(cookies_to_delete) > 0) request.session.accessed = request.session.modified ## Django only uses this for determining whether it refreshed the session cookie (and so needs to vary on cache), and its behavior is buggy; this works around it. -- aseering 11/1/2010 if modified_cookies: patch_vary_headers(response, ('Cookie', )) return response