Commit 90ef9c7d authored by Stavros-Anastasios Charismiadis's avatar Stavros-Anastasios Charismiadis
Browse files

Change name of interconnection APIs, add templates for sync and delete

parent 131577dc
Loading
Loading
Loading
Loading
Loading
+162 −3
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ servers:
      description: Base URL of the Helper service.
# 1. PATHS: Where you define your endpoints
paths:
  /interconnect:
  /request:
    post:
      summary: Send a new interconnection request
      operationId: interconnect_request  # <--- Becomes 'def interconnect_request(body):' in Python
@@ -66,10 +66,117 @@ paths:
          description: Service Unavailable
        default:
          description: Generic Error
  /connect:
  /sync:
    post:
      summary: Send an interconnection sync request from one CCF to another
      operationId: interconnect_sync  # <--- Becomes 'def interconnect_sync(body):' in Python
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CapifDomainDetails'
      responses:
        "201":
          description: Interconnection sync succeeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CapifDomainDetails'
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad request
        "401":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized
        "403":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        "500":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal Server Error
        "503":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Service Unavailable
        default:
          description: Generic Error
  /request/{ccf_id}:
    delete:
      summary: Remove an interconnection request
      operationId: delete_interconnect_request  # <--- Becomes 'def delete_interconnect_request(ccf_id):' in Python
      parameters:
      - description: CCF identifier of the interconnection request to remove
        in: path
        name: ccf_id
        required: true
        schema:
          type: string
      responses:
        "204":
          description: Interconnection request removed
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad request
        "401":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized
        "403":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        "500":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal Server Error
        "503":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Service Unavailable
        default:
          description: Generic Error
  /establish:
    post:
      summary: Create a new interconnection
      operationId: connect_ccfs  # <--- Becomes 'def connect_ccfs(body):' in Python
      operationId: connect_ccf
      requestBody:
        required: true
        content:
@@ -121,6 +228,58 @@ paths:
          description: Service Unavailable
        default:
          description: Generic Error
  /establish/{ccf_id}:
    delete:
      summary: Remove an established interconnection
      operationId: delete_connected_ccf
      parameters:
      - description: CCF identifier of the interconnection to remove
        in: path
        name: ccf_id
        required: true
        schema:
          type: string
      responses:
        "204":
          description: Interconnection removed
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad request
        "401":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized
        "403":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        "500":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal Server Error
        "503":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Service Unavailable
        default:
          description: Generic Error
# 2. COMPONENTS: Reusable data models (Classes in Python)
components:
  schemas:
+50 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ ccf_operations = CcfInstanceOperations()
capif_domain_operations = CapifDomainOperations()


def connect_ccfs(body):  # noqa: E501
def connect_ccf(body):  # noqa: E501
    """Create a new interconnection

     # noqa: E501
@@ -33,6 +33,21 @@ def connect_ccfs(body): # noqa: E501
    return res


def delete_connected_ccf(ccf_id):  # noqa: E501
    """Remove an established interconnection

     # noqa: E501

    :param ccf_id: CCF identifier of the interconnection to remove
    :type ccf_id: str

    :rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]]
    """
    res = ccf_operations.delete_ccfinstance(ccf_id)

    return res


def interconnect_request(body):  # noqa: E501
    """Send a new interconnection request

@@ -50,3 +65,37 @@ def interconnect_request(body): # noqa: E501
    res = capif_domain_operations.add_capifdomain(capif_domain_details)

    return res


def interconnect_sync(body):  # noqa: E501
    """Send an interconnection sync request from one CCF to another

     # noqa: E501

    :param capif_domain_details:
    :type capif_domain_details: dict | bytes

    :rtype: Union[CapifDomainDetails, Tuple[CapifDomainDetails, int], Tuple[CapifDomainDetails, int, Dict[str, str]]
    """
    capif_domain_details = body
    if connexion.request.is_json:
        capif_domain_details = CapifDomainDetails.from_dict(connexion.request.get_json())  # noqa: E501

    res = capif_domain_operations.sync_capifdomain(capif_domain_details)

    return res


def delete_interconnect_request(ccf_id):  # noqa: E501
    """Remove an interconnection request

     # noqa: E501

    :param ccf_id: CCF identifier of the interconnection request to remove
    :type ccf_id: str

    :rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]]
    """
    res = capif_domain_operations.delete_capifdomain(ccf_id)

    return res
