def auth_user(fn):
"""
Decorator to force user to be logged in with GAE
"""
@functools.wraps(fn)
def _wrapped(request, *args, **kwargs):
temp_request = request
bearer = request.META['HTTP_AUTHORIZATION']
url = "https://www.googleapis.com/userinfo/v2/me"
result = urlfetch.fetch(url=url,
method=urlfetch.GET,
headers={"Authorization" : bearer})
contents = json.loads(result.content)
gae_user = users.get_current_user()
is_admin = users.is_current_user_admin()
User = get_user_model()
django_user = None
try:
logging.debug("Getting django user")
django_user = User.objects.get(
email=contents['email'])
except User.DoesNotExist:
logging.info("User does not exist in Montage. Checking pending users")
try:
pending_user = PendingUser.objects.get(
email=contents['email'])
except PendingUser.DoesNotExist:
logging.info("No pending user record for this email")
user, created = get_user_model().objects.get_or_create(
email=email,
defaults={
'username': email.split('@')[0],
'is_active': True
}
)
return user
else:
logging.info("Pending user record found. Activating user.")
django_user = activate_pending_user(
pending_user, gae_user, is_admin)
except AttributeError:
return HttpResponseForbidden()
else:
logging.info("User found. Updating gaia_id and superuser status")
request = temp_request
# update_user(django_user, is_admin)
if django_user:
request.user = django_user
else:
return HttpResponseForbidden()
return fn(request, *args, **kwargs)
return _wrapped
评论列表
文章目录