From 10fa69a975b5b7593fadefdd5fe8cd0dbfdf015b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Garc=C3=ADa?= <daniel.garciasanchez@telefonica.com>
Date: Wed, 18 Sep 2024 17:31:25 +0200
Subject: [PATCH] Refactor without validation testing

---
 README.md                                     |  45 ++++++++++++------
 .../provider_api_description_sample.json      |   0
 .../Config_files => config}/config.json       |   0
 .../discover_filter.json                      |   0
 .../Config_files => config}/publish.json      |   0
 .../Config_files => config}/register.json     |   0
 images/OpenCAPIF-icon.jpg                     | Bin 0 -> 7218 bytes
 nf-samples/README.md                          |   1 +
 scripts/README.md                             |   1 +
 .../deregister_and_login.py                   |   0
 .../emulator_utils.py                         |   0
 .../invoker_capif_connector.py                |   0
 .../invoker_capif_connector_offboarding.py    |   0
 .../invoker_service_discovery.py              |   0
 .../invoker_service_get_token.py              |   0
 .../provider_capif_connector.py               |   0
 .../provider_capif_connector_offboarding.py   |   0
 .../provider_get_all_published_api.py         |   0
 .../provider_get_published_api.py             |   0
 .../provider_publish_api.py                   |   0
 .../provider_unpublish_api.py                 |   0
 .../provider_update_api.py                    |   0
 .../register_and_login.py                     |   0
 {Safe-6g => sdk}/sdk.py                       |   0
 24 files changed, 32 insertions(+), 15 deletions(-)
 rename {Functionalities/capif_exposer_sample_files => api-samples}/provider_api_description_sample.json (100%)
 rename {Functionalities/Config_files => config}/config.json (100%)
 rename {Functionalities/Config_files => config}/discover_filter.json (100%)
 rename {Functionalities/Config_files => config}/publish.json (100%)
 rename {Functionalities/Config_files => config}/register.json (100%)
 create mode 100644 images/OpenCAPIF-icon.jpg
 create mode 100644 nf-samples/README.md
 create mode 100644 scripts/README.md
 rename {Functionalities => scripts}/deregister_and_login.py (100%)
 rename {Functionalities => scripts}/emulator_utils.py (100%)
 rename {Functionalities => scripts}/invoker_capif_connector.py (100%)
 rename {Functionalities => scripts}/invoker_capif_connector_offboarding.py (100%)
 rename {Functionalities => scripts}/invoker_service_discovery.py (100%)
 rename {Functionalities => scripts}/invoker_service_get_token.py (100%)
 rename {Functionalities => scripts}/provider_capif_connector.py (100%)
 rename {Functionalities => scripts}/provider_capif_connector_offboarding.py (100%)
 rename {Functionalities => scripts}/provider_get_all_published_api.py (100%)
 rename {Functionalities => scripts}/provider_get_published_api.py (100%)
 rename {Functionalities => scripts}/provider_publish_api.py (100%)
 rename {Functionalities => scripts}/provider_unpublish_api.py (100%)
 rename {Functionalities => scripts}/provider_update_api.py (100%)
 rename {Functionalities => scripts}/register_and_login.py (100%)
 rename {Safe-6g => sdk}/sdk.py (100%)

diff --git a/README.md b/README.md
index 06af09a..4836fb0 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,8 @@
 
 # OpenCAPIF SDK
 
+![OpenCAPIF icon](./images/OpenCAPIF-icon.jpg)
+
 This repository develop a Python Software Development Kit(SDK) whis focuses on connecting to OpenCAPIF in a simple way, lowering integration complexity and allowing developers to focus on Network Functions (NF) or services development. 
 
 OpentCAPIF SDK provides a set of libraries to enable either CAPIF provider and invoker roles, and other functions to simplify procedures calls towards OpenCAPIF.
@@ -9,30 +11,37 @@ OpentCAPIF SDK provides a set of libraries to enable either CAPIF provider and i
 Current version of OpenCAPIF SDK is compatible with following publicly available releases:
 - OpenCAPIF Release 1.0 [LINK TO OPENCAPIF RELEASE]
 
