Commit 6a4dbeda authored by Jorge Moratinos's avatar Jorge Moratinos
Browse files

Merge branch 'OCF43-update-register-service' into 'staging'

Changes in Register

See merge request !27
parents 56fefdf6 59a3bfc4
Loading
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ mongo: {
  'password': 'example',
  'db': 'capif_users',
  'col': 'user',
  'admins': 'admins',
  'host': 'mongo_register',
  'port': '27017'
}
@@ -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
+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__)

@@ -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
+37 −6
Original line number Diff line number Diff line
@@ -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
@@ -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:
@@ -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
+5 −4
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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