63 lines
2 KiB
Python
63 lines
2 KiB
Python
from django.contrib.auth.mixins import UserPassesTestMixin
|
|
from django.views.generic.base import ContextMixin
|
|
|
|
from . import api, get_version
|
|
from .auth import SESSION_KEY_TOKEN
|
|
|
|
|
|
class CustomContextMixin(ContextMixin):
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
# generate services menu items
|
|
services_menu = [
|
|
{'pattern_name': 'musician:dashboard', 'title': 'Domains & websites'},
|
|
{'pattern_name': 'musician:mails', 'title': 'Mails'},
|
|
{'pattern_name': 'musician:mailing-lists', 'title': 'Mailing lists'},
|
|
{'pattern_name': 'musician:databases', 'title': 'Databases'},
|
|
{'pattern_name': 'musician:saas', 'title': 'SaaS'},
|
|
]
|
|
context.update({
|
|
'services_menu': services_menu,
|
|
'version': get_version(),
|
|
})
|
|
|
|
return context
|
|
|
|
|
|
class ExtendedPaginationMixin:
|
|
paginate_by = 20
|
|
paginate_by_kwarg = 'per_page'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context.update({
|
|
'per_page_values': [5, 10, 20, 50],
|
|
'per_page_param': self.paginate_by_kwarg,
|
|
})
|
|
return context
|
|
|
|
def get_paginate_by(self, queryset):
|
|
per_page = self.request.GET.get(self.paginate_by_kwarg) or self.paginate_by
|
|
try:
|
|
paginate_by = int(per_page)
|
|
except ValueError:
|
|
paginate_by = self.paginate_by
|
|
return paginate_by
|
|
|
|
|
|
class UserTokenRequiredMixin(UserPassesTestMixin):
|
|
def test_func(self):
|
|
"""Check that the user has an authorized token."""
|
|
token = self.request.session.get(SESSION_KEY_TOKEN, None)
|
|
if token is None:
|
|
return False
|
|
|
|
# initialize orchestra api orm
|
|
self.orchestra = api.Orchestra(auth_token=token)
|
|
|
|
# verify if the token is valid
|
|
if self.orchestra.verify_credentials() is None:
|
|
return False
|
|
|
|
return True
|