Loading services/register/config.yaml +3 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ mongo: { 'password': 'example', 'db': 'capif_users', 'col': 'user', 'admins': 'admins', 'host': 'mongo_register', 'port': '27017' } Loading @@ -16,5 +17,6 @@ register: { register_uuid: '6ba7b810-9dad-11d1-80b4-00c04fd430c8', refresh_expiration: 30, #days token_expiration: 10, #mins admin_users: {admin: "password123"} admin_users: {admin_user: "admin", admin_pass: "password123"} } No newline at end of file services/register/register_service/__main__.py +6 −3 Original line number Diff line number Diff line import os 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 import jwt from .config import Config from .db.db import MongoDatabse app = Flask(__name__) Loading Loading @@ -73,6 +71,11 @@ response = requests.request("GET", url, headers=headers, verify = False) key_data = json.loads(response.text)["data"]["data"]["key"] # Create an Admin in the Admin Collection client = MongoDatabse() if not client.get_col_by_name(client.capif_admins).find_one({"admin_name": config["register"]["admin_users"]["admin_user"], "admin_pass": config["register"]["admin_users"]["admin_pass"]}): client.get_col_by_name(client.capif_admins).insert_one({"admin_name": config["register"]["admin_users"]["admin_user"], "admin_pass": config["register"]["admin_users"]["admin_pass"]}) app.config['JWT_ALGORITHM'] = 'RS256' app.config['JWT_PRIVATE_KEY'] = key_data Loading services/register/register_service/controllers/register_controller.py +37 −6 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ from ..core.register_operations import RegisterOperations from ..config import Config from functools import wraps from datetime import datetime, timedelta from ..db.db import MongoDatabse from flask_httpauth import HTTPBasicAuth import jwt Loading Loading @@ -34,7 +35,9 @@ def generate_tokens(username): @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]: client = MongoDatabse() admin = client.get_col_by_name(client.capif_admins).find_one({"admin_name": username, "admin_pass": password}) if admin: return username, "admin" for user in users: if user["username"] == username and user["password"]==password: Loading Loading @@ -84,12 +87,40 @@ def refresh_token(username): @register_routes.route("/createUser", methods=["POST"]) @admin_required() def register(username): username = request.json["username"] password = request.json["password"] description = request.json["description"] email = request.json["email"] required_fields = { "username": str, "password": str, "enterprise": str, "country": str, "email": str, "purpose": str } optional_fields = { "phone_number": str, "company_web": str, "description": str } user_info = request.get_json() missing_fields = [] for field, field_type in required_fields.items(): if field not in user_info: missing_fields.append(field) elif not isinstance(user_info[field], field_type): return jsonify({"error": f"Field '{field}' must be of type {field_type.__name__}"}), 400 for field, field_type in optional_fields.items(): if field in user_info and not isinstance(user_info[field], field_type): return jsonify({"error": f"Optional field '{field}' must be of type {field_type.__name__}"}), 400 if field not in user_info: user_info[field] = None if missing_fields: return jsonify({"error": "Missing required fields", "fields": missing_fields}), 400 return register_operation.register_user(username, password, description, email) return register_operation.register_user(user_info) @register_routes.route("/getauth", methods=["GET"]) @auth.login_required Loading services/register/register_service/core/register_operations.py +5 −4 Original line number Diff line number Diff line Loading @@ -13,17 +13,18 @@ class RegisterOperations: self.mimetype = 'application/json' self.config = Config().get_config() def register_user(self, username, password, description, email): def register_user(self, user_info): mycol = self.db.get_col_by_name(self.db.capif_users) exist_user = mycol.find_one({"username": username}) exist_user = mycol.find_one({"username": user_info["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)) user_uuid = str(uuid.uuid5(name_space,user_info["username"])) user_info = dict(uuid=user_uuid, username=username, password=password, description=description, email=email, onboarding_date=datetime.now()) user_info["uuid"] = user_uuid user_info["onboarding_date"]=datetime.now() obj = mycol.insert_one(user_info) return jsonify(message="User registered successfully", uuid=user_uuid), 201 Loading services/register/register_service/db/db.py +1 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ class MongoDatabse(): self.config = Config().get_config() self.db = self.__connect() self.capif_users = self.config['mongo']['col'] self.capif_admins = self.config['mongo']['admins'] def get_col_by_name(self, name): Loading Loading
services/register/config.yaml +3 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ mongo: { 'password': 'example', 'db': 'capif_users', 'col': 'user', 'admins': 'admins', 'host': 'mongo_register', 'port': '27017' } Loading @@ -16,5 +17,6 @@ register: { register_uuid: '6ba7b810-9dad-11d1-80b4-00c04fd430c8', refresh_expiration: 30, #days token_expiration: 10, #mins admin_users: {admin: "password123"} admin_users: {admin_user: "admin", admin_pass: "password123"} } No newline at end of file
services/register/register_service/__main__.py +6 −3 Original line number Diff line number Diff line import os 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 import jwt from .config import Config from .db.db import MongoDatabse app = Flask(__name__) Loading Loading @@ -73,6 +71,11 @@ response = requests.request("GET", url, headers=headers, verify = False) key_data = json.loads(response.text)["data"]["data"]["key"] # Create an Admin in the Admin Collection client = MongoDatabse() if not client.get_col_by_name(client.capif_admins).find_one({"admin_name": config["register"]["admin_users"]["admin_user"], "admin_pass": config["register"]["admin_users"]["admin_pass"]}): client.get_col_by_name(client.capif_admins).insert_one({"admin_name": config["register"]["admin_users"]["admin_user"], "admin_pass": config["register"]["admin_users"]["admin_pass"]}) app.config['JWT_ALGORITHM'] = 'RS256' app.config['JWT_PRIVATE_KEY'] = key_data Loading
services/register/register_service/controllers/register_controller.py +37 −6 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ from ..core.register_operations import RegisterOperations from ..config import Config from functools import wraps from datetime import datetime, timedelta from ..db.db import MongoDatabse from flask_httpauth import HTTPBasicAuth import jwt Loading Loading @@ -34,7 +35,9 @@ def generate_tokens(username): @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]: client = MongoDatabse() admin = client.get_col_by_name(client.capif_admins).find_one({"admin_name": username, "admin_pass": password}) if admin: return username, "admin" for user in users: if user["username"] == username and user["password"]==password: Loading Loading @@ -84,12 +87,40 @@ def refresh_token(username): @register_routes.route("/createUser", methods=["POST"]) @admin_required() def register(username): username = request.json["username"] password = request.json["password"] description = request.json["description"] email = request.json["email"] required_fields = { "username": str, "password": str, "enterprise": str, "country": str, "email": str, "purpose": str } optional_fields = { "phone_number": str, "company_web": str, "description": str } user_info = request.get_json() missing_fields = [] for field, field_type in required_fields.items(): if field not in user_info: missing_fields.append(field) elif not isinstance(user_info[field], field_type): return jsonify({"error": f"Field '{field}' must be of type {field_type.__name__}"}), 400 for field, field_type in optional_fields.items(): if field in user_info and not isinstance(user_info[field], field_type): return jsonify({"error": f"Optional field '{field}' must be of type {field_type.__name__}"}), 400 if field not in user_info: user_info[field] = None if missing_fields: return jsonify({"error": "Missing required fields", "fields": missing_fields}), 400 return register_operation.register_user(username, password, description, email) return register_operation.register_user(user_info) @register_routes.route("/getauth", methods=["GET"]) @auth.login_required Loading
services/register/register_service/core/register_operations.py +5 −4 Original line number Diff line number Diff line Loading @@ -13,17 +13,18 @@ class RegisterOperations: self.mimetype = 'application/json' self.config = Config().get_config() def register_user(self, username, password, description, email): def register_user(self, user_info): mycol = self.db.get_col_by_name(self.db.capif_users) exist_user = mycol.find_one({"username": username}) exist_user = mycol.find_one({"username": user_info["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)) user_uuid = str(uuid.uuid5(name_space,user_info["username"])) user_info = dict(uuid=user_uuid, username=username, password=password, description=description, email=email, onboarding_date=datetime.now()) user_info["uuid"] = user_uuid user_info["onboarding_date"]=datetime.now() obj = mycol.insert_one(user_info) return jsonify(message="User registered successfully", uuid=user_uuid), 201 Loading
services/register/register_service/db/db.py +1 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ class MongoDatabse(): self.config = Config().get_config() self.db = self.__connect() self.capif_users = self.config['mongo']['col'] self.capif_admins = self.config['mongo']['admins'] def get_col_by_name(self, name): Loading