From ff65f7fd7b8d2fca407d2c4f0f38982968bf87e0 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 16 Aug 2018 09:44:00 -0400 Subject: [PATCH] Fixes #2362: Implemented custom admin site to properly handle BASE_PATH --- netbox/extras/admin.py | 19 ++++++++----------- netbox/netbox/admin.py | 30 ++++++++++++++++++++++++++++++ netbox/netbox/settings.py | 1 - netbox/netbox/urls.py | 5 ++--- netbox/secrets/admin.py | 3 ++- netbox/users/admin.py | 3 ++- 6 files changed, 44 insertions(+), 17 deletions(-) create mode 100644 netbox/netbox/admin.py diff --git a/netbox/extras/admin.py b/netbox/extras/admin.py index 2b140b444..0549ce317 100644 --- a/netbox/extras/admin.py +++ b/netbox/extras/admin.py @@ -4,12 +4,9 @@ from django import forms from django.contrib import admin from django.utils.safestring import mark_safe +from netbox.admin import admin_site from utilities.forms import LaxURLField -from .constants import OBJECTCHANGE_ACTION_CREATE, OBJECTCHANGE_ACTION_DELETE, OBJECTCHANGE_ACTION_UPDATE -from .models import ( - ConfigContext, CustomField, CustomFieldChoice, Graph, ExportTemplate, ObjectChange, TopologyMap, UserAction, - Webhook, -) +from .models import CustomField, CustomFieldChoice, Graph, ExportTemplate, TopologyMap, UserAction, Webhook def order_content_types(field): @@ -39,7 +36,7 @@ class WebhookForm(forms.ModelForm): order_content_types(self.fields['obj_type']) -@admin.register(Webhook) +@admin.register(Webhook, site=admin_site) class WebhookAdmin(admin.ModelAdmin): list_display = [ 'name', 'models', 'payload_url', 'http_content_type', 'enabled', 'type_create', 'type_update', @@ -72,7 +69,7 @@ class CustomFieldChoiceAdmin(admin.TabularInline): extra = 5 -@admin.register(CustomField) +@admin.register(CustomField, site=admin_site) class CustomFieldAdmin(admin.ModelAdmin): inlines = [CustomFieldChoiceAdmin] list_display = ['name', 'models', 'type', 'required', 'filter_logic', 'default', 'weight', 'description'] @@ -86,7 +83,7 @@ class CustomFieldAdmin(admin.ModelAdmin): # Graphs # -@admin.register(Graph) +@admin.register(Graph, site=admin_site) class GraphAdmin(admin.ModelAdmin): list_display = ['name', 'type', 'weight', 'source'] @@ -109,7 +106,7 @@ class ExportTemplateForm(forms.ModelForm): self.fields['content_type'].choices.insert(0, ('', '---------')) -@admin.register(ExportTemplate) +@admin.register(ExportTemplate, site=admin_site) class ExportTemplateAdmin(admin.ModelAdmin): list_display = ['name', 'content_type', 'description', 'mime_type', 'file_extension'] form = ExportTemplateForm @@ -119,7 +116,7 @@ class ExportTemplateAdmin(admin.ModelAdmin): # Topology maps # -@admin.register(TopologyMap) +@admin.register(TopologyMap, site=admin_site) class TopologyMapAdmin(admin.ModelAdmin): list_display = ['name', 'slug', 'site'] prepopulated_fields = { @@ -131,7 +128,7 @@ class TopologyMapAdmin(admin.ModelAdmin): # User actions # -@admin.register(UserAction) +@admin.register(UserAction, site=admin_site) class UserActionAdmin(admin.ModelAdmin): actions = None list_display = ['user', 'action', 'content_type', 'object_id', '_message'] diff --git a/netbox/netbox/admin.py b/netbox/netbox/admin.py new file mode 100644 index 000000000..4c7e0f81b --- /dev/null +++ b/netbox/netbox/admin.py @@ -0,0 +1,30 @@ +from django.conf import settings +from django.contrib.admin import AdminSite +from django.contrib.auth.models import Group, User +from django.contrib.auth.admin import GroupAdmin, UserAdmin +from taggit.admin import TagAdmin +from taggit.models import Tag + + +class NetBoxAdminSite(AdminSite): + """ + Custom admin site + """ + site_header = 'NetBox Administration' + site_title = 'NetBox' + site_url = '/{}'.format(settings.BASE_PATH) + + +admin_site = NetBoxAdminSite(name='admin') + +# Register external models +admin_site.register(Group, GroupAdmin) +admin_site.register(User, UserAdmin) +admin_site.register(Tag, TagAdmin) + +# Modify the template to include an RQ link if django_rq is installed (see RQ_SHOW_ADMIN_LINK) +try: + import django_rq + admin_site.index_template = 'django_rq/index.html' +except ImportError: + pass diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index f6d1b26fd..e449eec97 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -272,7 +272,6 @@ RQ_QUEUES = { 'DEFAULT_TIMEOUT': REDIS_DEFAULT_TIMEOUT, } } -RQ_SHOW_ADMIN_LINK = True # drf_yasg settings for Swagger SWAGGER_SETTINGS = { diff --git a/netbox/netbox/urls.py b/netbox/netbox/urls.py index d23e2d64e..9354e24b9 100644 --- a/netbox/netbox/urls.py +++ b/netbox/netbox/urls.py @@ -2,13 +2,13 @@ from __future__ import unicode_literals from django.conf import settings from django.conf.urls import include, url -from django.contrib import admin from django.views.static import serve from drf_yasg.views import get_schema_view from drf_yasg import openapi from netbox.views import APIRootView, HomeView, SearchView from users.views import LoginView, LogoutView +from .admin import admin_site schema_view = get_schema_view( openapi.Info( @@ -60,7 +60,7 @@ _patterns = [ url(r'^media/(?P.*)$', serve, {'document_root': settings.MEDIA_ROOT}), # Admin - url(r'^admin/', admin.site.urls), + url(r'^admin/', admin_site.urls), ] @@ -69,7 +69,6 @@ if settings.WEBHOOKS_ENABLED: url(r'^admin/webhook-backend-status/', include('django_rq.urls')), ] - if settings.DEBUG: import debug_toolbar _patterns += [ diff --git a/netbox/secrets/admin.py b/netbox/secrets/admin.py index ac7a91fd6..4eeac519c 100644 --- a/netbox/secrets/admin.py +++ b/netbox/secrets/admin.py @@ -3,11 +3,12 @@ from __future__ import unicode_literals from django.contrib import admin, messages from django.shortcuts import redirect, render +from netbox.admin import admin_site from .forms import ActivateUserKeyForm from .models import UserKey -@admin.register(UserKey) +@admin.register(UserKey, site=admin_site) class UserKeyAdmin(admin.ModelAdmin): actions = ['activate_selected'] list_display = ['user', 'is_filled', 'is_active', 'created'] diff --git a/netbox/users/admin.py b/netbox/users/admin.py index ccf640edd..ba7a0f912 100644 --- a/netbox/users/admin.py +++ b/netbox/users/admin.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django import forms from django.contrib import admin +from netbox.admin import admin_site from .models import Token @@ -14,7 +15,7 @@ class TokenAdminForm(forms.ModelForm): model = Token -@admin.register(Token) +@admin.register(Token, site=admin_site) class TokenAdmin(admin.ModelAdmin): form = TokenAdminForm list_display = ['key', 'user', 'created', 'expires', 'write_enabled', 'description']