From 3d4d54d506e6656fbe9fc79bc2cbc11ab1bde6e0 Mon Sep 17 00:00:00 2001
From: Dmitriy Naidolinskiy <dmitriy.naidolinskiy@demlabs.net>
Date: Fri, 31 Dec 2021 13:40:49 +0000
Subject: [PATCH] Feature 5271

---
 dap-sdk/net/server/enc_server/dap_enc_http.c    | 17 +++++++++++++++++
 .../server/enc_server/include/dap_enc_http.h    |  2 ++
 .../net/server/enc_server/include/dap_enc_ks.h  |  1 +
 modules/net/dap_chain_net.c                     |  4 ++++
 4 files changed, 24 insertions(+)

diff --git a/dap-sdk/net/server/enc_server/dap_enc_http.c b/dap-sdk/net/server/enc_server/dap_enc_http.c
index 69f6104fcc..ebef39fd58 100644
--- a/dap-sdk/net/server/enc_server/dap_enc_http.c
+++ b/dap-sdk/net/server/enc_server/dap_enc_http.c
@@ -53,6 +53,14 @@
 #define LOG_TAG "dap_enc_http"
 
 static dap_enc_acl_callback_t s_acl_callback = NULL;
+static dap_enc_acl_callback_t s_acl_params_callback = NULL;
+
+
+void dap_enc_http_set_acl_params_callback(dap_enc_acl_callback_t a_callback)
+{
+    s_acl_params_callback = a_callback;
+}
+
 
 int enc_http_init()
 {
@@ -144,6 +152,15 @@ void enc_http_proc(struct dap_http_simple *cl_st, void * arg)
         } else {
             log_it(L_DEBUG, "Callback for ACL is not set, pass anauthorized");
         }
+		if (s_acl_params_callback) {
+			if (!l_enc_key_ks->acl_bugreport)
+				l_enc_key_ks->acl_bugreport = s_acl_params_callback(&l_sign_hash);
+			else {
+				if (l_enc_key_ks->acl_bugreport[0] == false) {
+					l_enc_key_ks->acl_bugreport = s_acl_params_callback(&l_sign_hash);
+				}
+			}
+		}
 
         char encrypt_msg[DAP_ENC_BASE64_ENCODE_SIZE(l_pkey_exchange_key->pub_key_data_size) + 1];
         size_t encrypt_msg_size = dap_enc_base64_encode(l_pkey_exchange_key->pub_key_data, l_pkey_exchange_key->pub_key_data_size, encrypt_msg, DAP_ENC_DATA_TYPE_B64);
diff --git a/dap-sdk/net/server/enc_server/include/dap_enc_http.h b/dap-sdk/net/server/enc_server/include/dap_enc_http.h
index 4660b52509..ea12e4dca6 100644
--- a/dap-sdk/net/server/enc_server/include/dap_enc_http.h
+++ b/dap-sdk/net/server/enc_server/include/dap_enc_http.h
@@ -82,4 +82,6 @@ void enc_http_delegate_delete(enc_http_delegate_t * dg);
 
 void enc_http_add_proc(struct dap_http * sh, const char * url);
 
+void dap_enc_http_set_acl_params_callback(dap_enc_acl_callback_t a_callback);
+
 #endif
diff --git a/dap-sdk/net/server/enc_server/include/dap_enc_ks.h b/dap-sdk/net/server/enc_server/include/dap_enc_ks.h
index 07c51b19ec..430a059e83 100644
--- a/dap-sdk/net/server/enc_server/include/dap_enc_ks.h
+++ b/dap-sdk/net/server/enc_server/include/dap_enc_ks.h
@@ -36,6 +36,7 @@ typedef struct dap_enc_ks_key{
     time_t time_created;
     pthread_mutex_t mutex;
     uint8_t *acl_list;
+	uint8_t *acl_bugreport;
     UT_hash_handle hh; // makes this structure hashable with UTHASH library
 } dap_enc_ks_key_t;
 
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 3d09271931..f5648db51d 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -117,6 +117,7 @@ static size_t s_max_links_count = 5;// by default 5
 static size_t s_required_links_count = 3;// by default 3
 static bool s_debug_more = false;
 
+
 struct link_dns_request {
     uint32_t link_id;
     dap_chain_net_t * net;
@@ -255,6 +256,8 @@ static int s_cli_net(int argc, char ** argv, char **str_reply);
 static bool s_seed_mode = false;
 
 static uint8_t *dap_chain_net_set_acl(dap_chain_hash_fast_t *a_pkey_hash);
+uint8_t *dap_chain_net_set_acl_param(dap_chain_hash_fast_t *a_pkey_hash);
+
 
 static dap_global_db_obj_callback_notify_t s_srv_callback_notify = NULL;
 
@@ -303,6 +306,7 @@ int dap_chain_net_init()
     dap_chain_net_load_all();
 
     dap_enc_http_set_acl_callback(dap_chain_net_set_acl);
+
     log_it(L_NOTICE,"Chain networks initialized");
     return 0;
 }
-- 
GitLab