diff --git a/tests/mdm/test_dep_enrollment_public_views.py b/tests/mdm/test_dep_enrollment_public_views.py index 0f23b5d9f..aae428f8e 100644 --- a/tests/mdm/test_dep_enrollment_public_views.py +++ b/tests/mdm/test_dep_enrollment_public_views.py @@ -313,7 +313,8 @@ def test_dep_web_enroll_blocked(self, vicsp, post_event): def test_dep_web_enroll(self, vicsp, post_event): vicsp.side_effect = lambda d: d - session, _, _ = force_dep_enrollment_session(self.mbu, realm_user=True) + display_name = get_random_string(12) + session, _, _ = force_dep_enrollment_session(self.mbu, realm_user=True, enrollment_display_name=display_name) enrollment = session.dep_enrollment serial_number = get_random_string(10) udid = str(uuid.uuid4()).upper() @@ -348,3 +349,4 @@ def test_dep_web_enroll(self, vicsp, post_event): _, profile_data = verify_signed_payload(response.content) profile = plistlib.loads(profile_data) self.assertEqual(profile["PayloadIdentifier"], "zentral.mdm") + self.assertEqual(profile["PayloadOrganization"], display_name) diff --git a/tests/mdm/test_ota_enrollment_public_views.py b/tests/mdm/test_ota_enrollment_public_views.py index f8d569790..99b71f9ed 100644 --- a/tests/mdm/test_ota_enrollment_public_views.py +++ b/tests/mdm/test_ota_enrollment_public_views.py @@ -72,6 +72,7 @@ def test_ota_enrollment_enroll_redirect(self, post_event): _, profile_data = verify_signed_payload(response.content) profile = plistlib.loads(profile_data) self.assertEqual(profile["PayloadContent"]["URL"], "https://zentral/public/mdm/ota_session_enroll/") + self.assertEqual(profile["PayloadOrganization"], enrollment.display_name) # ota_enroll diff --git a/tests/mdm/test_setup_dep_enrollment.py b/tests/mdm/test_setup_dep_enrollment.py index cebe647f6..19c1a593c 100644 --- a/tests/mdm/test_setup_dep_enrollment.py +++ b/tests/mdm/test_setup_dep_enrollment.py @@ -66,11 +66,13 @@ def test_create_dep_enrollment_get(self): def test_create_dep_enrollment_os_version_errors(self): self._login("mdm.add_depenrollment", "mdm.view_depenrollment") name = get_random_string(64) + display_name = get_random_string(12) push_certificate = force_push_certificate() scep_config = force_scep_config() dep_virtual_server = force_dep_virtual_server() response = self.client.post(reverse("mdm:create_dep_enrollment"), {"de-name": name, + "de-display_name": display_name, "de-scep_config": scep_config.pk, "de-push_certificate": push_certificate.pk, "de-virtual_server": dep_virtual_server.pk, @@ -226,11 +228,13 @@ def test_create_dep_enrollment_post(self, from_dep_virtual_server): from_dep_virtual_server.return_value = client self._login("mdm.add_depenrollment", "mdm.view_depenrollment") name = get_random_string(64) + display_name = get_random_string(12) push_certificate = force_push_certificate() scep_config = force_scep_config() dep_virtual_server = force_dep_virtual_server() response = self.client.post(reverse("mdm:create_dep_enrollment"), {"de-name": name, + "de-display_name": display_name, "de-scep_config": scep_config.pk, "de-scep_verification": "", "de-push_certificate": push_certificate.pk, @@ -249,11 +253,13 @@ def test_create_dep_enrollment_post(self, from_dep_virtual_server): self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "mdm/depenrollment_detail.html") self.assertContains(response, name) + self.assertContains(response, display_name) self.assertContains(response, push_certificate.name) self.assertContains(response, scep_config.name) self.assertContains(response, "without CSR verification") enrollment = response.context["object"] self.assertEqual(enrollment.name, name) + self.assertEqual(enrollment.display_name, display_name) self.assertEqual(enrollment.push_certificate, push_certificate) self.assertEqual(enrollment.scep_config, scep_config) self.assertEqual(enrollment.ios_max_version, "") @@ -294,6 +300,7 @@ def test_view_dep_enrollment_no_extra_perms(self): self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "mdm/depenrollment_detail.html") self.assertContains(response, enrollment.name) + self.assertContains(response, enrollment.display_name) self.assertContains(response, enrollment.push_certificate.name) self.assertNotContains(response, enrollment.push_certificate.get_absolute_url()) self.assertContains(response, enrollment.scep_config.name) @@ -419,8 +426,10 @@ def test_update_dep_enrollment_post(self, from_dep_virtual_server): from_dep_virtual_server.return_value = client self._login("mdm.change_depenrollment", "mdm.view_depenrollment") new_name = get_random_string(12) + new_display_name = get_random_string(12) response = self.client.post(reverse("mdm:update_dep_enrollment", args=(enrollment.pk,)), {"de-name": new_name, + "de-display_name": new_display_name, "de-realm": realm.pk, "de-scep_config": enrollment.scep_config.pk, "de-scep_verification": "on", @@ -441,12 +450,14 @@ def test_update_dep_enrollment_post(self, from_dep_virtual_server): self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "mdm/depenrollment_detail.html") self.assertContains(response, new_name) + self.assertContains(response, new_display_name) self.assertContains(response, realm.name) self.assertContains(response, enrollment.push_certificate.name) self.assertContains(response, enrollment.scep_config.name) self.assertContains(response, "with CSR verification") enrollment = response.context["object"] self.assertEqual(enrollment.name, new_name) + self.assertEqual(enrollment.display_name, new_display_name) self.assertEqual(enrollment.realm, realm) self.assertEqual(enrollment.macos_min_version, "13.3.1") self.assertEqual(enrollment.skip_setup_items, ["AppleID"]) @@ -482,6 +493,7 @@ def test_update_dep_enrollment_post_remove_admin(self, from_dep_virtual_server): self._login("mdm.change_depenrollment", "mdm.view_depenrollment") response = self.client.post(reverse("mdm:update_dep_enrollment", args=(enrollment.pk,)), {"de-name": enrollment.name, + "de-display_name": enrollment.display_name, "de-realm": realm.pk, "de-scep_config": enrollment.scep_config.pk, "de-push_certificate": enrollment.push_certificate.pk, @@ -514,6 +526,7 @@ def test_update_dep_enrollment_post_update_admin_keep_pwd(self, from_dep_virtual self._login("mdm.change_depenrollment", "mdm.view_depenrollment") response = self.client.post(reverse("mdm:update_dep_enrollment", args=(enrollment.pk,)), {"de-name": enrollment.name, + "de-display_name": enrollment.display_name, "de-realm": realm.pk, "de-scep_config": enrollment.scep_config.pk, "de-push_certificate": enrollment.push_certificate.pk, @@ -549,6 +562,7 @@ def test_update_dep_enrollment_post_update_admin_update_pwd(self, from_dep_virtu self._login("mdm.change_depenrollment", "mdm.view_depenrollment") response = self.client.post(reverse("mdm:update_dep_enrollment", args=(enrollment.pk,)), {"de-name": enrollment.name, + "de-display_name": enrollment.display_name, "de-realm": realm.pk, "de-scep_config": enrollment.scep_config.pk, "de-push_certificate": enrollment.push_certificate.pk, diff --git a/tests/mdm/test_setup_ota_enrollment.py b/tests/mdm/test_setup_ota_enrollment.py index c874c7f6b..610fecbde 100644 --- a/tests/mdm/test_setup_ota_enrollment.py +++ b/tests/mdm/test_setup_ota_enrollment.py @@ -62,10 +62,12 @@ def test_create_ota_enrollment_get(self): def test_create_ota_enrollment_post(self): self._login("mdm.add_otaenrollment", "mdm.view_otaenrollment") name = get_random_string(64) + display_name = get_random_string(12) push_certificate = force_push_certificate() scep_config = force_scep_config() response = self.client.post(reverse("mdm:create_ota_enrollment"), {"oe-name": name, + "oe-display_name": display_name, "oe-scep_config": scep_config.pk, "oe-scep_verification": "", "oe-push_certificate": push_certificate.pk, @@ -74,11 +76,13 @@ def test_create_ota_enrollment_post(self): self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "mdm/otaenrollment_detail.html") self.assertContains(response, name) + self.assertContains(response, display_name) self.assertContains(response, push_certificate.name) self.assertContains(response, scep_config.name) self.assertContains(response, "without CSR verification") enrollment = response.context["object"] self.assertEqual(enrollment.name, name) + self.assertEqual(enrollment.display_name, display_name) self.assertEqual(enrollment.push_certificate, push_certificate) self.assertEqual(enrollment.scep_config, scep_config) @@ -101,6 +105,7 @@ def test_view_ota_enrollment_no_extra_perms(self): self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "mdm/otaenrollment_detail.html") self.assertContains(response, enrollment.name) + self.assertContains(response, enrollment.display_name) self.assertContains(response, enrollment.push_certificate.name) self.assertNotContains(response, enrollment.push_certificate.get_absolute_url()) self.assertContains(response, enrollment.scep_config.name) @@ -170,8 +175,10 @@ def test_update_ota_enrollment_post(self): enrollment = force_ota_enrollment(self.mbu) self._login("mdm.change_otaenrollment", "mdm.view_otaenrollment") new_name = get_random_string(64) + new_display_name = get_random_string(12) response = self.client.post(reverse("mdm:update_ota_enrollment", args=(enrollment.pk,)), {"oe-name": new_name, + "oe-display_name": new_display_name, "oe-scep_config": enrollment.scep_config.pk, "oe-scep_verification": "on", "oe-push_certificate": enrollment.push_certificate.pk, @@ -180,11 +187,13 @@ def test_update_ota_enrollment_post(self): self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "mdm/otaenrollment_detail.html") self.assertContains(response, new_name) + self.assertContains(response, new_display_name) self.assertContains(response, enrollment.push_certificate.name) self.assertContains(response, enrollment.scep_config.name) self.assertContains(response, "with CSR verification") enrollment = response.context["object"] self.assertEqual(enrollment.name, new_name) + self.assertEqual(enrollment.display_name, new_display_name) # revoke OTA enrollment diff --git a/tests/mdm/test_setup_user_enrollment.py b/tests/mdm/test_setup_user_enrollment.py index 8a4b26926..fc6d40a62 100644 --- a/tests/mdm/test_setup_user_enrollment.py +++ b/tests/mdm/test_setup_user_enrollment.py @@ -71,17 +71,20 @@ def test_create_user_enrollment_no_realm(self): follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "mdm/userenrollment_form.html") + self.assertFormError(response.context["user_enrollment_form"], "display_name", "This field is required.") self.assertFormError(response.context["user_enrollment_form"], "realm", "This field is required") def test_create_user_enrollment_post(self): self._login("mdm.add_userenrollment", "mdm.view_userenrollment") realm = force_realm() name = get_random_string(64) + display_name = get_random_string(12) push_certificate = force_push_certificate() scep_config = force_scep_config() response = self.client.post(reverse("mdm:create_user_enrollment"), {"ue-realm": realm.pk, "ue-name": name, + "ue-display_name": display_name, "ue-scep_config": scep_config.pk, "ue-scep_verification": "", "ue-push_certificate": push_certificate.pk, @@ -90,11 +93,13 @@ def test_create_user_enrollment_post(self): self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "mdm/userenrollment_detail.html") self.assertContains(response, name) + self.assertContains(response, display_name) self.assertContains(response, push_certificate.name) self.assertContains(response, scep_config.name) self.assertContains(response, "without CSR verification") enrollment = response.context["object"] self.assertEqual(enrollment.name, name) + self.assertEqual(enrollment.display_name, display_name) self.assertEqual(enrollment.push_certificate, push_certificate) self.assertEqual(enrollment.scep_config, scep_config) @@ -117,6 +122,7 @@ def test_view_user_enrollment_no_extra_perms(self): self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "mdm/userenrollment_detail.html") self.assertContains(response, enrollment.name) + self.assertContains(response, enrollment.display_name) self.assertContains(response, enrollment.push_certificate.name) self.assertNotContains(response, enrollment.push_certificate.get_absolute_url()) self.assertContains(response, enrollment.scep_config.name) @@ -159,9 +165,11 @@ def test_update_user_enrollment_post(self): self._login("mdm.change_userenrollment", "mdm.view_userenrollment") new_realm = force_realm() new_name = get_random_string(64) + new_display_name = get_random_string(12) response = self.client.post(reverse("mdm:update_user_enrollment", args=(enrollment.pk,)), {"ue-realm": new_realm.pk, "ue-name": new_name, + "ue-display_name": new_display_name, "ue-scep_config": enrollment.scep_config.pk, "ue-scep_verification": "on", "ue-push_certificate": enrollment.push_certificate.pk, @@ -171,12 +179,14 @@ def test_update_user_enrollment_post(self): self.assertTemplateUsed(response, "mdm/userenrollment_detail.html") self.assertContains(response, new_realm.name) self.assertContains(response, new_name) + self.assertContains(response, new_display_name) self.assertContains(response, enrollment.push_certificate.name) self.assertContains(response, enrollment.scep_config.name) self.assertContains(response, "with CSR verification") enrollment = response.context["object"] self.assertEqual(enrollment.realm, new_realm) self.assertEqual(enrollment.name, new_name) + self.assertEqual(enrollment.display_name, new_display_name) # list User enrollments diff --git a/tests/mdm/test_user_enrollment_public_views.py b/tests/mdm/test_user_enrollment_public_views.py index 85b398b4a..ceec35385 100644 --- a/tests/mdm/test_user_enrollment_public_views.py +++ b/tests/mdm/test_user_enrollment_public_views.py @@ -93,7 +93,8 @@ def test_enroll_user_invalid_access_token(self, post_event): self.assertAbort(post_event, "Invalid access token") def test_enroll_user(self, post_event): - enrollment = force_user_enrollment(self.mbu, self.realm) + display_name = get_random_string(12) + enrollment = force_user_enrollment(self.mbu, self.realm, enrollment_display_name=display_name) _, realm_user = force_realm_user(self.realm) enrollment_session = UserEnrollmentSession.objects.create_from_user_enrollment(enrollment) enrollment_session.set_account_driven_authenticated_status(realm_user) @@ -105,6 +106,7 @@ def test_enroll_user(self, post_event): self.assertSuccess(post_event) _, data = verify_signed_payload(response.content) payload = plistlib.loads(data) + self.assertEqual(payload["PayloadOrganization"], display_name) mdm_payload = [p for p in payload["PayloadContent"] if p["PayloadType"] == "com.apple.mdm"][0] self.assertEqual(mdm_payload["AssignedManagedAppleID"], realm_user.email) self.assertEqual(mdm_payload["EnrollmentMode"], "BYOD") diff --git a/tests/mdm/utils.py b/tests/mdm/utils.py index a9a5e1670..27db28a47 100644 --- a/tests/mdm/utils.py +++ b/tests/mdm/utils.py @@ -211,10 +211,11 @@ def force_dep_device( # enrollments -def force_dep_enrollment(mbu, push_certificate=None): +def force_dep_enrollment(mbu, push_certificate=None, display_name=None): if push_certificate is None: push_certificate = force_push_certificate() return DEPEnrollment.objects.create( + display_name=display_name or get_random_string(12), name=get_random_string(12), uuid=uuid.uuid4(), push_certificate=push_certificate, @@ -225,23 +226,25 @@ def force_dep_enrollment(mbu, push_certificate=None): ) -def force_ota_enrollment(mbu, realm=None): +def force_ota_enrollment(mbu, realm=None, display_name=None): return OTAEnrollment.objects.create( push_certificate=force_push_certificate(), scep_config=force_scep_config(), name=get_random_string(12), enrollment_secret=EnrollmentSecret.objects.create(meta_business_unit=mbu), realm=realm, + display_name=display_name or get_random_string(12), ) -def force_user_enrollment(mbu, realm=None): +def force_user_enrollment(mbu, realm=None, enrollment_display_name=None): return UserEnrollment.objects.create( push_certificate=force_push_certificate(), realm=realm or force_realm(), scep_config=force_scep_config(), name=get_random_string(12), - enrollment_secret=EnrollmentSecret.objects.create(meta_business_unit=mbu) + enrollment_secret=EnrollmentSecret.objects.create(meta_business_unit=mbu), + display_name=enrollment_display_name or get_random_string(12) ) @@ -304,8 +307,9 @@ def force_dep_enrollment_session( realm_user=False, realm_user_email=None, realm_user_username=None, + enrollment_display_name=None, ): - dep_enrollment = force_dep_enrollment(mbu, push_certificate) + dep_enrollment = force_dep_enrollment(mbu, push_certificate, display_name=enrollment_display_name) if realm_user: dep_enrollment.use_realm_user = True dep_enrollment.username_pattern = DEPEnrollment.UsernamePattern.DEVICE_USERNAME diff --git a/zentral/contrib/mdm/forms.py b/zentral/contrib/mdm/forms.py index d0c112570..ef9f011aa 100644 --- a/zentral/contrib/mdm/forms.py +++ b/zentral/contrib/mdm/forms.py @@ -34,7 +34,7 @@ class OTAEnrollmentForm(forms.ModelForm): class Meta: model = OTAEnrollment - fields = ("name", "realm", "push_certificate", + fields = ("name", "display_name", "realm", "push_certificate", "scep_config", "scep_verification", "blueprint") @@ -42,7 +42,7 @@ class Meta: class UserEnrollmentForm(forms.ModelForm): class Meta: model = UserEnrollment - fields = ("name", "realm", "push_certificate", + fields = ("name", "display_name", "realm", "push_certificate", "scep_config", "scep_verification", "blueprint") @@ -373,7 +373,7 @@ def __init__(self, *args, **kwargs): required=False ) field_order.append(key) - field_order.extend(["realm", "use_realm_user", "username_pattern", "realm_user_is_admin", + field_order.extend(["display_name", "realm", "use_realm_user", "username_pattern", "realm_user_is_admin", "admin_full_name", "admin_short_name", "admin_password", "ios_max_version", "ios_min_version", "macos_max_version", "macos_min_version"]) self.order_fields(field_order) diff --git a/zentral/contrib/mdm/migrations/0078_depenrollment_display_name_and_more.py b/zentral/contrib/mdm/migrations/0078_depenrollment_display_name_and_more.py new file mode 100644 index 000000000..c2508ee64 --- /dev/null +++ b/zentral/contrib/mdm/migrations/0078_depenrollment_display_name_and_more.py @@ -0,0 +1,31 @@ +# Generated by Django 4.2.11 on 2024-05-21 09:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mdm', '0077_alter_scepconfig_challenge_type'), + ] + + operations = [ + migrations.AddField( + model_name='depenrollment', + name='display_name', + field=models.CharField(default='Zentral MDM', + help_text='Name displayed in the device settings', max_length=128), + ), + migrations.AddField( + model_name='otaenrollment', + name='display_name', + field=models.CharField(default='Zentral MDM', + help_text='Name displayed in the device settings', max_length=128), + ), + migrations.AddField( + model_name='userenrollment', + name='display_name', + field=models.CharField(default='Zentral MDM', + help_text='Name displayed in the device settings', max_length=128), + ), + ] diff --git a/zentral/contrib/mdm/models.py b/zentral/contrib/mdm/models.py index 460017b79..5600ba6b6 100644 --- a/zentral/contrib/mdm/models.py +++ b/zentral/contrib/mdm/models.py @@ -1214,9 +1214,6 @@ def get_urlsafe_serial_number(self): if serial_number: return MetaMachine(serial_number).get_urlsafe_serial_number() - def get_payload_name(self): - return "Zentral - {prefix} Enrollment SCEP".format(prefix=" - ".join(self.get_prefix().split("$"))) - def is_completed(self): return self.status == self.COMPLETED @@ -1246,6 +1243,8 @@ def device_enrolled_at(self): class MDMEnrollment(models.Model): + display_name = models.CharField(max_length=128, default="Zentral MDM", + help_text="Name displayed in the device settings") push_certificate = models.ForeignKey(PushCertificate, on_delete=models.PROTECT) scep_config = models.ForeignKey(SCEPConfig, on_delete=models.PROTECT) diff --git a/zentral/contrib/mdm/payloads.py b/zentral/contrib/mdm/payloads.py index 5b444d319..c0c1043dd 100644 --- a/zentral/contrib/mdm/payloads.py +++ b/zentral/contrib/mdm/payloads.py @@ -57,7 +57,8 @@ def build_configuration_profile_response(data, filename): def build_profile(display_name, suffix, content, - payload_type="Configuration", payload_description=None, + payload_type="Configuration", + payload_description=None, payload_organization=None, sign=True, encrypt=False): profile = {"PayloadUUID": generate_payload_uuid(), "PayloadIdentifier": get_payload_identifier(suffix), @@ -67,13 +68,22 @@ def build_profile(display_name, suffix, content, "PayloadContent": content} if payload_description: profile["PayloadDescription"] = payload_description + if payload_organization: + profile["PayloadOrganization"] = payload_organization data = plistlib.dumps(profile) if sign: data = sign_payload(data) return data -def build_payload(payload_type, payload_display_name, suffix, content, payload_version=1, encapsulate_content=False): +def build_payload( + payload_type, + payload_display_name, + suffix, + content, + payload_version=1, + encapsulate_content=False, +): payload = {"PayloadUUID": generate_payload_uuid(), "PayloadType": payload_type, "PayloadDisplayName": payload_display_name, @@ -92,7 +102,7 @@ def build_root_ca_payloads(): root_certificate = split_certificate_chain(settings["api"]["tls_fullchain"])[-1] return [ build_payload("com.apple.security.pem", - "Zentral - root CA", "tls-root-ca-cert", + "root CA", "tls-root-ca-cert", root_certificate.encode("utf-8"), encapsulate_content=True) ] @@ -113,7 +123,7 @@ def build_scep_payload(enrollment_session): scep_payload = {"Subject": subject} update_scep_payload(scep_payload, enrollment_session.get_enrollment().scep_config) return build_payload("com.apple.security.scep", - enrollment_session.get_payload_name(), + "SCEP", "scep", scep_payload, encapsulate_content=True) @@ -122,11 +132,13 @@ def build_scep_payload(enrollment_session): def build_profile_service_configuration_profile(ota_obj): if isinstance(ota_obj, OTAEnrollmentSession): url_path = reverse("mdm_public:ota_session_enroll") + display_name = ota_obj.get_enrollment().display_name elif isinstance(ota_obj, OTAEnrollment): url_path = reverse("mdm_public:ota_enroll") + display_name = ota_obj.display_name else: raise ValueError("ota_obj not an OTAEnrollment nor an OTAEnrollmentSession") - return build_profile("Zentral - OTA MDM Enrollment", + return build_profile(display_name, "profile-service", {"URL": "{}{}".format(settings["api"]["tls_hostname"], url_path), "DeviceAttributes": ["UDID", @@ -137,12 +149,16 @@ def build_profile_service_configuration_profile(ota_obj): "IMEI"], "Challenge": ota_obj.enrollment_secret.secret}, payload_type="Profile Service", - payload_description="Install this profile to enroll your device with Zentral") + payload_description=f"Install this profile to enroll your device with {display_name}", + payload_organization=display_name) def build_ota_scep_configuration_profile(ota_enrollment_session): - return build_profile(ota_enrollment_session.get_payload_name(), "scep", - [build_scep_payload(ota_enrollment_session)]) + return build_profile( + ota_enrollment_session.get_enrollment().display_name, + "scep", + [build_scep_payload(ota_enrollment_session)], + ) def build_mdm_configuration_profile(enrollment_session): @@ -173,10 +189,16 @@ def build_mdm_configuration_profile(enrollment_session): payloads.extend([ scep_payload, build_payload("com.apple.mdm", - "Zentral - MDM", + "MDM", "mdm", mdm_config) ]) - return build_profile("Zentral - MDM enrollment", "mdm", payloads) + + display_name = enrollment_session.get_enrollment().display_name + return build_profile( + display_name, + "mdm", payloads, + payload_organization=display_name, + ) def substitute_variables(obj, enrollment_session, enrolled_user=None): diff --git a/zentral/contrib/mdm/templates/mdm/depenrollment_detail.html b/zentral/contrib/mdm/templates/mdm/depenrollment_detail.html index 77f51edb0..a4fd2ac72 100644 --- a/zentral/contrib/mdm/templates/mdm/depenrollment_detail.html +++ b/zentral/contrib/mdm/templates/mdm/depenrollment_detail.html @@ -30,6 +30,10 @@

[DEP]

Configuration

+ + + +
Display name{{ object.display_name }}
Push certificate diff --git a/zentral/contrib/mdm/templates/mdm/otaenrollment_detail.html b/zentral/contrib/mdm/templates/mdm/otaenrollment_detail.html index 1c9a6855e..612a4e731 100644 --- a/zentral/contrib/mdm/templates/mdm/otaenrollment_detail.html +++ b/zentral/contrib/mdm/templates/mdm/otaenrollment_detail.html @@ -34,6 +34,10 @@

OTA Enrollment

Configuration

+ + + +
Display name{{ object.display_name }}
Push certificate diff --git a/zentral/contrib/mdm/templates/mdm/userenrollment_detail.html b/zentral/contrib/mdm/templates/mdm/userenrollment_detail.html index d68a88827..72cecc42c 100644 --- a/zentral/contrib/mdm/templates/mdm/userenrollment_detail.html +++ b/zentral/contrib/mdm/templates/mdm/userenrollment_detail.html @@ -26,6 +26,10 @@

[USER]

{% with object.enrollment_secret as secret %} + + + +
Display name{{ object.display_name }}
Push certificate