Пример #1
0
        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
Пример #2
0
    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