admin: remove old admin overview
This commit is contained in:
parent
2ffaa94825
commit
d7fa52ebf3
|
@ -1,6 +1,7 @@
|
||||||
"""authentik administration overview"""
|
"""authentik administration overview"""
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from drf_yasg2.utils import swagger_auto_schema
|
from drf_yasg2.utils import swagger_auto_schema
|
||||||
|
from packaging.version import parse
|
||||||
from rest_framework.fields import SerializerMethodField
|
from rest_framework.fields import SerializerMethodField
|
||||||
from rest_framework.mixins import ListModelMixin
|
from rest_framework.mixins import ListModelMixin
|
||||||
from rest_framework.permissions import IsAdminUser
|
from rest_framework.permissions import IsAdminUser
|
||||||
|
@ -8,7 +9,6 @@ from rest_framework.request import Request
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.serializers import Serializer
|
from rest_framework.serializers import Serializer
|
||||||
from rest_framework.viewsets import GenericViewSet
|
from rest_framework.viewsets import GenericViewSet
|
||||||
from packaging.version import parse
|
|
||||||
|
|
||||||
from authentik import __version__
|
from authentik import __version__
|
||||||
from authentik.admin.tasks import VERSION_CACHE_KEY, update_latest_version
|
from authentik.admin.tasks import VERSION_CACHE_KEY, update_latest_version
|
||||||
|
@ -33,9 +33,11 @@ class VersionSerializer(Serializer):
|
||||||
return __version__
|
return __version__
|
||||||
return version_in_cache
|
return version_in_cache
|
||||||
|
|
||||||
def get_outdated(self, instance) -> str:
|
def get_outdated(self, instance) -> bool:
|
||||||
"""Check if we're running the latest version"""
|
"""Check if we're running the latest version"""
|
||||||
return parse(self.get_version_current(instance)) < parse(self.get_version_latest(instance))
|
return parse(self.get_version_current(instance)) < parse(
|
||||||
|
self.get_version_latest(instance)
|
||||||
|
)
|
||||||
|
|
||||||
def create(self, request: Request) -> Response:
|
def create(self, request: Request) -> Response:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
|
@ -6,7 +6,6 @@ from rest_framework.response import Response
|
||||||
from rest_framework.serializers import Serializer
|
from rest_framework.serializers import Serializer
|
||||||
from rest_framework.viewsets import GenericViewSet
|
from rest_framework.viewsets import GenericViewSet
|
||||||
|
|
||||||
from authentik import __version__
|
|
||||||
from authentik.root.celery import CELERY_APP
|
from authentik.root.celery import CELERY_APP
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
{% extends "administration/base.html" %}
|
|
||||||
|
|
||||||
{% load i18n %}
|
|
||||||
{% load static %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<section class="pf-c-page__main-section pf-m-light">
|
|
||||||
<div class="pf-c-content">
|
|
||||||
<h1>{% trans 'System Overview' %}</h1>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<section class="pf-c-page__main-section">
|
|
||||||
<div class="pf-l-gallery pf-m-gutter">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
{% endblock %}
|
|
|
@ -34,7 +34,6 @@ urlpatterns = [
|
||||||
overview.PolicyCacheClearView.as_view(),
|
overview.PolicyCacheClearView.as_view(),
|
||||||
name="overview-clear-policy-cache",
|
name="overview-clear-policy-cache",
|
||||||
),
|
),
|
||||||
path("overview/", overview.AdministrationOverviewView.as_view(), name="overview"),
|
|
||||||
# Applications
|
# Applications
|
||||||
path(
|
path(
|
||||||
"applications/", applications.ApplicationListView.as_view(), name="applications"
|
"applications/", applications.ApplicationListView.as_view(), name="applications"
|
||||||
|
|
|
@ -1,58 +1,19 @@
|
||||||
"""authentik administration overview"""
|
"""authentik administration overview"""
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.http.request import HttpRequest
|
from django.http.request import HttpRequest
|
||||||
from django.http.response import HttpResponse
|
from django.http.response import HttpResponse
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import FormView, TemplateView
|
from django.views.generic import FormView
|
||||||
from packaging.version import LegacyVersion, Version, parse
|
|
||||||
from structlog import get_logger
|
from structlog import get_logger
|
||||||
|
|
||||||
from authentik import __version__
|
|
||||||
from authentik.admin.forms.overview import FlowCacheClearForm, PolicyCacheClearForm
|
from authentik.admin.forms.overview import FlowCacheClearForm, PolicyCacheClearForm
|
||||||
from authentik.admin.mixins import AdminRequiredMixin
|
from authentik.admin.mixins import AdminRequiredMixin
|
||||||
from authentik.admin.tasks import VERSION_CACHE_KEY, update_latest_version
|
|
||||||
from authentik.core.models import Provider, User
|
|
||||||
from authentik.policies.models import Policy
|
|
||||||
|
|
||||||
LOGGER = get_logger()
|
LOGGER = get_logger()
|
||||||
|
|
||||||
|
|
||||||
class AdministrationOverviewView(AdminRequiredMixin, TemplateView):
|
|
||||||
"""Overview View"""
|
|
||||||
|
|
||||||
template_name = "administration/overview.html"
|
|
||||||
|
|
||||||
def get_latest_version(self) -> Union[LegacyVersion, Version]:
|
|
||||||
"""Get latest version from cache"""
|
|
||||||
version_in_cache = cache.get(VERSION_CACHE_KEY)
|
|
||||||
if not version_in_cache:
|
|
||||||
if not settings.DEBUG:
|
|
||||||
update_latest_version.delay()
|
|
||||||
return parse(__version__)
|
|
||||||
return parse(version_in_cache)
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
kwargs["policy_count"] = len(Policy.objects.all())
|
|
||||||
kwargs["user_count"] = len(User.objects.all()) - 1 # Remove anonymous user
|
|
||||||
kwargs["provider_count"] = len(Provider.objects.all())
|
|
||||||
kwargs["version"] = parse(__version__)
|
|
||||||
kwargs["version_latest"] = self.get_latest_version()
|
|
||||||
kwargs["providers_without_application"] = Provider.objects.filter(
|
|
||||||
application=None
|
|
||||||
)
|
|
||||||
kwargs["policies_without_binding"] = len(
|
|
||||||
Policy.objects.filter(bindings__isnull=True, promptstage__isnull=True)
|
|
||||||
)
|
|
||||||
kwargs["cached_policies"] = len(cache.keys("policy_*"))
|
|
||||||
kwargs["cached_flows"] = len(cache.keys("flow_*"))
|
|
||||||
return super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
class PolicyCacheClearView(AdminRequiredMixin, SuccessMessageMixin, FormView):
|
class PolicyCacheClearView(AdminRequiredMixin, SuccessMessageMixin, FormView):
|
||||||
"""View to clear Policy cache"""
|
"""View to clear Policy cache"""
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
"""policy API Views"""
|
"""policy API Views"""
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from drf_yasg2.utils import swagger_auto_schema
|
|
||||||
from rest_framework.mixins import ListModelMixin
|
from rest_framework.mixins import ListModelMixin
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
|
@ -7,7 +7,7 @@ import { Interface } from "./Interface";
|
||||||
export const SIDEBAR_ITEMS: SidebarItem[] = [
|
export const SIDEBAR_ITEMS: SidebarItem[] = [
|
||||||
new SidebarItem("Library", "/library/"),
|
new SidebarItem("Library", "/library/"),
|
||||||
new SidebarItem("Monitor").children(
|
new SidebarItem("Monitor").children(
|
||||||
new SidebarItem("Overview", "/administration/overview-ng/"),
|
new SidebarItem("Overview", "/administration/overview/"),
|
||||||
new SidebarItem("System Tasks", "/administration/tasks/"),
|
new SidebarItem("System Tasks", "/administration/tasks/"),
|
||||||
new SidebarItem("Events", "/audit/audit"),
|
new SidebarItem("Events", "/audit/audit"),
|
||||||
).when((): Promise<boolean> => {
|
).when((): Promise<boolean> => {
|
||||||
|
|
|
@ -13,7 +13,7 @@ export const ROUTES: Route[] = [
|
||||||
new Route(new RegExp("^/$")).redirect("/library/"),
|
new Route(new RegExp("^/$")).redirect("/library/"),
|
||||||
new Route(new RegExp("^#.*")).redirect("/library/"),
|
new Route(new RegExp("^#.*")).redirect("/library/"),
|
||||||
new Route(new RegExp("^/library/$"), html`<ak-library></ak-library>`),
|
new Route(new RegExp("^/library/$"), html`<ak-library></ak-library>`),
|
||||||
new Route(new RegExp("^/administration/overview-ng/$"), html`<ak-admin-overview></ak-admin-overview>`),
|
new Route(new RegExp("^/administration/overview/$"), html`<ak-admin-overview></ak-admin-overview>`),
|
||||||
new Route(new RegExp("^/applications/$"), html`<ak-application-list></ak-application-list>`),
|
new Route(new RegExp("^/applications/$"), html`<ak-application-list></ak-application-list>`),
|
||||||
new Route(new RegExp(`^/applications/(?<slug>${SLUG_REGEX})/$`)).then((args) => {
|
new Route(new RegExp(`^/applications/(?<slug>${SLUG_REGEX})/$`)).then((args) => {
|
||||||
return html`<ak-application-view .args=${args}></ak-application-view>`;
|
return html`<ak-application-view .args=${args}></ak-application-view>`;
|
||||||
|
|
Reference in New Issue