+9 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ class CapifDomainOperations(Resource):
            current_app.logger.debug("CAPIF domain already interconnected : {}".format(capifdomaindetails.dst_prov_dom))
            return make_response("CAPIF domain already interconnected", 409)

        url = "https://{}/helper/interconnection/connect".format(capifdomaindetails.dst_prov_dom)
        url = "https://{}/helper/interconnection/establish".format(capifdomaindetails.dst_prov_dom)

        with open('certs/ca.crt', 'rb') as ca_cert:
            server_ca = ca_cert.read()
@@ -101,3 +101,11 @@ class CapifDomainOperations(Resource):
            return Response(json.dumps(inter_ccf), status=response.status_code, mimetype=remote_mimetype)

        return Response(response.text, status=response.status_code, mimetype=remote_mimetype)

    def sync_capifdomain(self, capifdomaindetails):
        """Sync interconnection state with a peer CCF."""
        pass

    def delete_capifdomain(self, ccf_id):
        """Remove an interconnection request for a CCF."""
        pass
+5 −1
Original line number Diff line number Diff line
@@ -74,3 +74,7 @@ class CcfInstanceOperations(Resource):
        current_app.logger.debug(ccfinstancedetails_new)
        res = make_response(object=serialize_clean(ccfinstancedetails_new), status=status)
        return res

    def delete_ccfinstance(self, ccf_id):
        """Remove an established interconnection with a peer CCF."""
        pass
 No newline at end of file
+25 −25
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@
  },
  "item": [
    {
      "name": "Create Interconnection - POST /connect",
      "name": "Create Interconnection - POST /establish",
      "request": {
        "method": "POST",
        "header": [
@@ -21,12 +21,12 @@
          "raw": "{\n  \"caRoot\": \"-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----\",\n  \"publicKey\": \"-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----\",\n  \"ccfId\": \"ccf-001\",\n  \"dstProvDom\": \"provider-b.example.com\"\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/connect",
          "raw": "{{baseUrl}}/establish",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "connect"
            "establish"
          ]
        },
        "description": "Create a new interconnection between CCFs."
@@ -47,12 +47,12 @@
              "raw": "{\n  \"caRoot\": \"-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----\",\n  \"publicKey\": \"-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----\",\n  \"ccfId\": \"ccf-001\",\n  \"dstProvDom\": \"provider-b.example.com\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/connect",
              "raw": "{{baseUrl}}/establish",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connect"
                "establish"
              ]
            }
          },
@@ -78,12 +78,12 @@
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/connect",
              "raw": "{{baseUrl}}/establish",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connect"
                "establish"
              ]
            }
          },
@@ -96,7 +96,7 @@
              "value": "application/problem+json"
            }
          ],
          "body": "{\n  \"type\": \"https://example.com/problems/invalid-request\",\n  \"title\": \"Bad Request\",\n  \"status\": 400,\n  \"detail\": \"Request body contains invalid or missing parameters.\",\n  \"instance\": \"/interconnection/connect\",\n  \"cause\": \"MANDATORY_IE_MISSING\",\n  \"invalidParams\": [\n    {\n      \"param\": \"/ccfId\",\n      \"reason\": \"is required\"\n    },\n    {\n      \"param\": \"/publicKey\",\n      \"reason\": \"must be a valid PEM public key\"\n    }\n  ],\n  \"supportedFeatures\": \"1F\"\n}"
          "body": "{\n  \"type\": \"https://example.com/problems/invalid-request\",\n  \"title\": \"Bad Request\",\n  \"status\": 400,\n  \"detail\": \"Request body contains invalid or missing parameters.\",\n  \"instance\": \"/interconnection/establish\",\n  \"cause\": \"MANDATORY_IE_MISSING\",\n  \"invalidParams\": [\n    {\n      \"param\": \"/ccfId\",\n      \"reason\": \"is required\"\n    },\n    {\n      \"param\": \"/publicKey\",\n      \"reason\": \"must be a valid PEM public key\"\n    }\n  ],\n  \"supportedFeatures\": \"1F\"\n}"
        },
        {
          "name": "401 Unauthorized",
@@ -109,12 +109,12 @@
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/connect",
              "raw": "{{baseUrl}}/establish",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connect"
                "establish"
              ]
            }
          },
