summaryrefslogtreecommitdiff
path: root/ishtar_common/management
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-11-07 14:59:01 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-02-19 14:43:49 +0100
commit89ff92664ff06a974e37c15ab663394271ac4a10 (patch)
tree48289b45207b4bd8ca73e7aaea116f15783df434 /ishtar_common/management
parentdbd8b853ce6bf5bc636f08448da8ff897963193e (diff)
downloadIshtar-89ff92664ff06a974e37c15ab663394271ac4a10.tar.bz2
Ishtar-89ff92664ff06a974e37c15ab663394271ac4a10.zip
✨ update permission script - admin: delete "owns" groups when non relevent
Diffstat (limited to 'ishtar_common/management')
-rw-r--r--ishtar_common/management/commands/ishtar_update_permissions.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/ishtar_common/management/commands/ishtar_update_permissions.py b/ishtar_common/management/commands/ishtar_update_permissions.py
new file mode 100644
index 000000000..d8d8944bf
--- /dev/null
+++ b/ishtar_common/management/commands/ishtar_update_permissions.py
@@ -0,0 +1,66 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from argparse import RawTextHelpFormatter
+import datetime
+import sys
+
+from django.conf import settings
+from django.core.management.base import BaseCommand
+
+from ishtar_common import models
+from ishtar_common.utils import BColors
+
+
+def update_permissions(quiet=False):
+ q = models.IshtarUser.objects.all()
+ nb = q.count()
+ updated = 0
+ for idx, user in enumerate(q.all()):
+ if not quiet:
+ sys.stdout.write(f"\r[{percent(idx, nb)}] {idx + 1}/{nb}")
+ if user.need_permission_refresh():
+ user.generate_permission()
+ updated += 1
+ if not quiet:
+ msg = BColors.format("OKGREEN", f"\r{updated} user permissions updated")
+ sys.stdout.write(msg)
+ sys.stdout.write("\n")
+
+
+def percent(current, total):
+ return f"{(current + 1) / total * 100:.1f}".rjust(4, "0") + "%"
+
+
+def get_time():
+ return datetime.datetime.now().isoformat().split(".")[0]
+
+
+class Command(BaseCommand):
+ help = "Update permissions"
+
+ def parser_error(self, message=""):
+ sys.stderr.write(f"{message}\n")
+ self.parser.print_help()
+ sys.exit(2)
+
+ def create_parser(self, *args, **kwargs):
+ parser = super(Command, self).create_parser(*args, **kwargs)
+ parser.formatter_class = RawTextHelpFormatter
+ self.parser = parser
+ parser.error = self.parser_error
+ return parser
+
+ def add_arguments(self, parser):
+ parser.add_argument(
+ "--quiet", dest="quiet", action="store_true", help="Quiet output"
+ )
+
+ def handle(self, *args, **options):
+ settings.USE_BACKGROUND_TASK = False
+ quiet = options["quiet"]
+ if not quiet:
+ msg = BColors.format("HEADER", f"[{get_time()}] Updating permissions\n")
+ sys.stdout.write(msg)
+ update_permissions(quiet)
+ sys.exit(1)