diff --git a/netbox/extras/tables/tables.py b/netbox/extras/tables/tables.py index 8482c5e24..33a18767d 100644 --- a/netbox/extras/tables/tables.py +++ b/netbox/extras/tables/tables.py @@ -20,6 +20,7 @@ __all__ = ( 'ImageAttachmentTable', 'JournalEntryTable', 'ObjectChangeTable', + 'PluginTable', 'SavedFilterTable', 'TaggedItemTable', 'TagTable', @@ -507,3 +508,17 @@ class JournalEntryTable(NetBoxTable): default_columns = ( 'pk', 'created', 'created_by', 'assigned_object_type', 'assigned_object', 'kind', 'comments' ) + + +class PluginTable(tables.Table): + verbose_name = tables.Column() + name = tables.Column() + author = tables.Column() + author_email = tables.Column() + description = tables.Column() + version = tables.Column() + + class Meta: + attrs = { + 'class': 'table table-hover object-list', + } diff --git a/netbox/extras/urls.py b/netbox/extras/urls.py index 0a1786f1f..c760128d5 100644 --- a/netbox/extras/urls.py +++ b/netbox/extras/urls.py @@ -136,4 +136,8 @@ urlpatterns = [ # Markdown path('render/markdown/', views.RenderMarkdownView.as_view(), name="render_markdown"), + + # Plugins + path('plugins/', views.PluginListView.as_view(), name='plugin_list'), + ] diff --git a/netbox/extras/views.py b/netbox/extras/views.py index a3dd7f193..de8ba63ed 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -1,3 +1,5 @@ +from django.apps import apps +from django.conf import settings from django.contrib import messages from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.contenttypes.models import ContentType @@ -1373,3 +1375,21 @@ class RenderMarkdownView(View): rendered = render_markdown(form.cleaned_data['text']) return HttpResponse(rendered) + + +# +# Plugins +# + +class PluginListView(LoginRequiredMixin, View): + + def get(self, request): + plugins = [apps.get_app_config(plugin) for plugin in settings.PLUGINS] + table = tables.PluginTable(plugins) + # table.configure(request) + + return render(request, 'extras/plugin_list.html', { + 'plugins': plugins, + 'active_tab': 'api-tokens', + 'table': table, + }) diff --git a/netbox/netbox/navigation/menu.py b/netbox/netbox/navigation/menu.py index d4969386e..2089873f4 100644 --- a/netbox/netbox/navigation/menu.py +++ b/netbox/netbox/navigation/menu.py @@ -454,6 +454,17 @@ ADMIN_MENU = Menu( ), ), ), + MenuGroup( + label=_('Plugins'), + items=( + MenuItem( + link='extras:plugin_list', + link_text=_('Plugins'), + permissions=['core.view_configrevision'], + staff_only=True + ), + ), + ), ), )