Repository URL to install this package:
|
Version:
0.8.0 ▾
|
import logging
import json
import six
from django.core.exceptions import PermissionDenied
from django.utils.functional import SimpleLazyObject
from django.http import HttpResponse
from rest_framework import status
from dockerhub import utils
logger = logging.getLogger(__name__)
def get_user(request):
if not hasattr(request, '_cached_user'):
request._cached_user = utils.get_user(request)
return request._cached_user
class AuthenticationMiddleware(object):
def process_request(self, request):
assert hasattr(request, 'session'), "The Hub authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
request.user = SimpleLazyObject(lambda: get_user(request))
class UserUUIDSessionMiddleware(object):
def process_request(self, request):
try:
request.session['_user_uuid'] = request.user.uuid.hex
except AttributeError:
logger.info('User `{}` does not have a UUID'.format(request.user))
pass
class DockerHubAPIExceptionMiddleware(object):
def process_exception(self, request, exception):
if request.META.get('PATH_INFO', '').startswith('/v2/'):
response_data = {'error': True, 'detail': str(exception)}
if isinstance(exception, PermissionDenied):
# Swagger is under /v2, but doesn't deal with permission error well
status_code = status.HTTP_401_UNAUTHORIZED
else:
status_code = status.HTTP_500_INTERNAL_SERVER_ERROR
return HttpResponse(
json.dumps(response_data),
content_type="application/json",
status=status_code
)