[app] Secure plugin loading
This commit is contained in:
parent
dca890dad9
commit
1550be5da6
|
@ -1,3 +1,5 @@
|
||||||
|
import enum
|
||||||
|
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
from flask import Flask, current_app
|
from flask import Flask, current_app
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
|
@ -22,6 +24,8 @@ class CustomJSONEncoder(JSONEncoder):
|
||||||
|
|
||||||
if isinstance(o, datetime) or isinstance(o, date):
|
if isinstance(o, datetime) or isinstance(o, date):
|
||||||
return o.isoformat()
|
return o.isoformat()
|
||||||
|
if isinstance(o, enum.Enum):
|
||||||
|
return o.value
|
||||||
|
|
||||||
# Check if iterable
|
# Check if iterable
|
||||||
try:
|
try:
|
||||||
|
@ -40,12 +44,17 @@ def __load_plugins(app):
|
||||||
logger.debug("Found plugin: >{}<".format(entry_point.name))
|
logger.debug("Found plugin: >{}<".format(entry_point.name))
|
||||||
plugin = None
|
plugin = None
|
||||||
if entry_point.name in config and config[entry_point.name].get("enabled", False):
|
if entry_point.name in config and config[entry_point.name].get("enabled", False):
|
||||||
|
try:
|
||||||
|
logger.info(f"Load plugin {entry_point.name}")
|
||||||
plugin = entry_point.load()
|
plugin = entry_point.load()
|
||||||
setattr(plugin, "_plugin_name", entry_point.name)
|
setattr(plugin, "_plugin_name", entry_point.name)
|
||||||
plugin = plugin(config[entry_point.name])
|
plugin = plugin(config[entry_point.name])
|
||||||
if plugin.blueprint:
|
if plugin.blueprint:
|
||||||
app.register_blueprint(plugin.blueprint)
|
app.register_blueprint(plugin.blueprint)
|
||||||
logger.info("Load plugin >{}<".format(entry_point.name))
|
except:
|
||||||
|
logger.error(
|
||||||
|
f"Plugin {entry_point.name} was enabled, but could not be loaded due to an error.", exc_info=True
|
||||||
|
)
|
||||||
if isinstance(plugin, AuthPlugin):
|
if isinstance(plugin, AuthPlugin):
|
||||||
logger.debug("Found authentication plugin: %s", entry_point.name)
|
logger.debug("Found authentication plugin: %s", entry_point.name)
|
||||||
if entry_point.name == config["FLASCHENGEIST"]["auth"]:
|
if entry_point.name == config["FLASCHENGEIST"]["auth"]:
|
||||||
|
|
Loading…
Reference in New Issue