Commit 58303428 authored by Cesuuur's avatar Cesuuur
Browse files

chore: get invokers through new capif services

parent a0b78ebf
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -6,11 +6,16 @@ WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app/requirements.txt
COPY config.yaml /usr/src/app/config.yaml

ENV CAPIF_HOSTNAME="nginx"
ENV CAPIF_PORT="8080"
ENV BACKOFFICE_HOSTNAME="backoffice-microservice"
ENV BACKOFFICE_PORT="8085"

RUN apk add -U --no-cache gcc build-base linux-headers ca-certificates libffi-dev libressl-dev libxslt-dev
RUN pip3 install --no-cache-dir -r requirements.txt

COPY . /usr/src/app

EXPOSE 8000
EXPOSE 8080

ENTRYPOINT ["python3", "-m", "main"]
ENTRYPOINT ["python3", "main.py"]
+10 −8
Original line number Diff line number Diff line
@@ -5,11 +5,13 @@ import os


from OpenSSL.SSL import FILETYPE_PEM
from OpenSSL.crypto import (dump_certificate_request, dump_privatekey, load_publickey, PKey, TYPE_RSA, X509Req, dump_publickey)
from OpenSSL.crypto import (dump_certificate_request, dump_privatekey, PKey, TYPE_RSA, X509Req)


HOSTNAME = os.getenv('CAPIF_HOSTNAME')
PORT = os.getenv('CAPIF_PORT')


def create_csr():
    private_key_path = "private.key"

@@ -37,6 +39,7 @@ def create_csr():

    return csr_request


def sign_certificate(publick_key):
    url = f"http://{HOSTNAME}:{PORT}/sign-csr"

@@ -46,12 +49,11 @@ def sign_certificate(publick_key):
    payload['filename'] = "superadmin_information"

    headers = {

        'Content-Type': 'application/json'

    }

    response = requests.request("POST", url, headers=headers, data=json.dumps(payload))
    response = requests.request(
        "POST", url, headers=headers, data=json.dumps(payload),verify=False)
    response_payload = json.loads(response.text)

    cert = response_payload["certificate"]
@@ -60,15 +62,14 @@ def sign_certificate(publick_key):
    cert_file.close()
    return response_payload


def get_ca_root():
    url = f"http://{HOSTNAME}:{PORT}/ca-root"

    #url = "http://localhost:8080/ca-root"
    headers = {

        'Content-Type': "application/json"
    }
    response = requests.request("GET", url, headers=headers)
    response = requests.request("GET", url, headers=headers,verify=False)
    response_payload = json.loads(response.text)

    cert = response_payload["certificate"]
@@ -82,4 +83,5 @@ if __name__ == '__main__':
    get_ca_root()
    csr_request = create_csr()
    sign_certificate(csr_request)

    print("Obtained certs/ca to operate with CAPIF")
+13 −19
Original line number Diff line number Diff line
from core.invokers_resources import InvokersResources
from core.providers_resources import ProviderResources
from core.events import Events
from core.capif_ops import CapifOps
from fastapi import APIRouter, Depends, HTTPException, Request
from typing import Optional
from fastapi_jwt_auth import AuthJWT
from typing import List
from datetime import date


router = APIRouter()
invokers_ops = InvokersResources()
providers_ops = ProviderResources()
events_ops = Events()
capif_ops = CapifOps()


@router.get("/resources/invokers")
@@ -22,7 +16,7 @@ async def get_invokers(Authorize: AuthJWT = Depends()):

    Authorize.jwt_required()

    return invokers_ops.get_all_invokers()
    return capif_ops.get_invokers()


@router.delete("/resources/invokers/{invoker_id}")
@@ -33,7 +27,7 @@ async def delete_invoker(invoker_id, Authorize: AuthJWT = Depends()):

    Authorize.jwt_required()

    return invokers_ops.remove_invoker(invoker_id)
    return capif_ops.delete_invoker(invoker_id)


