Skip to content

Commit be01234

Browse files
committed
create groups on demand
1 parent 19ee4af commit be01234

4 files changed

Lines changed: 28 additions & 7 deletions

File tree

dojo/backends.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ def _update_user(
4040
if self.group_re is None:
4141
return user
4242

43-
# list of all existing "SAML2-mapped" groups
44-
all_saml_groups = {group.name: group for group in Dojo_Group.objects.all() if self.group_re.match(group.name)}
43+
# list of all existing "SAML2-mapped" groups - regexp excluded so the ones no longer matching regexp are removed
44+
all_saml_groups = {group.name: group for group in Dojo_Group.objects.filter(social_provider=Dojo_Group.SAML)}
4545

4646
# list of groups user MUST have
4747
needs_groups = set()
@@ -75,8 +75,9 @@ def _update_user(
7575
for group_name in groups_to_add:
7676
group = all_saml_groups.get(group_name)
7777
if group is None:
78-
logger.error("Group %s is mapped for SAML2 but it does not exist in Dojo", group_name)
79-
else:
80-
Dojo_Group_Member.objects.create(group=group, user_id=user.pk, role=reader_role)
81-
logger.debug("User %s became member of SAML2 group: %s", user, group.name)
78+
group = Dojo_Group.objects.create(name=group_name, social_provider=Dojo_Group.SAML)
79+
logger.error("Group %s did not exist locally so it was created", group_name)
80+
81+
Dojo_Group_Member.objects.create(group=group, user_id=user.pk, role=reader_role)
82+
logger.debug("User %s became member of SAML2 group: %s", user, group.name)
8283
return user
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.1.12 on 2025-10-05 14:11
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('dojo', '0244_pghistory_indices'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='dojo_group',
15+
name='social_provider',
16+
field=models.CharField(blank=True, choices=[('AzureAD', 'AzureAD'), ('Remote', 'Remote'), ('SAML2', 'SAML2')], help_text='Group imported from a social provider.', max_length=10, null=True, verbose_name='Social Authentication Provider'),
17+
),
18+
]

dojo/group/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def group_post_save_handler(sender, **kwargs):
3232
group.auth_group = auth_group
3333
group.save()
3434
user = get_current_user()
35-
if user and not settings.AZUREAD_TENANT_OAUTH2_GET_GROUPS:
35+
if user and not settings.AZUREAD_TENANT_OAUTH2_GET_GROUPS and not settings.SAML2_GROUPS_ATTRIBUTE:
3636
# Add the current user as the owner of the group
3737
member = Dojo_Group_Member()
3838
member.user = user

dojo/models.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,9 +273,11 @@ class UserContactInfo(models.Model):
273273
class Dojo_Group(models.Model):
274274
AZURE = "AzureAD"
275275
REMOTE = "Remote"
276+
SAML = "SAML2"
276277
SOCIAL_CHOICES = (
277278
(AZURE, _("AzureAD")),
278279
(REMOTE, _("Remote")),
280+
(SAML, _("SAML2")),
279281
)
280282
name = models.CharField(max_length=255, unique=True)
281283
description = models.CharField(max_length=4000, null=True, blank=True)

0 commit comments

Comments
 (0)