added firewall strategy pattern
This commit is contained in:
40
src/firewall/fwtype.py
Normal file
40
src/firewall/fwtype.py
Normal file
@@ -0,0 +1,40 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Dict, Type
|
||||
|
||||
|
||||
class FWType(ABC):
|
||||
"""Abstract base class for firewall types."""
|
||||
|
||||
# Registry to store child classes
|
||||
_registry: Dict[str, Type['FWType']] = {}
|
||||
|
||||
def __init_subclass__(cls, **kwargs):
|
||||
"""Automatically register subclasses with their class name."""
|
||||
super().__init_subclass__(**kwargs)
|
||||
cls._registry[cls.__name__.lower()] = cls
|
||||
|
||||
@classmethod
|
||||
def create(cls, fw_type: str, **kwargs) -> 'FWType':
|
||||
"""
|
||||
Factory method to create instances of child classes.
|
||||
|
||||
Args:
|
||||
fw_type: String name of the firewall type class to instantiate
|
||||
**kwargs: Arguments to pass to the child class constructor
|
||||
|
||||
Returns:
|
||||
Instance of the requested child class
|
||||
|
||||
Raises:
|
||||
ValueError: If fw_type is not registered
|
||||
"""
|
||||
fw_type = fw_type.lower()
|
||||
if fw_type not in cls._registry:
|
||||
available = ', '.join(cls._registry.keys())
|
||||
raise ValueError(f"Unknown firewall type: '{fw_type}'. Available: {available}")
|
||||
|
||||
return cls._registry[fw_type](**kwargs)
|
||||
|
||||
@abstractmethod
|
||||
def getBanlist(self,ips):
|
||||
"""Return the ruleset for the specific server"""
|
||||
Reference in New Issue
Block a user