Commit 6c8f13b5 authored by guillecxb's avatar guillecxb
Browse files

Added CAPIF configuration to MongoDB and integrated security method order selection

parent 225caba9
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -182,8 +182,21 @@ class SecurityOperations(Resource):
                        "Not found comptaible security method with pref security method")
                    return bad_request_error(detail="Not found compatible security method with pref security method", cause="Error pref security method", invalid_params=[{"param": "prefSecurityMethods", "reason": "pref security method not compatible with security method available"}])

                service_instance.sel_security_method = list(
                    valid_security_method)[0]
                # Retrieve security method priority configuration from the database
                config_col = self.db.get_col_by_name("capifConfiguration")
                capif_config = config_col.find_one({"config_name": "default"})
                if not capif_config:
                    current_app.logger.error("CAPIF Configuration not found when trying to retrieve security method priority")
                    return internal_server_error(detail="CAPIF Configuration not found when trying to retrieve security method priority", cause="Database Error")

                priority_mapping = capif_config["settings"]["security_method_priority"]

                # Sort valid security methods based on priority from the configuration
                sorted_methods = sorted(valid_security_method, key=lambda method: priority_mapping.get(method.lower(), float('inf')))

                # Select the highest-priority security method
                service_instance.sel_security_method = sorted_methods[0]

                # Send service instance to ACL
                current_app.logger.debug("Sending message to create ACL")
                publish_ops.publish_message("acls-messages", "create-acl:"+str(
+16 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ mongo: {
  'col_services': "serviceapidescriptions",
  'col_security': "security",
  'col_event': "eventsdetails",
  'col_capifConfiguration': "capifConfiguration",
  'host': 'mongo',
  'port': "27017"
}
@@ -17,3 +18,18 @@ ca_factory: {
  "token": "dev-only-token",
  "verify": False
}

capifConfiguration: {
  config_name: "default",
  version: "1.0",
  description: "Default CAPIF Configuration",
  settings: {
    certify_expiration_period: 30,
    acls_size_configuration: 24,
    security_method_priority: {
      psk: 1,
      pki: 2,
      oauth: 3
    }
  }
}
+19 −0
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@ class MongoDatabse():
        self.services_col = self.config['mongo']['col_services']
        self.security_context_col = self.config['mongo']['col_security']
        self.events = self.config['mongo']['col_event']
        self.capifConfiguration = self.config['mongo']['col_capifConfiguration']

        self.initialize_capif_configuration()


    def get_col_by_name(self, name):
@@ -45,3 +48,19 @@ class MongoDatabse():
        if self.db.client:
            self.db.client.close()

    def initialize_capif_configuration(self):
        """
        Inserts default data into the capifConfiguration collection if it is empty.
        The data is taken from config.yaml.
        """
        capif_col = self.get_col_by_name(self.capifConfiguration)

        if capif_col.count_documents({}) == 0:
            # Read configuration from config.yaml
            default_config = self.config["capifConfiguration"]

            capif_col.insert_one(default_config)
            print("Default data inserted into the capifConfiguration collection from config.yaml")
        else:
            print("The capifConfiguration collection already contains data. No default values were inserted.")