diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/controllers/default_controller.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/controllers/default_controller.py index 456b4ecc8bbde1dbd1aff2c88b14bee17bdcf727..27eb1c8fde859b355f543856af9f4857d36710bb 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/controllers/default_controller.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/controllers/default_controller.py @@ -104,18 +104,13 @@ def onboarded_invokers_post(body): # noqa: E501 """ identity = get_jwt_identity() - username, role = identity.split() - - if role != "invoker": - prob = ProblemDetails(title="Unauthorized", status=401, detail="Role not authorized for this API route", - cause="User role must be invoker") - return Response(json.dumps(prob, cls=JSONEncoder), status=401, mimetype='application/json') + username, uuid = identity.split() if connexion.request.is_json: body = APIInvokerEnrolmentDetails.from_dict(connexion.request.get_json()) # noqa: E501 current_app.logger.info("Creating Invoker") - res = invoker_operations.add_apiinvokerenrolmentdetail(body, username) + res = invoker_operations.add_apiinvokerenrolmentdetail(body, username, uuid) if res.status_code == 201: current_app.logger.info("Invoker Created") publisher_ops.publish_message("events", "API_INVOKER_ONBOARDED") diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/apiinvokerenrolmentdetails.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/apiinvokerenrolmentdetails.py index 1d79405b6a9237edfa41e424c18f659f47aa9990..dc186e4da140c450eb8573cf4911c17a4c023eb8 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/apiinvokerenrolmentdetails.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/apiinvokerenrolmentdetails.py @@ -52,13 +52,11 @@ class InvokerManagementOperations(Resource): self.config = Config().get_config() - def add_apiinvokerenrolmentdetail(self, apiinvokerenrolmentdetail, username): + def add_apiinvokerenrolmentdetail(self, apiinvokerenrolmentdetail, username, uuid): mycol = self.db.get_col_by_name(self.db.invoker_enrolment_details) - register = self.db.get_col_by_name_register(self.db.capif_users) #try: - current_app.logger.debug("Creating invoker resource") res = mycol.find_one({'onboarding_information.api_invoker_public_key': apiinvokerenrolmentdetail.onboarding_information.api_invoker_public_key}) @@ -83,9 +81,10 @@ class InvokerManagementOperations(Resource): # Onboarding Date Record invoker_dict = apiinvokerenrolmentdetail.to_dict() invoker_dict["onboarding_date"] = datetime.now() + invoker_dict["username"]=username + invoker_dict["uuid"]=uuid mycol.insert_one(apiinvokerenrolmentdetail.to_dict()) - register.update_one({'username':username}, {"$push":{'list_invokers':api_invoker_id}}) current_app.logger.debug("Invoker inserted in database") current_app.logger.debug("Netapp onboarded sucessfuly") @@ -141,7 +140,6 @@ class InvokerManagementOperations(Resource): def remove_apiinvokerenrolmentdetail(self, onboard_id): mycol = self.db.get_col_by_name(self.db.invoker_enrolment_details) - register = self.db.get_col_by_name_register(self.db.capif_users) try: current_app.logger.debug("Removing invoker resource") result = self.__check_api_invoker_id(onboard_id) @@ -150,7 +148,6 @@ class InvokerManagementOperations(Resource): return result mycol.delete_one({'api_invoker_id':onboard_id}) - register.update_one({'list_invokers':onboard_id}, {"$pull":{'list_invokers':onboard_id}}) self.auth_manager.remove_auth_invoker(onboard_id) current_app.logger.debug("Invoker resource removed from database") diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/db/db.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/db/db.py index 32a34b857cd44ea065ab6dc30b8c75a7c671fc5a..5bfcd0b1f8539727cd9d821f466e69db220f67c1 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/db/db.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/db/db.py @@ -15,7 +15,6 @@ class MongoDatabse(): def __init__(self): self.config = Config().get_config() self.db = self.__connect() - self.register = self.__connect_register() self.invoker_enrolment_details = self.config['mongo']['col'] self.capif_users = self.config['mongo']['capif_users_col'] self.service_col = self.config['mongo']["service_col"] @@ -25,10 +24,6 @@ class MongoDatabse(): def get_col_by_name(self, name): return self.db[name].with_options(codec_options=CodecOptions(tz_aware=True)) - def get_col_by_name_register(self, name): - return self.register[name].with_options(codec_options=CodecOptions(tz_aware=True)) - - def __connect(self, max_retries=3, retry_delay=1): retries = 0 @@ -48,29 +43,8 @@ class MongoDatabse(): print(f"Reconnecting... Retry {retries} of {max_retries}") time.sleep(retry_delay) return None - - def __connect_register(self, max_retries=3, retry_delay=1): - - retries = 0 - - while retries < max_retries: - try: - uri = f"mongodb://{self.config['mongo_register']['user']}:{self.config['mongo_register']['password']}@" \ - f"{self.config['mongo_register']['host']}:{self.config['mongo_register']['port']}" - - - client = MongoClient(uri) - mydb = client[self.config['mongo_register']['db']] - mydb.command("ping") - return mydb - except AutoReconnect: - retries += 1 - print(f"Reconnecting... Retry {retries} of {max_retries}") - time.sleep(retry_delay) - return None def close_connection(self): if self.db.client: self.db.client.close() - if self.register.client: - self.register.client.close() + diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/controllers/default_controller.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/controllers/default_controller.py index 70e53734507bc9a3838db164d277b808e3bc0f4e..f5bcf167319a5d29255b0b2c688c2e3ab60f460f 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/controllers/default_controller.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/controllers/default_controller.py @@ -59,20 +59,15 @@ def registrations_post(body): # noqa: E501 """ identity = get_jwt_identity() - username, role = identity.split() + username, uuid = identity.split() current_app.logger.info("Registering Provider Domain") - if role != "provider": - prob = ProblemDetails(title="Unauthorized", status=401, detail="Role not authorized for this API route", - cause="User role must be provider") - return Response(json.dumps(prob, cls=JSONEncoder), status=401, mimetype='application/json') - if connexion.request.is_json: body = APIProviderEnrolmentDetails.from_dict(connexion.request.get_json()) # noqa: E501 - res = provider_management_ops.register_api_provider_enrolment_details(body, username) + res = provider_management_ops.register_api_provider_enrolment_details(body, username, uuid) return res diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/provider_enrolment_details_api.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/provider_enrolment_details_api.py index 18c5e5b72bcfbea19595d9c5c002e98d25494c82..6ba9043eb48f523d44fedab79a1510456d19b62c 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/provider_enrolment_details_api.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/provider_enrolment_details_api.py @@ -31,10 +31,9 @@ class ProviderManagementOperations(Resource): Resource.__init__(self) self.auth_manager = AuthManager() - def register_api_provider_enrolment_details(self, api_provider_enrolment_details, username): + def register_api_provider_enrolment_details(self, api_provider_enrolment_details, username, uuid): try: mycol = self.db.get_col_by_name(self.db.provider_enrolment_details) - register = self.db.get_col_by_name_register(self.db.capif_users) current_app.logger.debug("Creating api provider domain") search_filter = {'reg_sec': api_provider_enrolment_details.reg_sec} @@ -58,10 +57,11 @@ class ProviderManagementOperations(Resource): # Onboarding Date Record provider_dict = api_provider_enrolment_details.to_dict() provider_dict["onboarding_date"] = datetime.now() + provider_dict["username"] = username + provider_dict["uuid"] = uuid mycol.insert_one(provider_dict) - register.update_one({'username':username}, {"$push":{'list_providers':api_provider_enrolment_details.api_prov_dom_id}}) - + current_app.logger.debug("Provider inserted in database") res = make_response(object=api_provider_enrolment_details, status=201) @@ -76,7 +76,6 @@ class ProviderManagementOperations(Resource): def delete_api_provider_enrolment_details(self, api_prov_dom_id): try: mycol = self.db.get_col_by_name(self.db.provider_enrolment_details) - register = self.db.get_col_by_name_register(self.db.capif_users) current_app.logger.debug("Deleting provider domain") result = self.__check_api_provider_domain(api_prov_dom_id) @@ -89,7 +88,6 @@ class ProviderManagementOperations(Resource): amf_id = [ provider_func['api_prov_func_id'] for provider_func in result["api_prov_funcs"] if provider_func['api_prov_func_role'] == 'AMF' ] mycol.delete_one({'api_prov_dom_id': api_prov_dom_id}) - register.update_one({'list_providers':api_prov_dom_id}, {"$pull":{'list_providers':api_prov_dom_id}}) out = "The provider matching apiProvDomainId " + api_prov_dom_id + " was offboarded." current_app.logger.debug("Removed provider domain from database") diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/db/db.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/db/db.py index a5d843a4bc61f0edac3caae779c1f16852378ea8..bb080252efefbb51854ca37dd2cf5e6ebee8d41c 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/db/db.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/db/db.py @@ -16,17 +16,12 @@ class MongoDatabse(): def __init__(self): self.config = Config().get_config() self.db = self.__connect() - self.register = self.__connect_register() self.provider_enrolment_details = self.config['mongo']['col'] self.capif_users = self.config['mongo']['capif_users'] self.certs_col = self.config['mongo']['certs_col'] def get_col_by_name(self, name): return self.db[name].with_options(codec_options=CodecOptions(tz_aware=True)) - def get_col_by_name_register(self, name): - return self.register[name].with_options(codec_options=CodecOptions(tz_aware=True)) - - def __connect(self, max_retries=3, retry_delay=1): retries = 0 @@ -44,30 +39,8 @@ class MongoDatabse(): time.sleep(retry_delay) return None - def __connect_register(self, max_retries=3, retry_delay=1): - - retries = 0 - - while retries < max_retries: - try: - uri = f"mongodb://{self.config['mongo_register']['user']}:{self.config['mongo_register']['password']}@" \ - f"{self.config['mongo_register']['host']}:{self.config['mongo_register']['port']}" - - - client = MongoClient(uri) - mydb = client[self.config['mongo_register']['db']] - mydb.command("ping") - return mydb - except AutoReconnect: - retries += 1 - print(f"Reconnecting... Retry {retries} of {max_retries}") - time.sleep(retry_delay) - return None - def close_connection(self): if self.db.client: self.db.client.close() - if self.register.client: - self.register.client.close() diff --git a/services/register/config.yaml b/services/register/config.yaml index 2ac53bd343f3b76d82906c4ed871d6f4c71afcd0..3c33fa055a00089f648cf158fa955551247d1037 100644 --- a/services/register/config.yaml +++ b/services/register/config.yaml @@ -12,3 +12,7 @@ ca_factory: { "token": "dev-only-token" } +register: { + register_uuid: '6ba7b810-9dad-11d1-80b4-00c04fd430c8', + admin_users: {admin: "password123"} +} \ No newline at end of file diff --git a/services/register/register_prepare.sh b/services/register/register_prepare.sh index de69be7043beb9dc002bcc98004b975d31a979af..4a49b87d7039f7dba68b3f1cce00e77aaa3656c8 100644 --- a/services/register/register_prepare.sh +++ b/services/register/register_prepare.sh @@ -1,27 +1,16 @@ #!/bin/bash -CERTS_FOLDER="/usr/src/app/register_service" +CERTS_FOLDER="/usr/src/app/register_service/certs" cd $CERTS_FOLDER -VAULT_ADDR="http://$VAULT_HOSTNAME:$VAULT_PORT" -VAULT_TOKEN=$VAULT_ACCESS_TOKEN - -curl -k -retry 30 \ - --retry-all-errors \ - --connect-timeout 5 \ - --max-time 10 \ - --retry-delay 10 \ - --retry-max-time 300 \ - --header "X-Vault-Token: $VAULT_TOKEN" \ - --request GET "$VAULT_ADDR/v1/secret/data/server_cert/private" 2>/dev/null | jq -r '.data.data.key' -j > $CERTS_FOLDER/server.key - openssl req -x509 \ -sha256 -days 356 \ -nodes \ -newkey rsa:2048 \ -subj "/CN=register/C=ES/L=Madrid" \ - -keyout /usr/src/app/register_service/registerCA.key -out /usr/src/app/register_service/registerCA.crt + -keyout /usr/src/app/register_service/certs/registerCA.key -out /usr/src/app/register_service/certs/registerCA.crt + -openssl genrsa -out /usr/src/app/register_service/register_key.key 2048 +openssl genrsa -out /usr/src/app/register_service/certs/register_key.key 2048 COUNTRY="ES" # 2 letter country-code STATE="Madrid" # state or province name @@ -37,7 +26,7 @@ COMPANY="" # company name # DAYS="-days 365" # create the certificate request -cat <<__EOF__ | openssl req -new $DAYS -key /usr/src/app/register_service/register_key.key -out /usr/src/app/register_service/register.csr +cat <<__EOF__ | openssl req -new $DAYS -key /usr/src/app/register_service/certs/register_key.key -out /usr/src/app/register_service/certs/register.csr $COUNTRY $STATE $LOCALITY @@ -49,7 +38,7 @@ $CHALLENGE $COMPANY __EOF__ -openssl x509 -req -in /usr/src/app/register_service/register.csr -CA /usr/src/app/register_service/registerCA.crt -CAkey /usr/src/app/register_service/registerCA.key -CAcreateserial -out /usr/src/app/register_service/register_cert.crt -days 365 -sha256 +openssl x509 -req -in /usr/src/app/register_service/certs/register.csr -CA /usr/src/app/register_service/certs/registerCA.crt -CAkey /usr/src/app/register_service/certs/registerCA.key -CAcreateserial -out /usr/src/app/register_service/certs/register_cert.crt -days 365 -sha256 cd /usr/src/app/ python3 -m register_service \ No newline at end of file diff --git a/services/register/register_service/__main__.py b/services/register/register_service/__main__.py index 5225f78e731c7297259c8b6f573cdb487c2ef3c6..2548ebd241a6e07e82d042dd76c5b24db8dc6537 100644 --- a/services/register/register_service/__main__.py +++ b/services/register/register_service/__main__.py @@ -1,27 +1,73 @@ import os -import base64 from flask import Flask from .controllers.register_controller import register_routes from flask_jwt_extended import JWTManager +from OpenSSL.crypto import PKey, TYPE_RSA, X509Req, dump_certificate_request, FILETYPE_PEM, dump_privatekey +import requests +import json +from .config import Config app = Flask(__name__) jwt = JWTManager(app) -with open("/usr/src/app/register_service/server.key", "rb") as key_file: - key_data = key_file.read() +config = Config().get_config() +# Create a superadmin CSR and keys +key = PKey() +key.generate_key(TYPE_RSA, 2048) +req = X509Req() +req.get_subject().O = 'Telefonica I+D' +req.get_subject().OU = 'Innovation' +req.get_subject().L = 'Madrid' +req.get_subject().ST = 'Madrid' +req.get_subject().C = 'ES' +req.get_subject().emailAddress = 'inno@tid.es' +req.set_pubkey(key) +req.sign(key, 'sha256') + +csr_request = dump_certificate_request(FILETYPE_PEM, req) +private_key = dump_privatekey(FILETYPE_PEM, key) + +# Save superadmin private key +key_file = open("register_service/certs/superadmin.key", 'wb+') +key_file.write(bytes(private_key)) +key_file.close() + +# Request superadmin certificate +url = 'http://{}:{}/v1/pki_int/sign/my-ca'.format(config["ca_factory"]["url"], config["ca_factory"]["port"]) +headers = {'X-Vault-Token': f"{config["ca_factory"]["token"]}"} +data = { + 'format':'pem_bundle', + 'ttl': '43000h', + 'csr': csr_request, + 'common_name': "superadmin" +} + +response = requests.request("POST", url, headers=headers, data=data, verify = False) +superadmin_cert = json.loads(response.text)['data']['certificate'] + +# Svae the superadmin certificate +cert_file = open("register_service/certs/superadmin.crt", 'wb') +cert_file.write(bytes(superadmin_cert, 'utf-8')) +cert_file.close() + +# Request CAPIF private key to encode the token +url = 'http://{}:{}/v1/secret/data/server_cert/private'.format(config["ca_factory"]["url"], config["ca_factory"]["port"]) +headers = {'X-Vault-Token': f"{config["ca_factory"]["token"]}"} +response = requests.request("GET", url, headers=headers, verify = False) + +key_data = json.loads(response.text)["data"]["data"]["key"] app.config['JWT_ALGORITHM'] = 'RS256' app.config['JWT_PRIVATE_KEY'] = key_data app.register_blueprint(register_routes) - #---------------------------------------- # launch #---------------------------------------- if __name__ == "__main__": - app.run(debug=True, host = '0.0.0.0', port=8080, ssl_context= ("/usr/src/app/register_service/register_cert.crt", "/usr/src/app/register_service/register_key.key")) + app.run(debug=True, host = '0.0.0.0', port=8080, ssl_context= ("/usr/src/app/register_service/certs/register_cert.crt", "/usr/src/app/register_service/certs/register_key.key")) diff --git a/services/register/register_service/auth_utils.py b/services/register/register_service/auth_utils.py deleted file mode 100644 index f799772997bc614be1644391d0fed838cfd8534b..0000000000000000000000000000000000000000 --- a/services/register/register_service/auth_utils.py +++ /dev/null @@ -1,8 +0,0 @@ -import bcrypt - -def hash_password(password): - hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()) - return hashed_password - -def check_password(input_password, stored_password): - return bcrypt.checkpw(input_password.encode('utf-8'), stored_password) \ No newline at end of file diff --git a/services/register/register_service/controllers/register_controller.py b/services/register/register_service/controllers/register_controller.py index 71af562e59cbe6af5909fa65bd8d83f265ea490b..119e493bbb0f2e41db1524745fd405cca0b019ca 100644 --- a/services/register/register_service/controllers/register_controller.py +++ b/services/register/register_service/controllers/register_controller.py @@ -1,39 +1,68 @@ #!/usr/bin/env python3 -from flask import Flask, jsonify, request, Blueprint -from flask_jwt_extended import JWTManager, jwt_required, create_access_token -from pymongo import MongoClient +from flask import current_app, Flask, jsonify, request, Blueprint from ..core.register_operations import RegisterOperations -import secrets +from ..config import Config +from flask_httpauth import HTTPBasicAuth + +auth = HTTPBasicAuth() + +config = Config().get_config() + +@auth.verify_password +def verify_password(username, password): + users = register_operation.get_users()[0].json["users"] + if username in config["register"]["admin_users"] and password == config["register"]["admin_users"][username]: + return username, "admin" + for user in users: + if user["username"] == username and user["password"]==password: + return username, "client" + +def admin_required(fn): + def wrapper(*args, **kwargs): + username, role = auth.current_user() + if role == 'admin': + return fn(*args, **kwargs) + else: + return {"Access denied. Administrator privileges required."}, 403 + wrapper.__name__ = fn.__name__ + return wrapper register_routes = Blueprint("register_routes", __name__) register_operation = RegisterOperations() -@register_routes.route("/register", methods=["POST"]) +@register_routes.route("/createUser", methods=["POST"]) +@auth.login_required +@admin_required def register(): username = request.json["username"] password = request.json["password"] description = request.json["description"] - role = request.json["role"] - cn = request.json["cn"] - if role != "invoker" and role != "provider": - return jsonify(message="Role must be invoker or provider"), 400 - - - return register_operation.register_user(username, password, description, cn, role) + email = request.json["email"] + return register_operation.register_user(username, password, description, email) @register_routes.route("/getauth", methods=["POST"]) +@auth.login_required def getauth(): username = request.json["username"] password = request.json["password"] return register_operation.get_auth(username, password) -@register_routes.route("/remove", methods=["DELETE"]) +@register_routes.route("/deleteUser", methods=["DELETE"]) +@auth.login_required +@admin_required def remove(): username = request.json["username"] password = request.json["password"] return register_operation.remove_user(username, password) + + +@register_routes.route("/getUsers", methods=["GET"]) +@auth.login_required +@admin_required +def getUsers(): + return register_operation.get_users() diff --git a/services/register/register_service/core/register_operations.py b/services/register/register_service/core/register_operations.py index bef2f65e1438828b41db6cbd5a7c8938c1bd5922..a6e89923f3ab7f0da18ccf58e9977c00b581b875 100644 --- a/services/register/register_service/core/register_operations.py +++ b/services/register/register_service/core/register_operations.py @@ -1,14 +1,14 @@ -from flask import Flask, jsonify, request, current_app +from flask import current_app, Flask, jsonify, request, Response from flask_jwt_extended import create_access_token from ..db.db import MongoDatabse from datetime import datetime from ..config import Config -from register_service import auth_utils import secrets import requests import json import sys - +import uuid + class RegisterOperations: def __init__(self): @@ -16,28 +16,20 @@ class RegisterOperations: self.mimetype = 'application/json' self.config = Config().get_config() - def register_user(self, username, password, description, cn, role): + def register_user(self, username, password, description, email): mycol = self.db.get_col_by_name(self.db.capif_users) exist_user = mycol.find_one({"username": username}) if exist_user: return jsonify("user already exists"), 409 + + name_space = uuid.UUID(self.config["register"]["register_uuid"]) + user_uuid = str(uuid.uuid5(name_space, username)) - hashed_password = auth_utils.hash_password(password) - user_info = dict(_id=secrets.token_hex(7), username=username, password=hashed_password, role=role, description=description, cn=cn, list_invokers=[], list_providers=[]) + user_info = dict(uuid=user_uuid, username=username, password=password, description=description, email=email, onboarding_date=datetime.now()) obj = mycol.insert_one(user_info) - if role == "invoker": - return jsonify(message="invoker registered successfully", - id=obj.inserted_id, - ccf_onboarding_url="api-invoker-management/v1/onboardedInvokers", - ccf_discover_url="service-apis/v1/allServiceAPIs?api-invoker-id="), 201 - else: - return jsonify(message="provider" + " registered successfully", - id=obj.inserted_id, - ccf_api_onboarding_url="api-provider-management/v1/registrations", - ccf_publish_url="published-apis/v1/<apfId>/service-apis"), 201 - + return jsonify(message="invoker registered successfully", uuid=user_uuid), 201 def get_auth(self, username, password): @@ -45,16 +37,12 @@ class RegisterOperations: try: - exist_user = mycol.find_one({"username": username}) + exist_user = mycol.find_one({"username": username, "password": password}) if exist_user is None: - return jsonify("No user with these credentials"), 400 + return jsonify("Not exister user with this credentials"), 400 - stored_password = exist_user["password"] - if not auth_utils.check_password(password, stored_password): - return jsonify("No user with these credentials"), 400 - - access_token = create_access_token(identity=(username + " " + exist_user["role"])) + access_token = create_access_token(identity=(username + " " + exist_user["uuid"])) url = f"http://{self.config['ca_factory']['url']}:{self.config['ca_factory']['port']}/v1/secret/data/ca" headers = { @@ -62,7 +50,13 @@ class RegisterOperations: } response = requests.request("GET", url, headers=headers, verify = False) response_payload = json.loads(response.text) - return jsonify(message="Token and CA root returned successfully", access_token=access_token, ca_root=response_payload['data']['data']['ca']), 200 + return jsonify(message="Token and CA root returned successfully", + access_token=access_token, + ca_root=response_payload['data']['data']['ca'], + ccf_api_onboarding_url="api-provider-management/v1/registrations", + ccf_publish_url="published-apis/v1/<apfId>/service-apis", + ccf_onboarding_url="api-invoker-management/v1/onboardedInvokers", + ccf_discover_url="service-apis/v1/allServiceAPIs?api-invoker-id="), 200 except Exception as e: return jsonify(message=f"Errors when try getting auth: {e}"), 500 @@ -71,17 +65,22 @@ class RegisterOperations: mycol = self.db.get_col_by_name(self.db.capif_users) try: - exist_user = mycol.find_one({"username": username}) + mycol.delete_one({"username": username, "password": password}) + + + # Request to the helper to delete invokers and providers - if exist_user is None: - return jsonify("No user with these credentials"), 400 - stored_password = exist_user["password"] - if not auth_utils.check_password(password, stored_password): - return jsonify("No user with these credentials"), 400 - - mycol.delete_one({"username": username}) return jsonify(message="User removed successfully"), 204 except Exception as e: return jsonify(message=f"Errors when try remove user: {e}"), 500 + + def get_users(self): + mycol = self.db.get_col_by_name(self.db.capif_users) + + try: + users=list(mycol.find({}, {"_id":0})) + return jsonify(message="Users successfully obtained", users=users), 200 + except Exception as e: + return jsonify(message=f"Error trying to get users: {e}"), 500 diff --git a/services/register/requirements.txt b/services/register/requirements.txt index 05b9f7dfa88c8967b3cb20c0686e05d3c90076e0..c5446a6bfcd8efcd5623e685b22fe6f2eac48c46 100644 --- a/services/register/requirements.txt +++ b/services/register/requirements.txt @@ -7,3 +7,4 @@ pyopenssl pyyaml requests bcrypt +flask_httpauth \ No newline at end of file