@@ -127,7 +127,7 @@
              "value": "application/problem+json"
            }
          ],
          "body": "{\n  \"type\": \"https://example.com/problems/unauthorized\",\n  \"title\": \"Unauthorized\",\n  \"status\": 401,\n  \"detail\": \"Missing or invalid authentication credentials.\",\n  \"instance\": \"/interconnection/connect\",\n  \"cause\": \"INVALID_TOKEN\"\n}"
          "body": "{\n  \"type\": \"https://example.com/problems/unauthorized\",\n  \"title\": \"Unauthorized\",\n  \"status\": 401,\n  \"detail\": \"Missing or invalid authentication credentials.\",\n  \"instance\": \"/interconnection/establish\",\n  \"cause\": \"INVALID_TOKEN\"\n}"
        },
        {
          "name": "403 Forbidden",
@@ -140,12 +140,12 @@
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/connect",
              "raw": "{{baseUrl}}/establish",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connect"
                "establish"
              ]
            }
          },
@@ -158,7 +158,7 @@
              "value": "application/problem+json"
            }
          ],
          "body": "{\n  \"type\": \"https://example.com/problems/forbidden\",\n  \"title\": \"Forbidden\",\n  \"status\": 403,\n  \"detail\": \"The client is not allowed to perform this operation.\",\n  \"instance\": \"/interconnection/connect\",\n  \"cause\": \"INSUFFICIENT_SCOPE\"\n}"
          "body": "{\n  \"type\": \"https://example.com/problems/forbidden\",\n  \"title\": \"Forbidden\",\n  \"status\": 403,\n  \"detail\": \"The client is not allowed to perform this operation.\",\n  \"instance\": \"/interconnection/establish\",\n  \"cause\": \"INSUFFICIENT_SCOPE\"\n}"
        },
        {
          "name": "404 Not Found",
@@ -171,12 +171,12 @@
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/connect",
              "raw": "{{baseUrl}}/establish",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connect"
                "establish"
              ]
            }
          },
@@ -189,12 +189,12 @@
              "value": "application/problem+json"
            }
          ],
          "body": "{\n  \"type\": \"https://example.com/problems/not-found\",\n  \"title\": \"Not Found\",\n  \"status\": 404,\n  \"detail\": \"The target resource was not found.\",\n  \"instance\": \"/interconnection/connect\",\n  \"cause\": \"RESOURCE_NOT_FOUND\"\n}"
          "body": "{\n  \"type\": \"https://example.com/problems/not-found\",\n  \"title\": \"Not Found\",\n  \"status\": 404,\n  \"detail\": \"The target resource was not found.\",\n  \"instance\": \"/interconnection/establish\",\n  \"cause\": \"RESOURCE_NOT_FOUND\"\n}"
        }
      ]
    },
    {
      "name": "Interconnect Request - POST /interconnect",
      "name": "Interconnection Request - POST /request",
      "request": {
        "method": "POST",
        "header": [
@@ -208,12 +208,12 @@
          "raw": "{\n  \"dstProvDom\": \"provider-b.example.com\"\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/interconnect",
          "raw": "{{baseUrl}}/request",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "interconnect"
            "request"
          ]
        },
        "description": "Send a new interconnection request to another CAPIF domain."
@@ -234,12 +234,12 @@
              "raw": "{\n  \"dstProvDom\": \"provider-b.example.com\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/interconnect",
              "raw": "{{baseUrl}}/request",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnect"
                "request"
              ]
            }
          },
@@ -265,12 +265,12 @@
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/interconnect",
              "raw": "{{baseUrl}}/request",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnect"
                "request"
              ]
            }
          },
@@ -283,7 +283,7 @@
              "value": "application/problem+json"
            }
          ],
          "body": "{\n  \"type\": \"https://example.com/problems/invalid-request\",\n  \"title\": \"Bad Request\",\n  \"status\": 400,\n  \"detail\": \"dstProvDom is missing or invalid.\",\n  \"instance\": \"/interconnection/interconnect\",\n  \"cause\": \"MANDATORY_IE_MISSING\",\n  \"invalidParams\": [\n    {\n      \"param\": \"/dstProvDom\",\n      \"reason\": \"is required\"\n    }\n  ]\n}"
          "body": "{\n  \"type\": \"https://example.com/problems/invalid-request\",\n  \"title\": \"Bad Request\",\n  \"status\": 400,\n  \"detail\": \"dstProvDom is missing or invalid.\",\n  \"instance\": \"/interconnection/request\",\n  \"cause\": \"MANDATORY_IE_MISSING\",\n  \"invalidParams\": [\n    {\n      \"param\": \"/dstProvDom\",\n      \"reason\": \"is required\"\n    }\n  ]\n}"
        }
      ]
    }
Loading