blob: 8ec08e570d8ad6ac30371219e2d6715b6f5a650b [file] [log] [blame]
# Copyright 2008 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Custom middleware. Some of this may be generally useful."""
import logging
import time
from google.appengine.api import users
from django.utils.http import http_date
import models
import view_util
import library
class NoCacheMiddleware(object):
"""Set the cache-control and expires headers."""
def process_response(self, request, response):
response['Cache-Control'] = 'no-cache'
response['Expires'] = http_date(time.time() - 1)
return response
class ClearXsrfKeyMiddleware(object):
"""Sets the xsrf_key to None so it can later be read."""
def process_request(self, request):
view_util._xsrf_key = None
view_util._xsrf_now = None
view_util._xsrf_cache = {}
models.Settings._LocalCache = None
library._user_cache.clear_local()
class AddUserToRequestMiddleware(object):
"""Add a user object and a user_is_admin flag to each request."""
def process_request(self, request):
request.user = users.get_current_user()
if request.user:
request.is_gae_admin = users.is_current_user_admin()
request.account \
= models.Account.get_account_for_user(request.user)
request.user_is_admin \
= request.is_gae_admin or request.account.is_admin
models.OwnedProjects.clear_local()
request.projects_owned_by_user \
= models.OwnedProjects.get(request.user.email())
request.show_admin_tab \
= (request.user_is_admin \
or len(request.projects_owned_by_user) > 0)
else:
request.is_gae_admin = False
request.user_is_admin = False
request.projects_owned_by_user = set()
request.show_admin_tab = False
request.account = None
models.Account.current_user_account = request.account