[cli] Make sure plugin permissions are installed
Signed-off-by: Ferdinand Thiessen <rpm@fthiessen.de>
This commit is contained in:
parent
3d6b37f0a5
commit
6c73a63eb5
|
@ -4,7 +4,9 @@ from flask import current_app
|
||||||
from flask.cli import with_appcontext
|
from flask.cli import with_appcontext
|
||||||
from importlib_metadata import EntryPoint, entry_points
|
from importlib_metadata import EntryPoint, entry_points
|
||||||
|
|
||||||
|
from flaschengeist.database import db
|
||||||
from flaschengeist.config import config
|
from flaschengeist.config import config
|
||||||
|
from flaschengeist.models.user import Permission
|
||||||
|
|
||||||
|
|
||||||
@click.group()
|
@click.group()
|
||||||
|
@ -12,12 +14,7 @@ def plugin():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@plugin.command()
|
def install_plugin_command(ctx, plugin, all):
|
||||||
@click.argument("plugin", nargs=-1, type=str)
|
|
||||||
@click.option("--all", help="Install all enabled plugins", is_flag=True)
|
|
||||||
@with_appcontext
|
|
||||||
@pass_context
|
|
||||||
def install(ctx, plugin, all):
|
|
||||||
"""Install one or more plugins"""
|
"""Install one or more plugins"""
|
||||||
if not all and len(plugin) == 0:
|
if not all and len(plugin) == 0:
|
||||||
ctx.fail("At least one plugin must be specified, or use `--all` flag.")
|
ctx.fail("At least one plugin must be specified, or use `--all` flag.")
|
||||||
|
@ -31,10 +28,30 @@ def install(ctx, plugin, all):
|
||||||
for p in plugins:
|
for p in plugins:
|
||||||
name = p.id.split(".")[-1]
|
name = p.id.split(".")[-1]
|
||||||
click.echo(f"Installing {name}{'.'*(20-len(name))}", nl=False)
|
click.echo(f"Installing {name}{'.'*(20-len(name))}", nl=False)
|
||||||
|
# Install permissions
|
||||||
|
if p.permissions:
|
||||||
|
cur_perm = set(x.name for x in Permission.query.filter(Permission.name.in_(p.permissions)).all())
|
||||||
|
all_perm = set(p.permissions)
|
||||||
|
|
||||||
|
add = all_perm - cur_perm
|
||||||
|
if add:
|
||||||
|
db.session.bulk_save_objects([Permission(name=x) for x in all_perm])
|
||||||
|
db.session.commit()
|
||||||
|
# Custom installation steps
|
||||||
p.install()
|
p.install()
|
||||||
click.secho(" ok", fg="green")
|
click.secho(" ok", fg="green")
|
||||||
|
|
||||||
|
|
||||||
|
@plugin.command()
|
||||||
|
@click.argument("plugin", nargs=-1, type=str)
|
||||||
|
@click.option("--all", help="Install all enabled plugins", is_flag=True)
|
||||||
|
@with_appcontext
|
||||||
|
@pass_context
|
||||||
|
def install(ctx, plugin, all):
|
||||||
|
"""Install one or more plugins"""
|
||||||
|
return install_plugin_command(ctx, plugin, all)
|
||||||
|
|
||||||
|
|
||||||
@plugin.command()
|
@plugin.command()
|
||||||
@click.argument("plugin", nargs=-1, type=str)
|
@click.argument("plugin", nargs=-1, type=str)
|
||||||
@with_appcontext
|
@with_appcontext
|
||||||
|
|
|
@ -19,7 +19,7 @@ class AuthPlain(AuthPlugin):
|
||||||
def install(self):
|
def install(self):
|
||||||
plugins_installed(self.post_install)
|
plugins_installed(self.post_install)
|
||||||
|
|
||||||
def post_install(self, **kwargs):
|
def post_install(self, *args, **kwargs):
|
||||||
if User.query.filter(User.deleted == False).count() == 0:
|
if User.query.filter(User.deleted == False).count() == 0:
|
||||||
logger.info("Installing admin user")
|
logger.info("Installing admin user")
|
||||||
role = Role.query.filter(Role.name == "Superuser").first()
|
role = Role.query.filter(Role.name == "Superuser").first()
|
||||||
|
|
Loading…
Reference in New Issue