Adds plugin functions to register javascript and CSS in the admin panel. Move global plugin script/stylesheet lists into application factory specific lists. Closes #804 (#805)

* Adds plugin functions to register javascript and CSS in the admin panel
* Move global plugin script/stylesheet lists into application factory specific lists
* Closes #804
This commit is contained in:
Kevin Chung
2018-12-15 13:48:21 -05:00
committed by GitHub
parent 367110969e
commit f4f4bd5333
5 changed files with 114 additions and 18 deletions

View File

@@ -3,20 +3,19 @@ import importlib
import os
from collections import namedtuple
from flask.helpers import safe_join
from flask import current_app as app, send_file, send_from_directory, abort
from CTFd.utils.decorators import admins_only as admins_only_wrapper
from CTFd.utils.plugins import (
override_template as utils_override_template,
register_script as utils_register_plugin_script,
register_stylesheet as utils_register_plugin_stylesheet,
register_admin_script as utils_register_admin_plugin_script,
register_admin_stylesheet as utils_register_admin_plugin_stylesheet
)
from CTFd.utils.config.pages import get_pages
Menu = namedtuple('Menu', ['title', 'route'])
ADMIN_PLUGIN_MENU_BAR = []
USER_PAGE_MENU_BAR = []
def register_plugin_assets_directory(app, base_path, admins_only=False):
@@ -83,6 +82,26 @@ def register_plugin_stylesheet(*args, **kwargs):
utils_register_plugin_stylesheet(*args, **kwargs)
def register_admin_plugin_script(*args, **kwargs):
"""
Adds a given script to the base.html of the admin theme which all admin pages inherit from
:param args:
:param kwargs:
:return:
"""
utils_register_admin_plugin_script(*args, **kwargs)
def register_admin_plugin_stylesheet(*args, **kwargs):
"""
Adds a given stylesheet to the base.html of the admin theme which all admin pages inherit from
:param args:
:param kwargs:
:return:
"""
utils_register_admin_plugin_stylesheet(*args, **kwargs)
def register_admin_plugin_menu_bar(title, route):
"""
Registers links on the Admin Panel menubar/navbar
@@ -92,7 +111,7 @@ def register_admin_plugin_menu_bar(title, route):
:return:
"""
am = Menu(title=title, route=route)
ADMIN_PLUGIN_MENU_BAR.append(am)
app.admin_plugin_menu_bar.append(am)
def get_admin_plugin_menu_bar():
@@ -101,7 +120,7 @@ def get_admin_plugin_menu_bar():
:return: Returns a list of Menu namedtuples. They have name, and route attributes.
"""
return ADMIN_PLUGIN_MENU_BAR
return app.admin_plugin_menu_bar
def register_user_page_menu_bar(title, route):
@@ -113,7 +132,7 @@ def register_user_page_menu_bar(title, route):
:return:
"""
p = Menu(title=title, route=route)
USER_PAGE_MENU_BAR.append(p)
app.plugin_menu_bar.append(p)
def get_user_page_menu_bar():
@@ -122,7 +141,7 @@ def get_user_page_menu_bar():
:return: Returns a list of Menu namedtuples. They have name, and route attributes.
"""
return get_pages() + USER_PAGE_MENU_BAR
return get_pages() + app.plugin_menu_bar
def bypass_csrf_protection(f):
@@ -146,6 +165,14 @@ def init_plugins(app):
:param app: A CTFd application
:return:
"""
app.admin_plugin_scripts = []
app.admin_plugin_stylesheets = []
app.plugin_scripts = []
app.plugin_stylesheets = []
app.admin_plugin_menu_bar = []
app.plugin_menu_bar = []
if app.config.get('SAFE_MODE', False) is False:
modules = sorted(glob.glob(os.path.dirname(__file__) + "/*"))
blacklist = {'__pycache__'}