mirror of
https://github.com/Eugeny/tabby-web.git
synced 2025-09-21 07:36:06 +00:00
init
This commit is contained in:
53
backend/tabby/middleware.py
Normal file
53
backend/tabby/middleware.py
Normal file
@@ -0,0 +1,53 @@
|
||||
import logging
|
||||
from tabby.app.models import User
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import login
|
||||
from pyga.requests import Tracker, Page, Session, Visitor
|
||||
|
||||
|
||||
class BaseMiddleware:
|
||||
def __init__(self, get_response):
|
||||
self.get_response = get_response
|
||||
|
||||
|
||||
class TokenMiddleware(BaseMiddleware):
|
||||
def __call__(self, request):
|
||||
token_value = None
|
||||
if 'auth_token' in request.GET:
|
||||
token_value = request.GET['auth_token']
|
||||
if request.META.get('HTTP_AUTHORIZATION'):
|
||||
token_type, *credentials = request.META['HTTP_AUTHORIZATION'].split()
|
||||
if token_type == 'Bearer' and len(credentials):
|
||||
token_value = credentials[0]
|
||||
|
||||
user = User.objects.filter(config_sync_token=token_value).first()
|
||||
|
||||
if user:
|
||||
request.session.save = lambda *args, **kwargs: None
|
||||
setattr(user, 'backend', 'django.contrib.auth.backends.ModelBackend')
|
||||
login(request, user)
|
||||
setattr(request, '_dont_enforce_csrf_checks', True)
|
||||
|
||||
response = self.get_response(request)
|
||||
|
||||
if user:
|
||||
response.set_cookie = lambda *args, **kwargs: None
|
||||
|
||||
return response
|
||||
|
||||
|
||||
class GAMiddleware(BaseMiddleware):
|
||||
def __init__(self, get_response):
|
||||
super().__init__(get_response)
|
||||
if settings.GA_ID:
|
||||
self.tracker = Tracker(settings.GA_ID, settings.GA_DOMAIN)
|
||||
|
||||
def __call__(self, request):
|
||||
response = self.get_response(request)
|
||||
if settings.GA_ID and request.path in ['/', '/app']:
|
||||
try:
|
||||
self.tracker.track_pageview(Page(request.path), Session(), Visitor())
|
||||
except Exception:
|
||||
logging.exception()
|
||||
|
||||
return response
|
Reference in New Issue
Block a user