Commit 2d62df37 authored by Jorge Moratinos's avatar Jorge Moratinos
Browse files

Merge branch 'OCF188-cert-verification-in-provider-modify' into 'staging'

cert verification in provider modify #188

See merge request !166
parents b442a4c6 85c740aa
Loading
Loading
Loading
Loading
Loading
+32 −8
Original line number Original line Diff line number Diff line

from functools import wraps
from api_provider_management.models.api_provider_enrolment_details import \
    APIProviderEnrolmentDetails  # noqa: E501
from api_provider_management.models.api_provider_enrolment_details_patch import \
    APIProviderEnrolmentDetailsPatch  # noqa: E501
from api_provider_management.models.problem_details import \
    ProblemDetails  # noqa: E501
from flask import current_app, request
from flask import current_app, request
from cryptography import x509
from cryptography.hazmat.backends import default_backend


from ..core.provider_enrolment_details_api import ProviderManagementOperations
from ..core.provider_enrolment_details_api import ProviderManagementOperations
from ..core.validate_user import ControlAccess
from ..models.api_provider_enrolment_details_patch import \
from ..models.api_provider_enrolment_details_patch import \
        APIProviderEnrolmentDetailsPatch  # noqa: E501
        APIProviderEnrolmentDetailsPatch  # noqa: E501


provider_management_ops = ProviderManagementOperations()
provider_management_ops = ProviderManagementOperations()
valid_user = ControlAccess()

def cert_validation():
    def _cert_validation(f):
        @wraps(f)
        def __cert_validation(*args, **kwargs):

            args = request.view_args
            cert_tmp = request.headers['X-Ssl-Client-Cert']
            cert_raw = cert_tmp.replace('\t', '')

            cert = x509.load_pem_x509_certificate(str.encode(cert_raw), default_backend())

            cn = cert.subject.get_attributes_for_oid(x509.OID_COMMON_NAME)[0].value.strip()

            if cn != "superadmin":
                cert_signature = cert.signature.hex()
                result = valid_user.validate_user_cert(args["registrationId"], cert_signature)

                if result is not None:
                    return result

            result = f(**kwargs)
            return result
        return __cert_validation
    return _cert_validation


@cert_validation()
def modify_ind_api_provider_enrolment(registration_id, body):  # noqa: E501
def modify_ind_api_provider_enrolment(registration_id, body):  # noqa: E501
    """modify_ind_api_provider_enrolment
    """modify_ind_api_provider_enrolment