Source code for commands.create_default_cert_profiles
"""Django management command for creating default certificate profiles."""
from __future__ import annotations
import json
from pathlib import Path
from django.core.management.base import BaseCommand
from pki.models.cert_profile import CertificateProfileModel
from pki.util.cert_profile import CertProfileModel as CertProfilePydanticModel
from pydantic import ValidationError
[docs]
class Command(BaseCommand):
"""Creates default certificate profiles from JSON files in ../default_certificate_profiles."""
[docs]
help = 'Creates default certificate profiles.'
[docs]
def handle(self, *_args: tuple[str], **_kwargs: dict[str, str]) -> None:
"""Creates default certificate profiles."""
default_profiles_path = Path(__file__).parent.parent.parent / 'default_certificate_profiles'
print(f'Loading default certificate profiles from: {default_profiles_path}')
profile_files = default_profiles_path.glob('*.json')
for profile_file in profile_files:
unique_name = profile_file.stem
with profile_file.open('r', encoding='utf-8') as f:
profile_json = f.read()
# Check if valid JSON Profile
try:
profile_dict = json.loads(profile_json)
CertProfilePydanticModel.model_validate(profile_dict)
display_name = profile_dict.get('display_name', '')
except (ValidationError, ValueError) as e:
print(f'Invalid JSON certificate profile in {profile_file}: {e}')
continue
# Set is_default based on profile name
is_default = unique_name != 'issuing_ca'
_obj, created = CertificateProfileModel.objects.get_or_create(
unique_name=unique_name,
defaults={'profile_json': profile_json, 'is_default': is_default, 'display_name': display_name},
)
if created:
print(f'Created certificate profile: {unique_name}')
else:
print(f'Certificate profile already exists: {unique_name}')