Source code for lback.middlewares.security_headers_middleware

import logging
from typing import Optional

from lback.core.base_middleware import BaseMiddleware
from lback.core.types import Request
from lback.core.response import Response
from lback.security.headers import SecurityHeadersConfigurator 


logger = logging.getLogger(__name__)


[docs] class SecurityHeadersMiddleware(BaseMiddleware): """ Middleware to add security headers to responses based on application configuration. Takes a SecurityHeadersConfigurator instance as a dependency. """
[docs] def __init__(self, headers_configurator: SecurityHeadersConfigurator): """ Initializes with a SecurityHeadersConfigurator instance. Args: headers_configurator: An instance of SecurityHeadersConfigurator, configured with application settings (a dependency). """ self.headers_configurator = headers_configurator logger.info("SecurityHeadersMiddleware initialized.")
[docs] def process_request(self, request: Request) -> Optional[Response]: """ Processes the request (this middleware doesn't modify requests). """ logger.debug("SecurityHeadersMiddleware: Processing request (no-op).") return None
[docs] def process_response(self, request: Request, response: Response) -> Response: """ Adds security headers to the response by getting them from the configurator. """ logger.debug(f"SecurityHeadersMiddleware: Processing response (status: {response.status_code}).") headers_to_add = self.headers_configurator.get_headers() if hasattr(response, 'headers') and isinstance(response.headers, dict): response.headers.update(headers_to_add) logger.debug("SecurityHeadersMiddleware: Added security headers to response.") elif hasattr(response, 'headers') and isinstance(response.headers, list): logger.warning("SecurityHeadersMiddleware: Response headers is a list, cannot update directly with update(). Skipping header addition.") else: logger.error("SecurityHeadersMiddleware: Response object does not have a 'headers' attribute or it's not a dictionary. Cannot add security headers.") logger.debug("SecurityHeadersMiddleware: Finished processing response.") return response