From 168d66d16741a95895a5ccf8bfc27fb10d3927c8 Mon Sep 17 00:00:00 2001
From: ValueOn AG
Date: Mon, 22 Sep 2025 00:39:15 +0200
Subject: [PATCH] cleaned key handling and security
---
app.py | 96 +-
config.ini | 42 -
.../audio_google_interpreter_recording.webm | Bin 118148 -> 0 bytes
env_dev.env | 69 +-
env_int.env | 47 +-
env_prod.env | 46 +-
modules/chat/documents/documentExtraction.py | 2 +-
modules/chat/documents/documentGeneration.py | 2 +-
modules/chat/handling/handlingTasks.py | 114 +-
modules/chat/handling/promptFactory.py | 67 +-
modules/chat/managerChat.py | 13 +-
modules/chat/serviceCenter.py | 184 +--
modules/connectors/connectorGoogleSpeech.py | 4 +-
modules/connectors/connectorWebTavily.py | 4 +-
.../featureChatPlayground.py} | 7 +-
.../featureNeutralizePlayground.py} | 0
.../featureSyncDelta.py} | 0
modules/interfaces/interfaceChatObjects.py | 2 +-
modules/methods/methodAi.py | 2 +-
modules/{chat => methods}/methodBase.py | 0
modules/methods/methodDocument.py | 2 +-
modules/methods/methodOutlook.py | 2 +-
modules/methods/methodSharepoint.py | 2 +-
modules/methods/methodWeb.py | 2 +-
modules/neutralizer/neutralizer.py | 506 +------
modules/neutralizer/readme.md | 91 ++
modules/neutralizer/subParseString.py | 162 +++
.../{patterns.py => subPatterns.py} | 0
modules/neutralizer/subProcessBinary.py | 101 ++
modules/neutralizer/subProcessCommon.py | 143 ++
modules/neutralizer/subProcessList.py | 279 ++++
modules/neutralizer/subProcessText.py | 101 ++
modules/routes/routeDataFiles.py | 2 +-
modules/routes/routeSecurityGoogle.py | 14 +
modules/routes/routeSecurityLocal.py | 40 +
modules/routes/routeSecurityMsft.py | 14 +
modules/routes/routeVoiceGoogle.py | 12 +-
modules/security/auth.py | 2 +-
modules/shared/auditLogger.py | 202 +++
modules/shared/configuration.py | 373 ++++-
notes/changelog.txt | 1206 -----------------
notes/produce_diagrams.md | 48 -
notes/readme.md | 39 -
query | 1 -
requirements.txt | 1 +
test_excel_fix.py | 77 --
tool_security_encrypt_config_value.py | 375 +++++
...log.py => tool_stats_durations_from_log.py | 0
...getStats.py => tool_stats_get_codelines.py | 0
...ns.py => tool_stats_showUnusedFunctions.py | 0
tools_security_generate_master_keys.py | 89 ++
51 files changed, 2468 insertions(+), 2119 deletions(-)
delete mode 100644 debug_audio/audio_google_interpreter_recording.webm
rename modules/{services/serviceValueonChat.py => features/featureChatPlayground.py} (98%)
rename modules/{services/serviceNeutralization.py => features/featureNeutralizePlayground.py} (100%)
rename modules/{services/serviceDeltaSync.py => features/featureSyncDelta.py} (100%)
rename modules/{chat => methods}/methodBase.py (100%)
create mode 100644 modules/neutralizer/readme.md
create mode 100644 modules/neutralizer/subParseString.py
rename modules/neutralizer/{patterns.py => subPatterns.py} (100%)
create mode 100644 modules/neutralizer/subProcessBinary.py
create mode 100644 modules/neutralizer/subProcessCommon.py
create mode 100644 modules/neutralizer/subProcessList.py
create mode 100644 modules/neutralizer/subProcessText.py
create mode 100644 modules/shared/auditLogger.py
delete mode 100644 notes/changelog.txt
delete mode 100644 notes/produce_diagrams.md
delete mode 100644 notes/readme.md
delete mode 100644 query
delete mode 100644 test_excel_fix.py
create mode 100644 tool_security_encrypt_config_value.py
rename tool_durations_from_log.py => tool_stats_durations_from_log.py (100%)
rename tool_getStats.py => tool_stats_get_codelines.py (100%)
rename tool_showUnusedFunctions.py => tool_stats_showUnusedFunctions.py (100%)
create mode 100644 tools_security_generate_master_keys.py
diff --git a/app.py b/app.py
index ad932e9a..cade2e7c 100644
--- a/app.py
+++ b/app.py
@@ -8,19 +8,79 @@ from zoneinfo import ZoneInfo
import logging
from logging.handlers import RotatingFileHandler
-from datetime import timedelta
+from datetime import timedelta, datetime
import pathlib
from modules.shared.configuration import APP_CONFIG
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.cron import CronTrigger
+
+class DailyRotatingFileHandler(RotatingFileHandler):
+ """
+ A rotating file handler that automatically switches to a new file when the date changes.
+ The log file name includes the current date and switches at midnight.
+ """
+
+ def __init__(self, log_dir, filename_prefix, max_bytes=10485760, backup_count=5, **kwargs):
+ self.log_dir = log_dir
+ self.filename_prefix = filename_prefix
+ self.current_date = None
+ self.current_file = None
+
+ # Initialize with today's file
+ self._update_file_if_needed()
+
+ # Call parent constructor with current file
+ super().__init__(self.current_file, maxBytes=max_bytes, backupCount=backup_count, **kwargs)
+
+ def _update_file_if_needed(self):
+ """Update the log file if the date has changed"""
+ today = datetime.now().strftime("%Y%m%d")
+
+ if self.current_date != today:
+ self.current_date = today
+ new_file = os.path.join(self.log_dir, f"{self.filename_prefix}_{today}.log")
+
+ if self.current_file != new_file:
+ self.current_file = new_file
+ return True
+ return False
+
+ def emit(self, record):
+ """Emit a log record, switching files if date has changed"""
+ # Check if we need to switch to a new file
+ if self._update_file_if_needed():
+ # Close current file and open new one
+ if self.stream:
+ self.stream.close()
+ self.stream = None
+
+ # Update the baseFilename for the parent class
+ self.baseFilename = self.current_file
+ # Reopen the stream
+ if not self.delay:
+ self.stream = self._open()
+
+ # Call parent emit method
+ super().emit(record)
+
def initLogging():
"""Initialize logging with configuration from APP_CONFIG"""
# Get log level from config (default to INFO if not found)
logLevelName = APP_CONFIG.get("APP_LOGGING_LOG_LEVEL", "WARNING")
logLevel = getattr(logging, logLevelName)
+ # Get log directory from config
+ logDir = APP_CONFIG.get("APP_LOGGING_LOG_DIR", "./")
+ if not os.path.isabs(logDir):
+ # If relative path, make it relative to the gateway directory
+ gatewayDir = os.path.dirname(os.path.abspath(__file__))
+ logDir = os.path.join(gatewayDir, logDir)
+
+ # Ensure log directory exists
+ os.makedirs(logDir, exist_ok=True)
+
# Create formatters - using single line format
consoleFormatter = logging.Formatter(
fmt="%(asctime)s - %(levelname)s - %(name)s - %(message)s",
@@ -89,25 +149,15 @@ def initLogging():
# Add file handler if enabled
if APP_CONFIG.get("APP_LOGGING_FILE_ENABLED", True):
- # Get log file path and ensure it's absolute
- logFile = APP_CONFIG.get("APP_LOGGING_LOG_FILE", "app.log")
- if not os.path.isabs(logFile):
- # If relative path, make it relative to the gateway directory
- gatewayDir = os.path.dirname(os.path.abspath(__file__))
- logFile = os.path.join(gatewayDir, logFile)
-
- # Ensure log directory exists
- logDir = os.path.dirname(logFile)
- if logDir:
- os.makedirs(logDir, exist_ok=True)
-
+ # Create daily application log file with automatic date switching
rotationSize = int(APP_CONFIG.get("APP_LOGGING_ROTATION_SIZE", 10485760)) # Default: 10MB
backupCount = int(APP_CONFIG.get("APP_LOGGING_BACKUP_COUNT", 5))
- fileHandler = RotatingFileHandler(
- logFile,
- maxBytes=rotationSize,
- backupCount=backupCount
+ fileHandler = DailyRotatingFileHandler(
+ log_dir=logDir,
+ filename_prefix="log_app",
+ max_bytes=rotationSize,
+ backup_count=backupCount
)
fileHandler.setFormatter(fileFormatter)
fileHandler.addFilter(ChromeDevToolsFilter())
@@ -133,7 +183,15 @@ def initLogging():
# Log the current logging configuration
logger = logging.getLogger(__name__)
logger.info(f"Logging initialized with level {logLevelName}")
- logger.info(f"Log file: {logFile if APP_CONFIG.get('APP_LOGGING_FILE_ENABLED', True) else 'disabled'}")
+ logger.info(f"Log directory: {logDir}")
+
+ if APP_CONFIG.get('APP_LOGGING_FILE_ENABLED', True):
+ today = datetime.now().strftime("%Y%m%d")
+ appLogFile = os.path.join(logDir, f"log_app_{today}.log")
+ logger.info(f"Application log file: {appLogFile} (auto-switches daily)")
+ else:
+ logger.info("Application log file: disabled")
+
logger.info(f"Console logging: {'enabled' if APP_CONFIG.get('APP_LOGGING_CONSOLE_ENABLED', True) else 'disabled'}")
# Initialize logging
@@ -154,7 +212,7 @@ async def lifespan(app: FastAPI):
# Setup APScheduler for JIRA sync
scheduler = AsyncIOScheduler(timezone=ZoneInfo("Europe/Zurich"))
try:
- from modules.services.serviceDeltaSync import perform_sync_jira_delta_group
+ from modules.features.featureSyncDelta import perform_sync_jira_delta_group
# Schedule sync every 20 minutes (at minutes 00, 20, 40)
scheduler.add_job(
perform_sync_jira_delta_group,
diff --git a/config.ini b/config.ini
index bc8aeb7f..780a9e08 100644
--- a/config.ini
+++ b/config.ini
@@ -5,21 +5,6 @@
Auth_ALGORITHM = HS256
Auth_TOKEN_TYPE = bearer
-# OpenAI configuration
-Connector_AiOpenai_API_URL = https://api.openai.com/v1/chat/completions
-Connector_AiOpenai_API_SECRET = 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
-Connector_AiOpenai_MODEL_NAME = gpt-4o
-Connector_AiOpenai_TEMPERATURE = 0.2
-Connector_AiOpenai_MAX_TOKENS = 2000
-
-# Anthropic configuration
-Connector_AiAnthropic_API_URL = https://api.anthropic.com/v1/messages
-Connector_AiAnthropic_API_SECRET_OLD = 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
-Connector_AiAnthropic_API_SECRET = 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
-Connector_AiAnthropic_MODEL_NAME = claude-3-5-sonnet-20241022
-Connector_AiAnthropic_TEMPERATURE = 0.2
-Connector_AiAnthropic_MAX_TOKENS = 2000
-
# File management configuration
File_Management_MAX_UPLOAD_SIZE_MB = 50
File_Management_CLEANUP_INTERVAL = 240
@@ -36,33 +21,6 @@ Security_LOCK_DURATION_MINUTES = 30
# Content Neutralization configuration
Content_Neutralization_ENABLED = False
-# Agent Mail configuration
-Service_MSFT_CLIENT_ID = c7e7112d-61dc-4f3a-8cd3-08cc4cd7504c
-Service_MSFT_CLIENT_SECRET = Kxf8Q~2lJIteZ~JaI32kMf1lfaWKATqxXiNiFbzV
-Service_MSFT_TENANT_ID = common
-
-# Google Service configuration
-Service_GOOGLE_CLIENT_ID = 354925410565-aqs2b2qaiqmm73qpjnel6al8eid78uvg.apps.googleusercontent.com
-Service_GOOGLE_CLIENT_SECRET = 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
-
-# Tavily Web Search configuration
-Connector_WebTavily_API_KEY = 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
-
-# Google Cloud Speech Services configuration
-Connector_GoogleSpeech_API_KEY = {
- "type": "service_account",
- "project_id": "poweronid",
- "private_key_id": "88db66e4248326e9baeac4231bc196fd46a9a441",
- "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDTnJuxA+xBL3LA\nPgFILYCsGuppkkdO6d153Q36f2jTj6zpH3OhKMVsaaTBknG2o2+D0Whlk6Yh5rOw\nkWzpMC3y81leRLm5kucERMkBUgd2GL4v16k6m+QGuC3BFlt/XeyuckJNW0V6v/Dy\n3+bSYM7/5o1ftPNWJeAIEWoE/V4wKCYde8RE4Vp1LO5YwhgcM4rRuPmF2OhekpA+\npteYwkY/8/gTTRpZIc8OTsBYRbaMwsjoDj5riuL3boVtkwZwKRb+ZLvupXeU7Ds7\n1305odTcZUwnImHiHfuq83ZJViQiLRNhUAFnQIXPrYLwEpCmzRBGzYHaRlb69ga/\nzqUbKnclAgMBAAECggEAH6W9qHehubioPMAJM7Y6bC2KU/JLNS4csBZd+idb52gG\nwBwIEFjR+H4ZjymhAA4+pe7c4h7MKyh0RI/l7eoFX98Cb+rEq/r1udm1BhGH3s2h\n2UiI8qRQh1YRjF2/nrN5VjhDBOFa6W9opaopZy/l8AzsT8f21zIgPen8z8o6GpFg\n64fJFcbqCGk2ykN2+x2pIOT04tmCszrfbXZP8LEs4xrUB/XwlHL1vT/M3EWIKbnj\njDaIMjw7q/KRgNUvmKS6SU9b3fnOLcQCz9f5cKdiWACKIU/UvuiWhWJ9ou6BWLWU\nva1A6Fi4XJjhW7s3po58/ioQfl0A9p/L92lGg4ST8QKBgQDx8LIM1g0dh9Ql6LmH\nBUGCOewNNXTs+y3ZznUfvVMoyyZK5w/pzeUvkmOwzbRGnZJ9WyCghq8aezyEpo2D\nPL7Odf988IeHmvhyZIM4PLJYgDvSwGXyf/gh6gJkf/4wpx+tx/yQYNBm3Rht7sA0\npSaLehK0E0kW1uyBzHGKgyQOhwKBgQDf6LiZ7hSQqh54vIU1XMDRth0UOo/s/HGi\nDoij29KjmHjLkm8vOlCo83e79X0WhcnyB5kM7nWFegwcM1PJ0Dl8gidUuTlOVDtM\n5u2AaxDoyXAUL457U5dGFAIW+R653ZDkzMfCglacP8HixXEyIpL1cTLqiCAgzszS\nLcSWwoAr8wKBgQC4CGm3X97sFpTmHSd6sCHLaDnJNl9xoAKZifUHpqCqCBVhpm8x\nXp+11vmj1GULzfJPDlE8Khbp4tH+6R39tOhC7fjgVaoSGWxgv1odHfZfYXOf9R/X\nHUZmrbUSM1XsNkPfkZ7pR+teQ1HA1Xo40WMHd1zgw0a2a9fNR/EZ9nUn4wKBgGaK\nUEgGNRrPHadTRnnaoV8o1IZYD2OLdIqvtzm7SOqsv90SkaKCRUAqR5InaYKwAHy7\nqAa5Cc73xqX/h4arujff7x0ouiq5/nJIa0ndPmAtKAvGf6zQ6j0ompBkxAKAioON\nmInmYL2roSI2I5G/LagDkDrB3lzH+Brk5NvZ9RKrAoGAGox462GGGb/NbGdDkahN\ndifzYYvq4FPiWFFo0ynKAulxCBWLXO/N45XNuAyen433d8eREcAYz1Dzax44+MdQ\nHo9dU7YcZvFyt6iZsYeQF8dluHui3vzMpUe0KbqpZC5KMOSw53ZdNIwzo8NTAK59\n+uv3dHGj7sS8fhDo3yCifzc=\n-----END PRIVATE KEY-----\n",
- "client_email": "poweron-voice-services@poweronid.iam.gserviceaccount.com",
- "client_id": "116641749406798186404",
- "auth_uri": "https://accounts.google.com/o/oauth2/auth",
- "token_uri": "https://oauth2.googleapis.com/token",
- "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
- "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/poweron-voice-services%40poweronid.iam.gserviceaccount.com",
- "universe_domain": "googleapis.com"
-}
-
# Web Search configuration
Web_Search_MAX_QUERY_LENGTH = 400
Web_Search_MAX_RESULTS = 20
diff --git a/debug_audio/audio_google_interpreter_recording.webm b/debug_audio/audio_google_interpreter_recording.webm
deleted file mode 100644
index 862174f4080e3d2df23dc43a6f6d2bcd4a9f9539..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 118148
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