Source code for request.operation_processor.issue_cred
"""Credential issuance operation processor classes."""
from cryptography.x509 import CertificateBuilder
from pki.util.keys import KeyGenerator
from request.operation_processor.issue_cert import CertificateIssueProcessor
from request.request_context import (
BaseCredentialRequestContext,
BaseRequestContext,
)
from trustpoint.logger import LoggerMixin
from .base import AbstractOperationProcessor
[docs]
class CredentialIssueProcessor(AbstractOperationProcessor, LoggerMixin):
"""Operation processor for issuing credentials."""
[docs]
def process_operation(self, context: BaseRequestContext) -> None:
"""Process the credential issuance operation."""
if not isinstance(context, BaseCredentialRequestContext):
exc_msg = 'Credential issuance requires a subclass of BaseCredentialRequestContext.'
raise TypeError(exc_msg)
if context.enrollment_request and not context.enrollment_request.is_valid():
return
if not context.cert_requested or not isinstance(context.cert_requested, CertificateBuilder):
exc_msg = 'Credential issuance requires a certificate request in context.'
raise ValueError(exc_msg)
if not context.domain:
exc_msg = 'Credential issuance requires a domain to be set in context.'
raise ValueError(exc_msg)
# generate a private key
if not context.private_key:
private_key = KeyGenerator.generate_private_key(domain=context.domain)
context.private_key = private_key
context.cert_requested = context.cert_requested.public_key(private_key.as_crypto().public_key())
CertificateIssueProcessor().process_operation(context)