From 64efa70454f22fd6832bbac31976264d1f51649f Mon Sep 17 00:00:00 2001
From: Pavel Uhanov <pavel.uhanov@demlabs.net>
Date: Mon, 17 Mar 2025 14:16:02 +0300
Subject: [PATCH] [*] add authorized nodes init

---
 modules/net/dap_chain_node_cli.c |  2 +-
 modules/net/dap_chain_node_rpc.c | 25 +++++++++++++++++--------
 2 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index c6e4e6547a..02064b2733 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -66,7 +66,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
     if ( dap_cli_server_init(s_debug_cli, "cli-server") )
         return log_it(L_ERROR, "Can't init CLI server!"), -1;
     if (dap_config_get_item_bool_default(g_config, "cli-server", "rpc", false)) {
-        dap_chain_node_rpc_init();
+        dap_chain_node_rpc_init(g_config);
     }
 
     dap_cli_server_cmd_add("global_db", com_global_db, "Work with global database",
diff --git a/modules/net/dap_chain_node_rpc.c b/modules/net/dap_chain_node_rpc.c
index e3f4bb87a9..40246de0c6 100644
--- a/modules/net/dap_chain_node_rpc.c
+++ b/modules/net/dap_chain_node_rpc.c
@@ -31,12 +31,9 @@
 #include <sys/sysinfo.h>
 #include <sys/vfs.h>
 
-#include "dap_hash.h"
 #include "dap_chain_net.h"
 #include "dap_global_db.h"
-#include "dap_chain_node.h"
-#include "dap_chain_cs_esbocs.h"
-#include "dap_chain_ledger.h"
+#include "dap_stream.h"
 
 #define LOG_TAG "dap_chain_node_rpc"
 #define DAP_CHAIN_NODE_RPC_STATES_INFO_CURRENT_VERSION 1
@@ -68,9 +65,9 @@ static void s_update_node_rpc_states_info(UNUSED_ARG void *a_arg)
     l_info->links_count = dap_stream_get_links_count();
     sysinfo(&l_info->sysinfo);
 
-    // const char *l_node_addr_str = dap_stream_node_addr_to_str_static(l_info->address);
-    // dap_global_db_set_sync(l_gdb_group, l_node_addr_str, l_info, l_info_size, false);
-    // DAP_DELETE(l_info);
+    const char *l_node_addr_str = dap_stream_node_addr_to_str_static(l_info->address);
+    dap_global_db_set_sync(s_rpc_states_group, l_node_addr_str, l_info, sizeof(dap_chain_node_rpc_states_info_t), false);
+    DAP_DELETE(l_info);
 }
 
 static void s_states_info_to_str(dap_chain_net_t *a_net, const char *a_node_addr_str, dap_string_t *l_info_str)
@@ -126,14 +123,26 @@ static void s_states_info_to_str(dap_chain_net_t *a_net, const char *a_node_addr
     // DAP_DELETE(l_node_info);
 }
 
-void dap_chain_node_rpc_init()
+void dap_chain_node_rpc_init(dap_config_t *a_cfg)
 {
     if (!(s_rpc_states_cluster = dap_global_db_cluster_add(
               dap_global_db_instance_get_default(), DAP_STREAM_CLUSTER_GLOBAL,
               *(dap_guuid_t *)&uint128_0, s_rpc_states_group,
               0,
+              true, DAP_GDB_MEMBER_ROLE_USER, DAP_CLUSTER_TYPE_EMBEDDED)))
+        return;
+    if (!(s_rpc_list_cluster = dap_global_db_cluster_add(
+              dap_global_db_instance_get_default(), DAP_STREAM_CLUSTER_GLOBAL,
+              *(dap_guuid_t *)&uint128_0, s_rpc_list_group,
+              0,
               true, DAP_GDB_MEMBER_ROLE_GUEST, DAP_CLUSTER_TYPE_EMBEDDED)))
         return;
+    dap_stream_node_addr_t *l_authorized_nodes = NULL;
+    uint16_t l_authorized_nodes_count = 0;
+    dap_config_stream_addrs_parse(a_cfg, "cli-server", "authorized_nodes_addrs_rpc", &l_authorized_nodes, &l_authorized_nodes_count);
+    for (uint16_t i = 0; i < l_authorized_nodes_count; ++i)
+        dap_global_db_cluster_member_add(s_rpc_list_cluster, l_authorized_nodes + i, DAP_GDB_MEMBER_ROLE_ROOT);
+    DAP_DELETE(l_authorized_nodes);
     if (dap_proc_thread_timer_add(NULL, s_update_node_rpc_states_info, NULL, s_timer_update_states_info))
         log_it(L_ERROR, "Can't activate timer on node states update");
 }
-- 
GitLab