From e43eb563a1fc57773db412d90ebcc8b704ef45f9 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 4 Nov 2022 17:02:39 +0000
Subject: [PATCH] WebUI component:

- updated cookie name to prevent cross-instance session data leakage. otherwise, selected topology in one instance, is used in other instances.
- added Slice component as a dependency of WebUI
---
 src/webui/service/__main__.py | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/webui/service/__main__.py b/src/webui/service/__main__.py
index c194be4bc..ddbda9c51 100644
--- a/src/webui/service/__main__.py
+++ b/src/webui/service/__main__.py
@@ -12,15 +12,22 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import os, sys, logging
+import hashlib, sys, logging
 from prometheus_client import start_http_server
 from common.Constants import ServiceNameEnum
 from common.Settings import (
-    ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, get_env_var_name, get_log_level, get_metrics_port, get_service_baseurl_http,
-    get_service_port_http, get_setting, wait_for_environment_variables)
+    ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, get_env_var_name, get_log_level, get_metrics_port,
+    get_service_baseurl_http, get_service_port_http, get_setting, wait_for_environment_variables)
 from webui.service import create_app
 from webui.Config import MAX_CONTENT_LENGTH, HOST, SECRET_KEY, DEBUG
 
+def create_unique_session_cookie_name() -> str:
+    hostname = get_setting('HOSTNAME')
+    if hostname is None: return 'session'
+    hasher = hashlib.blake2b(digest_size=8)
+    hasher.update(hostname.encode('UTF-8'))
+    return 'session:{:s}'.format(str(hasher.hexdigest()))
+
 def main():
     log_level = get_log_level()
     logging.basicConfig(level=log_level)
@@ -33,6 +40,8 @@ def main():
         get_env_var_name(ServiceNameEnum.DEVICE,  ENVVAR_SUFIX_SERVICE_PORT_GRPC),
         get_env_var_name(ServiceNameEnum.SERVICE, ENVVAR_SUFIX_SERVICE_HOST     ),
         get_env_var_name(ServiceNameEnum.SERVICE, ENVVAR_SUFIX_SERVICE_PORT_GRPC),
+        get_env_var_name(ServiceNameEnum.SLICE,   ENVVAR_SUFIX_SERVICE_HOST     ),
+        get_env_var_name(ServiceNameEnum.SLICE,   ENVVAR_SUFIX_SERVICE_PORT_GRPC),
     ])
 
     logger.info('Starting...')
@@ -49,6 +58,7 @@ def main():
     app = create_app(use_config={
         'SECRET_KEY': SECRET_KEY,
         'MAX_CONTENT_LENGTH': MAX_CONTENT_LENGTH,
+        'SESSION_COOKIE_NAME': create_unique_session_cookie_name(),
     }, web_app_root=web_app_root)
     app.run(host=host, port=service_port, debug=debug)
 
-- 
GitLab