From 7147b68c0964e7a438b8a0fc9f9a5e04123dac11 Mon Sep 17 00:00:00 2001
From: Frank Sauerburger <frank@sauerburger.com>
Date: Tue, 2 Mar 2021 23:24:00 +0100
Subject: [PATCH] Assign public view permission to any-user group

---
 app/hkp/tests.py                         | 11 +++++------
 app/keys_home/migrations/0001_initial.py | 13 +++++++++----
 app/keys_home/signals.py                 |  6 +++++-
 app/owlca/views.py                       | 13 ++++++-------
 app/pgp/views.py                         |  6 +++---
 app/ssh/views.py                         |  7 +++----
 app/wkd/tests.py                         | 11 +++++------
 7 files changed, 36 insertions(+), 31 deletions(-)

diff --git a/app/hkp/tests.py b/app/hkp/tests.py
index c2d8b32..51852c9 100644
--- a/app/hkp/tests.py
+++ b/app/hkp/tests.py
@@ -1,7 +1,6 @@
 from django.test import TestCase
-
+from django.contrib.auth.models import Group
 from guardian.shortcuts import assign_perm
-from guardian.utils import get_anonymous_user
 
 from pgp import models
 
@@ -13,8 +12,8 @@ class CorsHeadersTestCase(TestCase):
             email="frank@sauerburger.com",
             keyid="123456789",
         )
-        anonymous = get_anonymous_user()
-        assign_perm('view_publickey', anonymous, self.toykey)
+        any_user = Group.objects.get(name="any-user")
+        assign_perm('view_publickey', any_user, self.toykey)
 
     def test_policy(self):
         """Check that the policy file has CORS headers"""
@@ -30,8 +29,8 @@ class CaseSensitivityTestCase(TestCase):
             email="frank@sauerburger.com",
             keyid="123456789abcd",
         )
-        anonymous = get_anonymous_user()
-        assign_perm('view_publickey', anonymous, self.toykey)
+        any_user = Group.objects.get(name="any-user")
+        assign_perm('view_publickey', any_user, self.toykey)
 
     def test_lower(self):
         """Check that lower case string can be used to lookup a key"""
diff --git a/app/keys_home/migrations/0001_initial.py b/app/keys_home/migrations/0001_initial.py
index 6536948..e67728d 100644
--- a/app/keys_home/migrations/0001_initial.py
+++ b/app/keys_home/migrations/0001_initial.py
@@ -25,14 +25,19 @@ def add_any_group(*args):
         }
         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)
+        try:
+            anon = get_anonymous_user()
+            for perm, klass in propagate_klasses.items():
+                objs = get_objects_for_user(anon, perm, klass)
+                assign_perm(perm, group, objs)
+        except User.DoesNotExist:
+            # Anonymous user does not exist
+            pass
 		
 
 class Migration(migrations.Migration):
     dependencies = [
+        ('guardian', '0001_initial'),
     ]
 
     operations = [
diff --git a/app/keys_home/signals.py b/app/keys_home/signals.py
index d8f52eb..216318d 100644
--- a/app/keys_home/signals.py
+++ b/app/keys_home/signals.py
@@ -5,4 +5,8 @@ from django.dispatch import receiver
 @receiver(post_save, sender=User)
 def create_user_profile(sender, instance, created, **kwargs):
     if created:
-        instance.groups.add(Group.objects.get(name='any-user'))
+        try:
+            instance.groups.add(Group.objects.get(name='any-user'))
+        except Group.DoesNotExist:
+            # Group not yet created
+            pass
diff --git a/app/owlca/views.py b/app/owlca/views.py
index 2fd99d2..12dadcb 100644
--- a/app/owlca/views.py
+++ b/app/owlca/views.py
@@ -4,10 +4,10 @@ from django.contrib.auth.decorators import login_required
 from django.urls import reverse
 from django.http import HttpResponseRedirect, HttpResponse, Http404
 from django.core.exceptions import ValidationError, PermissionDenied
+from django.contrib.auth.models import Group
 from guardian.decorators import permission_required
 from guardian.mixins import PermissionRequiredMixin, PermissionListMixin
 from guardian.shortcuts import assign_perm, get_users_with_perms, get_objects_for_user
-from guardian.utils import get_anonymous_user
 
 from . import models
 from . import forms
@@ -130,12 +130,11 @@ def ca_create(request):
             assign_perm('change_certificationauthority', request.user, ca)
             assign_perm('request_certificate', request.user, ca)
             if form.cleaned_data['public']:
+                any_user = Group.objects.get(name="any-user")
                 assign_perm('view_certificationauthority',
-                            get_anonymous_user(),
-                            ca)
+                            any_user, ca)
                 assign_perm('request_certificate',
-                            get_anonymous_user(),
-                            ca)
+                            any_user, ca)
 
             csr = ca.create_self_sign_request(password)
             assign_perm('view_certificatesigningrequest', request.user, csr)
