72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
# 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 = {}
|
|
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.user_is_admin = models.AccountGroup.is_user_admin(request.user)
|
|
request.projects_owned_by_user = models.Project.projects_owned_by_user(
|
|
request.user)
|
|
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_owend_by_user = set()
|
|
request.show_admin_tab = False
|
|
|
|
# Update the cached value of the current user's Account
|
|
account = None
|
|
if request.user is not None:
|
|
account = models.Account.get_account_for_user(request.user)
|
|
request.account = account
|
|
else:
|
|
request.account = None
|
|
models.Account.current_user_account = account
|