mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	refactor: break document-only stuff into the paperless app
The `SessionOrBasicAuthMixin` and `StandardPagination` classes were living in the documents app and I needed them in the new `reminders` app, so this commit breaks them out of `documents` and puts them in the central `paperless` app instead.
This commit is contained in:
		| @@ -1,8 +1,3 @@ | ||||
| from django.contrib.auth.mixins import AccessMixin | ||||
| from django.contrib.auth import authenticate, login | ||||
| import base64 | ||||
|  | ||||
|  | ||||
| class Renderable(object): | ||||
|     """ | ||||
|     A handy mixin to make it easier/cleaner to print output based on a | ||||
| @@ -12,46 +7,3 @@ class Renderable(object): | ||||
|     def _render(self, text, verbosity): | ||||
|         if self.verbosity >= verbosity: | ||||
|             print(text) | ||||
|  | ||||
|  | ||||
| class SessionOrBasicAuthMixin(AccessMixin): | ||||
|     """ | ||||
|     Session or Basic Authentication mixin for Django. | ||||
|     It determines if the requester is already logged in or if they have | ||||
|     provided proper http-authorization and returning the view if all goes | ||||
|     well, otherwise responding with a 401. | ||||
|  | ||||
|     Base for mixin found here: https://djangosnippets.org/snippets/3073/ | ||||
|     """ | ||||
|  | ||||
|     def dispatch(self, request, *args, **kwargs): | ||||
|  | ||||
|         # check if user is authenticated via the session | ||||
|         if request.user.is_authenticated: | ||||
|  | ||||
|             # Already logged in, just return the view. | ||||
|             return super(SessionOrBasicAuthMixin, self).dispatch( | ||||
|                 request, *args, **kwargs | ||||
|             ) | ||||
|  | ||||
|         # apparently not authenticated via session, maybe via HTTP Basic? | ||||
|         if 'HTTP_AUTHORIZATION' in request.META: | ||||
|             auth = request.META['HTTP_AUTHORIZATION'].split() | ||||
|             if len(auth) == 2: | ||||
|                 # NOTE: Support for only basic authentication | ||||
|                 if auth[0].lower() == "basic": | ||||
|                     authString = base64.b64decode(auth[1]).decode('utf-8') | ||||
|                     uname, passwd = authString.split(':') | ||||
|                     user = authenticate(username=uname, password=passwd) | ||||
|                     if user is not None: | ||||
|                         if user.is_active: | ||||
|                             login(request, user) | ||||
|                             request.user = user | ||||
|                             return super( | ||||
|                                 SessionOrBasicAuthMixin, self | ||||
|                             ).dispatch( | ||||
|                                 request, *args, **kwargs | ||||
|                             ) | ||||
|  | ||||
|         # nope, really not authenticated | ||||
|         return self.handle_no_permission() | ||||
|   | ||||
| @@ -2,15 +2,16 @@ from django.http import HttpResponse | ||||
| from django.views.decorators.csrf import csrf_exempt | ||||
| from django.views.generic import DetailView, FormView, TemplateView | ||||
| from django_filters.rest_framework import DjangoFilterBackend | ||||
| from rest_framework.filters import SearchFilter, OrderingFilter | ||||
| from paperless.db import GnuPG | ||||
| from paperless.mixins import SessionOrBasicAuthMixin | ||||
| from paperless.views import StandardPagination | ||||
| from rest_framework.filters import OrderingFilter, SearchFilter | ||||
| from rest_framework.mixins import ( | ||||
|     DestroyModelMixin, | ||||
|     ListModelMixin, | ||||
|     RetrieveModelMixin, | ||||
|     UpdateModelMixin | ||||
| ) | ||||
| from rest_framework.pagination import PageNumberPagination | ||||
| from rest_framework.permissions import IsAuthenticated | ||||
| from rest_framework.viewsets import ( | ||||
|     GenericViewSet, | ||||
| @@ -27,7 +28,6 @@ from .serialisers import ( | ||||
|     LogSerializer, | ||||
|     TagSerializer | ||||
| ) | ||||
| from .mixins import SessionOrBasicAuthMixin | ||||
|  | ||||
|  | ||||
| class IndexView(TemplateView): | ||||
| @@ -92,12 +92,6 @@ class PushView(SessionOrBasicAuthMixin, FormView): | ||||
|         return HttpResponse("0") | ||||
|  | ||||
|  | ||||
| class StandardPagination(PageNumberPagination): | ||||
|     page_size = 25 | ||||
|     page_size_query_param = "page-size" | ||||
|     max_page_size = 100000 | ||||
|  | ||||
|  | ||||
| class CorrespondentViewSet(ModelViewSet): | ||||
|     model = Correspondent | ||||
|     queryset = Correspondent.objects.all() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Daniel Quinn
					Daniel Quinn