@@ -146,9 +145,9 @@ def ca_create(request):
             assign_perm('view_certificate', request.user, cert)
             assign_perm('change_certificate', request.user, cert)
             if form.cleaned_data['public']:
+                any_user = Group.objects.get(name="any-user")
                 assign_perm('view_certificate',
-                            get_anonymous_user(),
-                            cert)
+                            any_user, cert)
 
             ca.save()
 
diff --git a/app/pgp/views.py b/app/pgp/views.py
index 2344124..c95ed38 100644
--- a/app/pgp/views.py
+++ b/app/pgp/views.py
@@ -3,9 +3,9 @@ from django.urls import reverse_lazy
 from django.http import Http404
 from django.utils.translation import gettext as _
 from django.views.generic import DetailView, ListView, CreateView
+from django.contrib.auth.models import Group
 from guardian.mixins import PermissionRequiredMixin, PermissionListMixin
 from guardian.shortcuts import assign_perm
-from guardian.utils import get_anonymous_user
 
 from . import models
 from . import forms
@@ -58,7 +58,7 @@ class PublicKeyCreateView(PermissionRequiredMixin, CreateView):
         assign_perm('view_publickey', self.request.user, self.object)
         assign_perm('change_publickey', self.request.user, self.object)
         if form.cleaned_data["public"]:
-            anonymous = get_anonymous_user()
-            assign_perm('view_publickey', anonymous, self.object)
+            any_user = Group.objects.get(name="any-user")
+            assign_perm('view_publickey', any_user, self.object)
 
         return resp
diff --git a/app/ssh/views.py b/app/ssh/views.py
index f2434b9..ce5d6d3 100644
--- a/app/ssh/views.py
+++ b/app/ssh/views.py
@@ -1,10 +1,10 @@
 from django.shortcuts import render, reverse
 from django.views.generic import DetailView, ListView, CreateView
 from django.http import HttpResponseRedirect
+from django.contrib.auth.models import Group
 from guardian.mixins import PermissionRequiredMixin, PermissionListMixin
 from guardian.decorators import permission_required
 from guardian.shortcuts import assign_perm
-from guardian.utils import get_anonymous_user
 from . import models
 from . import forms
 
@@ -29,9 +29,8 @@ def publickey_create(request):
             assign_perm('change_sshpublickey', request.user, pk)
 
             if form.cleaned_data['public']:
-                assign_perm('view_sshpublickey',
-                            get_anonymous_user(),
-                            pk)
+                any_user = Group.objects.get(name="any-user")
+                assign_perm('view_sshpublickey', any_user, pk)
             return HttpResponseRedirect(reverse('ssh-list'))
 
     # if a GET (or any other method) we'll create a blank form
diff --git a/app/wkd/tests.py b/app/wkd/tests.py
index 4533a12..0ffefbe 100644
--- a/app/wkd/tests.py
+++ b/app/wkd/tests.py
@@ -1,8 +1,7 @@
 import hashlib
 from django.test import TestCase
+from django.contrib.auth.models import Group
 from guardian.shortcuts import assign_perm
-from guardian.utils import get_anonymous_user
-
 from pgp import models
 from pgp.zbase32 import encode
 
@@ -13,8 +12,8 @@ class CorsHeadersTestCase(TestCase):
         self.toykey = models.PublicKey.objects.create(
             email="frank@sauerburger.com"
         )
-        anonymous = get_anonymous_user()
-        assign_perm('view_publickey', anonymous, self.toykey)
+        any_user = Group.objects.get(name="any-user")
+        assign_perm('view_publickey', any_user, self.toykey)
 
     def test_policy(self):
         """Check that the policy file has CORS headers"""
@@ -50,8 +49,8 @@ class WkdCapitalizationTestCase(TestCase):
         self.toykey = models.PublicKey.objects.create(
             email="FrÄnk@SauerburgEr.com"
         )
-        anonymous = get_anonymous_user()
-        assign_perm('view_publickey', anonymous, self.toykey)
+        any_user = Group.objects.get(name="any-user")
+        assign_perm('view_publickey', any_user, self.toykey)
 
     def test_advanced(self):
         """Check that advanced url"""
-- 
GitLab