Source code for request.operation_processor.general
"""Carries out the requested operation after authentication and authorization."""
from cmp.util import PKIFailureInfo
from request.request_context import (
BaseCertificateRequestContext,
BaseRequestContext,
BaseRevocationRequestContext,
CmpBaseRequestContext,
)
from trustpoint.logger import LoggerMixin
from .base import AbstractOperationProcessor
from .issue_cert import CertificateIssueProcessor
from .revoke_cert import CertificateRevocationProcessor
[docs]
class OperationProcessor(AbstractOperationProcessor, LoggerMixin):
"""Chooses the appropriate operation processor based on the context."""
[docs]
def process_operation(self, context: BaseRequestContext) -> None:
"""Process the requested operation."""
processor_instance: AbstractOperationProcessor
if isinstance(context, BaseCertificateRequestContext):
# Process certificate issuance operation
processor_instance = CertificateIssueProcessor()
elif isinstance(context, BaseRevocationRequestContext):
# Process certificate revocation operation
processor_instance = CertificateRevocationProcessor()
else:
context.error('No suitable operation processor available for the given context.',
http_status=500, cmp_code=PKIFailureInfo.SYSTEM_FAILURE)
exc_msg = f'No suitable operation processor available for the given context {context}.'
raise TypeError(exc_msg)
try:
return processor_instance.process_operation(context)
except Exception:
cmp_code = PKIFailureInfo.SYSTEM_FAILURE
error_msg = 'PKI Operation processing failed.'
if isinstance(context, CmpBaseRequestContext):
if context.error_code:
cmp_code = context.error_code
if context.error_details:
error_msg = context.error_details
context.error(error_msg, http_status=500, cmp_code=cmp_code)
self.logger.exception('Operation processing failed')
raise