🔥(dimail) remove obsolete user and allow creation in dimail setup
Remove obsolete duplication to dimail database. See PR https://github.com/suitenumerique/people/pull/886 for more context.
This commit is contained in:
committed by
Marie
parent
ce66645294
commit
0bbce9ffc8
@@ -47,9 +47,9 @@ class Command(BaseCommand):
|
|||||||
f"This command is not meant to run in {settings.CONFIGURATION} environment."
|
f"This command is not meant to run in {settings.CONFIGURATION} environment."
|
||||||
)
|
)
|
||||||
|
|
||||||
# Create a first superuser for dimail-api container. User creation is usually
|
# Create a first superuser for dimail-api container.
|
||||||
# protected behind admin rights but dimail allows to create a first user
|
# User creation is usually protected behind admin rights
|
||||||
# when database is empty
|
# but dimail allows to create a first user when database is empty
|
||||||
self.create_user(
|
self.create_user(
|
||||||
auth=("", ""),
|
auth=("", ""),
|
||||||
name=admin["username"],
|
name=admin["username"],
|
||||||
@@ -57,8 +57,8 @@ class Command(BaseCommand):
|
|||||||
perms=[],
|
perms=[],
|
||||||
)
|
)
|
||||||
|
|
||||||
# Create Regie user, auth for all remaining requests
|
# Create Regie user,
|
||||||
# and your own dev
|
# auth for all remaining requests and your own local setup
|
||||||
self.create_user(
|
self.create_user(
|
||||||
auth=(admin["username"], admin["password"]),
|
auth=(admin["username"], admin["password"]),
|
||||||
name=regie["username"],
|
name=regie["username"],
|
||||||
@@ -66,28 +66,22 @@ class Command(BaseCommand):
|
|||||||
perms=["new_domain", "create_users", "manage_users"],
|
perms=["new_domain", "create_users", "manage_users"],
|
||||||
)
|
)
|
||||||
|
|
||||||
# we create a domain and add John Doe to it
|
# Create a test domain for local development
|
||||||
domain_name = "test.domain.com"
|
|
||||||
domain = MailDomain.objects.get_or_create(
|
|
||||||
name=domain_name,
|
|
||||||
defaults={
|
|
||||||
"status": enums.MailDomainStatusChoices.ENABLED,
|
|
||||||
"support_email": f"support@{domain_name}",
|
|
||||||
},
|
|
||||||
)[0]
|
|
||||||
self.create_domain(domain_name)
|
|
||||||
|
|
||||||
# we create a dimail user for keycloak+regie user John Doe
|
|
||||||
# This way, la Régie will be able to make request in the name of
|
|
||||||
# this user
|
|
||||||
try:
|
try:
|
||||||
people_base_user = User.objects.get(email="people@people.world")
|
people_base_user = User.objects.get(email="people@people.world")
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
self.stdout.write("people@people.world user not found", ending="\n")
|
self.stdout.write("people@people.world user not found", ending="\n")
|
||||||
else:
|
else:
|
||||||
|
domain_name = "test.domain.com"
|
||||||
|
domain = MailDomain.objects.get_or_create(
|
||||||
|
name=domain_name,
|
||||||
|
defaults={
|
||||||
|
"status": enums.MailDomainStatusChoices.ENABLED,
|
||||||
|
"support_email": f"support@{domain_name}",
|
||||||
|
},
|
||||||
|
)[0]
|
||||||
|
self.create_domain(domain_name)
|
||||||
# create accesses for john doe
|
# create accesses for john doe
|
||||||
self.create_user(name=people_base_user.sub)
|
|
||||||
self.create_allow(people_base_user.sub, domain_name)
|
|
||||||
MailDomainAccess.objects.get_or_create(
|
MailDomainAccess.objects.get_or_create(
|
||||||
user=people_base_user,
|
user=people_base_user,
|
||||||
domain=domain,
|
domain=domain,
|
||||||
@@ -97,7 +91,7 @@ class Command(BaseCommand):
|
|||||||
if options["populate_from_people"]:
|
if options["populate_from_people"]:
|
||||||
self._populate_dimail_from_people()
|
self._populate_dimail_from_people()
|
||||||
|
|
||||||
self.stdout.write("DONE", ending="\n")
|
self.stdout.write("DONE 🎉", ending="\n")
|
||||||
|
|
||||||
def create_user(
|
def create_user(
|
||||||
self,
|
self,
|
||||||
@@ -148,41 +142,12 @@ class Command(BaseCommand):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def create_allow(self, user, domain):
|
|
||||||
"""
|
|
||||||
Send a request to create a new allows between user and domain using DimailAPIClient.
|
|
||||||
"""
|
|
||||||
response = self.client.create_allow(user, domain)
|
|
||||||
|
|
||||||
if response.status_code == status.HTTP_201_CREATED:
|
|
||||||
self.stdout.write(
|
|
||||||
self.style.SUCCESS(
|
|
||||||
f"Creating permissions for {user} on {domain} ........ OK"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
self.stdout.write(
|
|
||||||
self.style.ERROR(
|
|
||||||
f"Creating permissions for {user} on {domain}\
|
|
||||||
........ failed: {response.json()['detail']}"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
def _populate_dimail_from_people(self):
|
def _populate_dimail_from_people(self):
|
||||||
self.stdout.write("Creating accounts from people database", ending="\n")
|
"""Populate dimail so that it reflects people's domains."""
|
||||||
|
self.stdout.write("Creating domain from people database", ending="\n")
|
||||||
user_to_create = set()
|
|
||||||
domain_to_create = set()
|
|
||||||
access_to_create = set()
|
|
||||||
for mail_access in MailDomainAccess.objects.select_related(
|
|
||||||
"domain", "user"
|
|
||||||
).all():
|
|
||||||
user_to_create.add(mail_access.user)
|
|
||||||
domain_to_create.add(mail_access.domain)
|
|
||||||
access_to_create.add(mail_access)
|
|
||||||
|
|
||||||
# create missing domains
|
# create missing domains
|
||||||
for domain in domain_to_create:
|
for domain in MailDomain.objects.all():
|
||||||
# enforce domain status
|
# enforce domain status
|
||||||
if domain.status != enums.MailDomainStatusChoices.ENABLED:
|
if domain.status != enums.MailDomainStatusChoices.ENABLED:
|
||||||
self.stdout.write(
|
self.stdout.write(
|
||||||
@@ -191,15 +156,3 @@ class Command(BaseCommand):
|
|||||||
domain.status = enums.MailDomainStatusChoices.ENABLED
|
domain.status = enums.MailDomainStatusChoices.ENABLED
|
||||||
domain.save()
|
domain.save()
|
||||||
self.create_domain(domain.name)
|
self.create_domain(domain.name)
|
||||||
|
|
||||||
# create missing users
|
|
||||||
for user in user_to_create:
|
|
||||||
self.create_user(
|
|
||||||
auth=(admin["username"], admin["password"]),
|
|
||||||
name=user.sub,
|
|
||||||
perms=[], # no permission needed for "classic" users
|
|
||||||
)
|
|
||||||
|
|
||||||
# create missing accesses
|
|
||||||
for access in access_to_create:
|
|
||||||
self.create_allow(access.user.sub, access.domain.name)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user