-# Features
+# Table of Contents
+
+ 1. [OpenCAPIF SDK usage](#OpenCAPIF-SDK-usage)
+ 2. [OpenCAPIF SDK Features](#OpenCAPIF-SDK-Features)
+ 3. [OpenCAPIF SDK Installation](#OpenCAPIF-SDK-Installation)
+ 4. [How to use OpenCAPIF SDK](#How-to-use-OpenCAPIF-SDK)
+ 5. [OpenCAPIF SDK known issues](#OpenCAPIF-SDK-known-issues)
+
+# OpenCAPIF SDK usage
+
+OpenCAPIF SDK implements this set of features to easily integrate an application with CAPIF NF either manually or integrating SDK library directly within app code.
 
-OpenCAPIF SDK implements this set of features to integrate with CAPIF NF:
+This repository includes 2 different modes to test OpenCAPIF SDK:
+- **Manual usage**: use a set of python scripts to test step by step all implemented procedures. All of them are provided at scripts folder,
+[IMAGE OF ARCH APP ----> CAPIF WITH SCRIPTS]
+
+- **Development usage**: import SDK in your code and start ... Within nf-sample folder, it is provided a sample application leveraging
+[IMAGE OF ARCH APP ----> CAPIF WITH SDK INTEGRATION]
+
+# OpenCAPIF SDK Features 
 
 - **Invoker CAPIF connector**: Simplifies the process of onboarding for Invoker users,
-  
 - **Provider CAPIF connector**: Simplifies the process of onboarding for Provider users,also has the capability to register several APF's and AEF's if its necesary,
-  
 - **Invoker Service Discovery**: Facilitates making a Discovery request to CAPIF, also stores the API services recieved and has an option to filter them,
-  
 - **Invoker Service Get token**: After the Discovery, this functionality simplifies the way of getting created their propperly security context for each of the services and adquiring the access token to use the final APIs, 
-  
 - **Provider Publish API**: Simplifies the process of publishing an API. Also has the capability to chose which APF and AEF's will be used to publish the API,
-
 - **Provider Unpublish API**: Simplifies the process of deleting an API,
-   
 - **Provider Update API**: Simplifies the process of updating an API. Also has the capability to chose which APF and AEF's will be used to update the API,
-
 - **Provider Get API**: Simplifies the process of recieving the information of One service published previously,
-
 - **Provider Get all APIs**: Simplifies the process of recieving the information of all available services published previously,
-
 - **Invoker CAPIF connector offboarding**: Simplifies the process of offboarding for Invoker users,
-  
 - **Provider CAPIF connector offboarding**: Simplifies the process of offboarding for Provider users.
 
 ![Descripción de la imagen](./images/Flujo%20completo-OPENCAPIF%20ACTUAL.jpg)
@@ -48,8 +57,7 @@ Apart from the SDK core, there are available different functionalities for devel
 ![Descripción de la imagen](./images/Flujo%20completo-SDK%20ACTUAL%20CON%20REGISTER.jpg)
 
 
-
-# OpenCAPIF SDK Installation
+# OpenCAPIF SDK Installation (dev environment??)
 
 Follow next steps to perform OpenCAPIF SDK installation:
 
@@ -103,7 +111,11 @@ pip install -r requirements.txt
 
 2 - Then it is needed to fill out config files depending on the features required to be used from the SDK.
 
-## Configuration of Config.json
+## Prerequisites
+
+IMPORTANT: In order to leverage OpenCAPIF SDK it is required to have registered a user in the target CAPIF instance, so contact administrator to have required predefined credentials (username and password).
+
+## Configuration via Config.json
 
     "invoker_folder": String | The path (relative or absolute) of the folder you want to store your invoker information
 
@@ -252,3 +264,6 @@ Each field is obligatory to complete except UUID, which is only obligatory in ca
 
 Although this field is not obligatory we recomend to store the UUID parameter recieved by the Register and login functionality in this field.    
 
+# OpenCAPIF SDK known issues
+
+[TO PUT HERE ALL KNOWN ISSUES OR BACKLOG]
\ No newline at end of file
diff --git a/Functionalities/capif_exposer_sample_files/provider_api_description_sample.json b/api-samples/provider_api_description_sample.json
similarity index 100%
rename from Functionalities/capif_exposer_sample_files/provider_api_description_sample.json
rename to api-samples/provider_api_description_sample.json
diff --git a/Functionalities/Config_files/config.json b/config/config.json
similarity index 100%
rename from Functionalities/Config_files/config.json
rename to config/config.json
diff --git a/Functionalities/Config_files/discover_filter.json b/config/discover_filter.json
similarity index 100%
rename from Functionalities/Config_files/discover_filter.json
rename to config/discover_filter.json
diff --git a/Functionalities/Config_files/publish.json b/config/publish.json
similarity index 100%
rename from Functionalities/Config_files/publish.json
rename to config/publish.json
diff --git a/Functionalities/Config_files/register.json b/config/register.json
similarity index 100%
rename from Functionalities/Config_files/register.json
rename to config/register.json
diff --git a/images/OpenCAPIF-icon.jpg b/images/OpenCAPIF-icon.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8ae5c10e186e12481f1e65f36b69ac722f057775
GIT binary patch
literal 7218
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
A(f|Me

literal 0
HcmV?d00001

diff --git a/nf-samples/README.md b/nf-samples/README.md
new file mode 100644
index 0000000..d531917
--- /dev/null
+++ b/nf-samples/README.md
@@ -0,0 +1 @@
+AQUÍ EL CÓDIGO DE EJMEMPLO DE UNA NF/APP QUE HACE USO DEL SDK
\ No newline at end of file
diff --git a/scripts/README.md b/scripts/README.md
new file mode 100644
index 0000000..3f10aab
--- /dev/null
+++ b/scripts/README.md
@@ -0,0 +1 @@
+AQUÍ TODOS LOS SCRIPTS DEL SDK
\ No newline at end of file
diff --git a/Functionalities/deregister_and_login.py b/scripts/deregister_and_login.py
similarity index 100%
rename from Functionalities/deregister_and_login.py
rename to scripts/deregister_and_login.py
diff --git a/Functionalities/emulator_utils.py b/scripts/emulator_utils.py
similarity index 100%
rename from Functionalities/emulator_utils.py
rename to scripts/emulator_utils.py
diff --git a/Functionalities/invoker_capif_connector.py b/scripts/invoker_capif_connector.py
similarity index 100%
rename from Functionalities/invoker_capif_connector.py
rename to scripts/invoker_capif_connector.py
diff --git a/Functionalities/invoker_capif_connector_offboarding.py b/scripts/invoker_capif_connector_offboarding.py
similarity index 100%
rename from Functionalities/invoker_capif_connector_offboarding.py
rename to scripts/invoker_capif_connector_offboarding.py
diff --git a/Functionalities/invoker_service_discovery.py b/scripts/invoker_service_discovery.py
similarity index 100%
rename from Functionalities/invoker_service_discovery.py
rename to scripts/invoker_service_discovery.py
diff --git a/Functionalities/invoker_service_get_token.py b/scripts/invoker_service_get_token.py
similarity index 100%
rename from Functionalities/invoker_service_get_token.py
rename to scripts/invoker_service_get_token.py
diff --git a/Functionalities/provider_capif_connector.py b/scripts/provider_capif_connector.py
similarity index 100%
rename from Functionalities/provider_capif_connector.py
rename to scripts/provider_capif_connector.py
diff --git a/Functionalities/provider_capif_connector_offboarding.py b/scripts/provider_capif_connector_offboarding.py
similarity index 100%
rename from Functionalities/provider_capif_connector_offboarding.py
rename to scripts/provider_capif_connector_offboarding.py
diff --git a/Functionalities/provider_get_all_published_api.py b/scripts/provider_get_all_published_api.py
similarity index 100%
rename from Functionalities/provider_get_all_published_api.py
rename to scripts/provider_get_all_published_api.py
diff --git a/Functionalities/provider_get_published_api.py b/scripts/provider_get_published_api.py
similarity index 100%
rename from Functionalities/provider_get_published_api.py
rename to scripts/provider_get_published_api.py
diff --git a/Functionalities/provider_publish_api.py b/scripts/provider_publish_api.py
similarity index 100%
rename from Functionalities/provider_publish_api.py
rename to scripts/provider_publish_api.py
diff --git a/Functionalities/provider_unpublish_api.py b/scripts/provider_unpublish_api.py
similarity index 100%
rename from Functionalities/provider_unpublish_api.py
rename to scripts/provider_unpublish_api.py
diff --git a/Functionalities/provider_update_api.py b/scripts/provider_update_api.py
similarity index 100%
rename from Functionalities/provider_update_api.py
rename to scripts/provider_update_api.py
diff --git a/Functionalities/register_and_login.py b/scripts/register_and_login.py
similarity index 100%
rename from Functionalities/register_and_login.py
rename to scripts/register_and_login.py
diff --git a/Safe-6g/sdk.py b/sdk/sdk.py
similarity index 100%
rename from Safe-6g/sdk.py
rename to sdk/sdk.py
-- 
GitLab