@router.get('/resources/invokers/security/{invoker_id}')
@@ -43,7 +37,7 @@ def get_invoker_security_context_resource(invoker_id, Authorize: AuthJWT = Depen
    """
    Authorize.jwt_required()

    return invokers_ops.get_security_context(invoker_id)
    return capif_ops.get_security_context(invoker_id)


@router.delete('/resources/invokers/security/{invoker_id}')
@@ -53,10 +47,10 @@ def delete_invoker_security_context(invoker_id, Authorize: AuthJWT = Depends()):
    """
    Authorize.jwt_required()

    return invokers_ops.remove_security_context(invoker_id)
    return capif_ops.delete_security_context(invoker_id)


@router.get("/resources/providers",)
@router.get("/resources/providers")
async def get_providers(Authorize: AuthJWT = Depends()):
    """
    Get list of all provider registered in CAPIF
@@ -64,7 +58,7 @@ async def get_providers(Authorize: AuthJWT = Depends()):

    Authorize.jwt_required()

    return providers_ops.get_providers()
    return capif_ops.get_providers()


@router.delete("/resources/providers/{provider_id}")
@@ -75,7 +69,7 @@ async def delete_provider(provider_id, Authorize: AuthJWT = Depends()):

    Authorize.jwt_required()

    return providers_ops.remove_provider(provider_id)
    return capif_ops.delete_provider(provider_id)


@router.get('/resources/providers/services/{apf_id}')
@@ -85,7 +79,7 @@ def get_provider_services_resources(apf_id, Authorize: AuthJWT = Depends()):
    """
    Authorize.jwt_required()

    return providers_ops.get_services_of_apf(apf_id)
    return capif_ops.get_provider_service(apf_id)


@router.delete('/resources/providers/services/{apf_id}/{service_id}')
@@ -95,7 +89,7 @@ def delete_provider_service(apf_id, service_id, Authorize: AuthJWT = Depends()):
    """
    Authorize.jwt_required()

    return providers_ops.remove_service(apf_id, service_id)
    return capif_ops.delete_provider_service(apf_id, service_id)


@router.get('/resources/events/{id}')
@@ -106,7 +100,7 @@ def get_events(id, Authorize: AuthJWT = Depends()):
    """
    Authorize.jwt_required()

    return events_ops.get_events_by_id(id)
    return capif_ops.get_events(id)


@router.delete('/resources/events/{subscriber_id}/{subscription_id}')
@@ -118,4 +112,4 @@ async def delete_events(subscriber_id, subscription_id, Authorize: AuthJWT = Dep

    Authorize.jwt_required()

    return events_ops.remove_events_by_subscriber_id(subscriber_id, subscription_id)
    return capif_ops.delete_events(subscriber_id, subscription_id)
+66 −28
Original line number Diff line number Diff line
import requests
import os
import logging
import os
import requests
import warnings
from core.responses import make_response

warnings.filterwarnings('ignore', message='Unverified HTTPS request')

logger = logging.getLogger(__name__)  # the __name__ resolve to "uicheckapp.services"
                                      # This will load the uicheckapp logger

GET = "GET"
DELETE = "DELETE"


class CapifOps():

    def __init__(self):
        self.HOSTNAME = os.getenv('CAPIF_HOSTNAME')
        self.CAPIF_HOSTNAME = os.getenv('CAPIF_HOSTNAME')
        self.CAPIF_PORT = os.getenv('CAPIF_PORT')
        self.BACKOFFICE_HOSTNAME = os.getenv('BACKOFFICE_HOSTNAME')
        self.BACKOFFICE_PORT = os.getenv('BACKOFFICE_PORT')
        self.headers = {
            'Content-Type': 'application/json'
        }

    def delete_security_context(self, id):
        url = f"https://{self.HOSTNAME}/capif-security/v1/trustedInvokers/{id}"

        response = self.__make_request(url)

    def get_invokers(self):
        url = f"https://{self.BACKOFFICE_HOSTNAME}:{self.BACKOFFICE_PORT}/invokers"
        response = self.__make_request(url, GET)
        return response

    def delete_service(self, id, service_id):

        url = f"https://{self.HOSTNAME}/published-apis/v1/{id}/service-apis/{service_id}"
    def get_security_context(self, invoker_id):
        url = f"https://{self.BACKOFFICE_HOSTNAME}:{self.BACKOFFICE_PORT}/resources/invokers/security/{invoker_id}"
        response = self.__make_request(url, GET)
        return response

        response = self.__make_request(url)
    def get_providers(self):
        url = f"https://{self.BACKOFFICE_HOSTNAME}:{self.BACKOFFICE_PORT}/providers"
        response = self.__make_request(url, GET)
        return response

    def get_provider_service(self, id):
        url = f"https://{self.BACKOFFICE_HOSTNAME}:{self.BACKOFFICE_PORT}/resources/providers/services/{id}"
        response = self.__make_request(url, GET)
        return response

    def delete_event_subscription(self, id, subscription_id):
    def get_events(self, id):
        url = f"https://{self.BACKOFFICE_HOSTNAME}:{self.BACKOFFICE_PORT}/events/{id}"
        response = self.__make_request(url, GET)
        return response

        url = f"https://{self.HOSTNAME}/capif-events/v1/{id}/subscriptions/{subscription_id}"
    def delete_security_context(self, id):
        url = f"https://{self.CAPIF_HOSTNAME}:{self.CAPIF_PORT}/capif-security/v1/trustedInvokers/{id}"
        response = self.__make_request(url, DELETE)
        return response

        response = self.__make_request(url)
    def delete_provider_service(self, id, service_id):
        url = f"https://{self.CAPIF_HOSTNAME}:{self.CAPIF_PORT}/published-apis/v1/{id}/service-apis/{service_id}"
        response = self.__make_request(url, DELETE)
        return response

    def delete_events(self, id, subscription_id):
        url = f"https://{self.CAPIF_HOSTNAME}:{self.CAPIF_PORT}/capif-events/v1/{id}/subscriptions/{subscription_id}"
        response = self.__make_request(url, DELETE)
        return response

    def delete_invoker(self, id):

        url = f"https://{self.HOSTNAME}/api-invoker-management/v1/onboardedInvokers/{id}"

        response = self.__make_request(url)

        url = f"https://{self.CAPIF_HOSTNAME}:{self.CAPIF_PORT}/api-invoker-management/v1/onboardedInvokers/{id}"
        response = self.__make_request(url, DELETE)
        return response

    def delete_provider(self, id):

        url = f"https://{self.HOSTNAME}/api-provider-management/v1/registrations/{id}"

        response = self.__make_request(url)

        url = f"https://{self.CAPIF_HOSTNAME}:{self.CAPIF_PORT}/api-provider-management/v1/registrations/{id}"
        response = self.__make_request(url, DELETE)
        return response

    def __make_request(self, url):
    def __make_request(self, url, method):

        try:
            if method == DELETE:
                response = requests.delete(url, headers=self.headers, cert=(
                    'certs/cert_backoffice.crt', 'certs/private.key'), verify="certs/ca.crt")
                if response.status_code == 404:
                    logger.error("Resource not found")
                    return make_response(object=None, status=200)
                elif response.status_code == 400:
                    logger.error("Bad request")
                    return make_response(object=None, status=200)
                return make_response(object=response.json(), status=200)
            # One way ssl verification, we haven't the microservice certificate
            response = requests.request(method, url, headers=self.headers, cert=(
                'certs/cert_backoffice.crt', 'certs/private.key'), verify=False)
            return response
            if response.status_code == 404:
                logger.error("Resource not found")
                return make_response(object=None, status=200)
            elif response.status_code == 400:
                logger.error("Bad request")
                return make_response(object=None, status=200)
            return make_response(object=response.json()["object"], status=200)
        except Exception as e:
            logger.error("Something wrong happens: ", e)
            return "Shometing wrong happens: ", e

core/events.py

deleted100644 → 0
+0 −61
Original line number Diff line number Diff line
from core.resources import Resource
from core.capif_ops import CapifOps
from core.responses import make_response
import logging


logger = logging.getLogger(__name__)


class Events(Resource):

    def __init__(self):
        Resource.__init__(self)
        self.capif = CapifOps()

    def get_events_by_id(self, id):

        events_col = self.db.get_col_by_name(self.db.event_details)

        try:
            events = events_col.find({"subscriber_id": id})

            json_events = []
            for event in events:
                json_events.append(event)

            return make_response(object=json_events, status=200)

        except Exception as e:
            return "Error when retreiving event: ", e

    def get_events(self):

        events_col = self.db.get_col_by_name(self.db.event_details)

        try:
            events = events_col.find({}, {"_id": 0})
            json_events = []
            for event in events:
                json_events.append(event)

            return make_response(object=json_events, status=200)

        except Exception as e:
            print(e)
            return "Error when retreiving event list: ", e

    def remove_events(self):

        self.db.delete_col_by_name(self.db.event_details)

        return "Done", 200

    def remove_events_by_subscriber_id(self, subscriber_id, subscription_id):

        self.capif.delete_event_subscription(subscriber_id, subscription_id)

        # self.db.delete_document_by_subscriber_id(
        #     self.db.event_details, subscriber_id)

        return "Done", 200
Loading