Projekt

Obecné

Profil

Stáhnout (2.57 KB) Statistiky
| Větev: | Tag: | Revize:
1 b1fa358f Jan Pašek
from flask import Response
2
from injector import inject
3 1de95cdf Captain_Trojan
import base64
4 b1fa358f Jan Pašek
5
from src.exceptions.certificate_not_found_exception import CertificateNotFoundException
6
from src.exceptions.private_key_not_found_exception import PrivateKeyNotFoundException
7 5cd65ab4 Captain_Trojan
from src.services.crl_ocsp.crl_ocsp_service import CrlOcspService
8 b1fa358f Jan Pašek
from src.controllers.return_codes import *
9
10
E_WRONG_PARAMETERS = {"success": False, "data": "Invalid request, wrong parameters."}
11
E_NO_CERTIFICATES_FOUND = {"success": False, "data": "No such certificate found."}
12
13
14
class CrlOcspController:
15
16
    @inject
17 5cd65ab4 Captain_Trojan
    def __init__(self, crl_service: CrlOcspService):
18 b1fa358f Jan Pašek
        self.crl_service = crl_service
19
20
    def get_crl(self, ca_id: str):
21
        """
22
        Generate and download a CRL for a selected certificate authority
23
        :param ca_id: certificate authority whose CRL is requested
24
        :return: download response / error
25
        """
26
        # convert id from string to int
27
        try:
28
            identifier = int(ca_id)
29
        except ValueError:
30
            return E_WRONG_PARAMETERS, C_BAD_REQUEST
31
32
        # generate the CRL
33
        try:
34
            crl = self.crl_service.generate_crl_response(identifier)
35 5cd65ab4 Captain_Trojan
        except CertificateNotFoundException:
36 b1fa358f Jan Pašek
            return E_NO_CERTIFICATES_FOUND, C_NOT_FOUND
37
38
        return Response(crl, mimetype="application/x-x509-ca-cert",
39
                        headers={"Content-Disposition": f"attachment;filename={ca_id}_crl.pem"})
40 1de95cdf Captain_Trojan
41
    def get_ocsp_from_base64(self, ca_id, base64_der_ocsp_request):
42
        """
43
        Generate an OCSP Response for a base-64 encoded DER encoded OCSP Request.
44
        :param ca_id: certificate authority ID
45
        :param base64_der_ocsp_request: encoded request
46
        :return: DER OCSP response
47
        """
48
        return self.get_ocsp_from_der(ca_id, base64.b64decode(base64_der_ocsp_request))
49
50
    def get_ocsp_from_der(self, ca_id, der_ocsp_request):
51
        """
52
        Generate an OCSP Response for a DER encoded OCSP Request.
53
        :param ca_id: certificate authority ID
54
        :param der_ocsp_request: encoded request
55
        :return: DER OCSP response
56
        """
57
        if len(der_ocsp_request) == 0:
58
            return E_WRONG_PARAMETERS, C_BAD_REQUEST
59
60
        try:
61
            ca_id = int(ca_id)
62
        except ValueError:
63
            return E_WRONG_PARAMETERS, C_BAD_REQUEST
64
65
        try:
66
            ocsp_response = self.crl_service.generate_ocsp_response(ca_id, der_ocsp_request)
67 5cd65ab4 Captain_Trojan
        except CertificateNotFoundException:
68 1de95cdf Captain_Trojan
            return E_NO_CERTIFICATES_FOUND, C_NOT_FOUND
69
70
        return Response(ocsp_response, mimetype="application/ocsp-response")