Skip to content

Commit

Permalink
Added secure logger
Browse files Browse the repository at this point in the history
  • Loading branch information
sergism77 committed Jan 5, 2025
1 parent a43429f commit 6860b9a
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 20 deletions.
30 changes: 10 additions & 20 deletions src/crypto/cbor_utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# src/crypto/cbor_utils.py

import logging
import uuid
from datetime import datetime, timezone
Expand All @@ -10,18 +8,16 @@
from src.crypto.helpers import decode_from_senary, encode_to_senary, is_senary
from src.seigr_protocol.compiled.alerting_pb2 import Alert, AlertSeverity, AlertType
from src.seigr_protocol.compiled.encryption_pb2 import EncryptedData
from src.seigr_protocol.compiled.common_pb2 import Severity
from src.logger.base_logger import base_logger

logger = logging.getLogger(__name__)


# 🛡️ Alert Trigger
def _trigger_alert(message: str, severity: int) -> None:
def _trigger_alert(message: str, severity: AlertSeverity) -> None:
"""
Triggers an alert event with structured logging and protobuf compliance.
Triggers an alert event with structured logging and protocol compliance.
"""
severity_enum = AlertSeverity.Name(severity) if severity in AlertSeverity.values() else "ALERT_SEVERITY_UNSPECIFIED"
alert = Alert(
alert_id=f"{SEIGR_CELL_ID_PREFIX}_{uuid.uuid4()}",
message=message,
Expand All @@ -34,14 +30,13 @@ def _trigger_alert(message: str, severity: int) -> None:
"%s Alert triggered: %s with severity %s",
SEIGR_CELL_ID_PREFIX,
alert.message,
severity_enum,
AlertSeverity.Name(severity),
)
base_logger.log_message(
level="CRITICAL",
level='CRITICAL' if severity == AlertSeverity.ALERT_SEVERITY_CRITICAL else 'WARNING',
message=message,
category="Alert",
sensitive=False,
severity=Severity.SEVERITY_CRITICAL
sensitive=False
)


Expand Down Expand Up @@ -74,8 +69,7 @@ def encode_data(data, use_senary=False) -> EncryptedData:
level='INFO',
message='Data successfully encoded to CBOR format',
category='Encode',
sensitive=False,
severity=Severity.SEVERITY_INFO
sensitive=False
)
return EncryptedData(ciphertext=encoded)
except Exception as e:
Expand All @@ -93,8 +87,7 @@ def decode_data(encrypted_data: EncryptedData, use_senary=False):
level='ERROR',
message='Invalid EncryptedData object for decoding',
category='Decode',
sensitive=False,
severity=Severity.SEVERITY_ERROR
sensitive=False
)
raise ValueError("Invalid EncryptedData object for decoding")

Expand All @@ -104,8 +97,7 @@ def decode_data(encrypted_data: EncryptedData, use_senary=False):
level='INFO',
message='Data successfully decoded from CBOR format',
category='Decode',
sensitive=False,
severity=Severity.SEVERITY_INFO
sensitive=False
)
return decoded
except cbor2.CBORDecodeError as e:
Expand All @@ -129,8 +121,7 @@ def save_to_file(data, file_path, use_senary=False):
level='INFO',
message=f'Data successfully saved to file: {file_path}',
category='FileIO',
sensitive=False,
severity=Severity.SEVERITY_INFO
sensitive=False
)
except Exception as e:
_trigger_alert(f"Failed to save data to file: {file_path}. Error: {str(e)}", AlertSeverity.ALERT_SEVERITY_CRITICAL)
Expand All @@ -150,8 +141,7 @@ def load_from_file(file_path: str):
level='INFO',
message=f'Data successfully loaded from file: {file_path}',
category='FileIO',
sensitive=False,
severity=Severity.SEVERITY_INFO
sensitive=False
)
return decoded_data
except Exception as e:
Expand Down
79 changes: 79 additions & 0 deletions src/logger/secure_logger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import uuid
from datetime import datetime, timezone

from src.logger.base_logger import base_logger
from src.seigr_protocol.compiled.alerting_pb2 import Alert, AlertSeverity, AlertType


class SecureLogger:
"""
Secure Logger for handling structured audit logging across critical paths.
Uses Seigr's Alert protocol definitions for audit events.
"""
def __init__(self):
self.logger = base_logger

def log_audit_event(self, severity: int, category: str, message: str, sensitive: bool = False, use_senary: bool = False):
"""
Logs an audit event with structured metadata compliant with Seigr's Alert schema.
Args:
severity (int): AlertSeverity level.
category (str): Audit category (e.g., Encode, Decode, FileIO).
message (str): Audit log message.
sensitive (bool): Flag indicating if sensitive data is involved.
use_senary (bool): Flag indicating if senary encoding is used.
"""
alert = Alert(
alert_id=str(uuid.uuid4()),
type=AlertType.ALERT_TYPE_SYSTEM,
severity=AlertSeverity(severity),
message=message,
timestamp=datetime.now(timezone.utc).isoformat(),
source_component=category,
metadata={
"sensitive": str(sensitive),
"use_senary": str(use_senary)
}
)

# Map severity levels to logging methods
if severity == AlertSeverity.ALERT_SEVERITY_INFO:
self.logger.log_message(
level='INFO',
message=message,
category=category,
sensitive=sensitive
)
elif severity == AlertSeverity.ALERT_SEVERITY_WARNING:
self.logger.log_message(
level='WARNING',
message=message,
category=category,
sensitive=sensitive
)
elif severity == AlertSeverity.ALERT_SEVERITY_CRITICAL:
self.logger.log_message(
level='CRITICAL',
message=message,
category=category,
sensitive=sensitive
)
elif severity == AlertSeverity.ALERT_SEVERITY_FATAL:
self.logger.log_message(
level='ERROR',
message=message,
category=category,
sensitive=sensitive
)
else:
self.logger.log_message(
level='DEBUG',
message=message,
category=category,
sensitive=sensitive
)


# Singleton Instance
secure_logger = SecureLogger()

0 comments on commit 6860b9a

Please sign in to comment.