feat: allow 'all' for policy source and destination zones
This commit is contained in:
@@ -72,16 +72,16 @@ class Policy(Base):
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||||
config_id: Mapped[int] = mapped_column(Integer, ForeignKey("configs.id"), nullable=False)
|
||||
src_zone_id: Mapped[int] = mapped_column(Integer, ForeignKey("zones.id"), nullable=False)
|
||||
dst_zone_id: Mapped[int] = mapped_column(Integer, ForeignKey("zones.id"), nullable=False)
|
||||
src_zone_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("zones.id"), nullable=True)
|
||||
dst_zone_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("zones.id"), nullable=True)
|
||||
policy: Mapped[str] = mapped_column(String(16), nullable=False)
|
||||
log_level: Mapped[str] = mapped_column(String(16), default="")
|
||||
comment: Mapped[str] = mapped_column(Text, default="")
|
||||
position: Mapped[int] = mapped_column(Integer, default=0)
|
||||
|
||||
config: Mapped["Config"] = relationship("Config", back_populates="policies")
|
||||
src_zone: Mapped["Zone"] = relationship("Zone", foreign_keys=[src_zone_id])
|
||||
dst_zone: Mapped["Zone"] = relationship("Zone", foreign_keys=[dst_zone_id])
|
||||
src_zone: Mapped["Zone | None"] = relationship("Zone", foreign_keys=[src_zone_id])
|
||||
dst_zone: Mapped["Zone | None"] = relationship("Zone", foreign_keys=[dst_zone_id])
|
||||
|
||||
|
||||
class Rule(Base):
|
||||
|
||||
@@ -89,8 +89,8 @@ class InterfaceOut(BaseModel):
|
||||
|
||||
# --- Policy ---
|
||||
class PolicyCreate(BaseModel):
|
||||
src_zone_id: int
|
||||
dst_zone_id: int
|
||||
src_zone_id: Optional[int] = None
|
||||
dst_zone_id: Optional[int] = None
|
||||
policy: str
|
||||
log_level: str = ""
|
||||
comment: str = ""
|
||||
@@ -109,8 +109,8 @@ class PolicyUpdate(BaseModel):
|
||||
class PolicyOut(BaseModel):
|
||||
id: int
|
||||
config_id: int
|
||||
src_zone_id: int
|
||||
dst_zone_id: int
|
||||
src_zone_id: Optional[int]
|
||||
dst_zone_id: Optional[int]
|
||||
policy: str
|
||||
log_level: str
|
||||
comment: str
|
||||
|
||||
@@ -35,7 +35,9 @@ class ShorewallGenerator:
|
||||
def policy(self) -> str:
|
||||
lines = [self._header("policy"), "#SOURCE".ljust(16) + "DEST".ljust(16) + "POLICY".ljust(16) + "LOG LEVEL\n"]
|
||||
for p in sorted(self._config.policies, key=lambda x: x.position):
|
||||
lines.append(self._col(p.src_zone.name, p.dst_zone.name, p.policy, p.log_level or "-"))
|
||||
src = p.src_zone.name if p.src_zone else "all"
|
||||
dst = p.dst_zone.name if p.dst_zone else "all"
|
||||
lines.append(self._col(src, dst, p.policy, p.log_level or "-"))
|
||||
return "".join(lines)
|
||||
|
||||
def rules(self) -> str:
|
||||
|
||||
Reference in New Issue
Block a user