From 2c60f1055f19601e6205fbabd0ce10e3bc587360 Mon Sep 17 00:00:00 2001
From: Frank Sauerburger <frank@sauerburger.com>
Date: Tue, 2 Mar 2021 22:58:26 +0100
Subject: [PATCH] Add any-group

---
 app/keys_home/migrations/0001_initial.py | 40 ++++++++++++++++++++++++
 app/pgp/admin.py                         |  7 +++--
 app/ssh/admin.py                         |  6 +++-
 3 files changed, 50 insertions(+), 3 deletions(-)
 create mode 100644 app/keys_home/migrations/0001_initial.py

diff --git a/app/keys_home/migrations/0001_initial.py b/app/keys_home/migrations/0001_initial.py
new file mode 100644
index 0000000..6536948
--- /dev/null
+++ b/app/keys_home/migrations/0001_initial.py
@@ -0,0 +1,40 @@
+# Generated by Django 3.1.3 on 2021-03-02 20:28
+
+import logging
+from django.db import migrations
+from django.contrib.auth.models import Group, User
+from guardian.utils import get_anonymous_user
+from guardian.shortcuts import get_objects_for_user, assign_perm
+from pgp import models as pgp
+from ssh import models as ssh
+from owlca import models as owlca
+
+def add_any_group(*args):
+    group, created = Group.objects.get_or_create(name='any-user') 
+    if created:
+        logging.info('any-user Group created')
+
+        for user in User.objects.all():
+            logging.info(f"Adding {user} to any-user Group")
+            group.user_set.add(user)
+
+        propagate_klasses = {
+            "view_publickey": pgp.PublicKey,
+            "view_sshpublickey": ssh.SSHPublicKey,
+            "view_certificationauthority": owlca.CertificationAuthority,
+        }
+        group.save()
+
+        anon = get_anonymous_user()
+        for perm, klass in propagate_klasses.items():
+            objs = get_objects_for_user(anon, perm, klass)
+            assign_perm(perm, group, objs)
+		
+
+class Migration(migrations.Migration):
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.RunPython(add_any_group),
+    ]
diff --git a/app/pgp/admin.py b/app/pgp/admin.py
index aaf003b..cb0529a 100644
--- a/app/pgp/admin.py
+++ b/app/pgp/admin.py
@@ -1,5 +1,8 @@
 from django.contrib import admin
-
+from guardian.admin import GuardedModelAdmin
 from . import models
 
-admin.site.register(models.PublicKey)
+class PublicKeyAdmin(GuardedModelAdmin):
+    pass
+
+admin.site.register(models.PublicKey, PublicKeyAdmin)
diff --git a/app/ssh/admin.py b/app/ssh/admin.py
index 0bb99ca..3897bf0 100644
--- a/app/ssh/admin.py
+++ b/app/ssh/admin.py
@@ -1,4 +1,8 @@
 from django.contrib import admin
+from guardian.admin import GuardedModelAdmin
 from . import models
 
-admin.site.register(models.SSHPublicKey)
+class SSHPublicKeyAdmin(GuardedModelAdmin):
+    pass
+
+admin.site.register(models.SSHPublicKey, SSHPublicKeyAdmin)
-- 
GitLab